利用rundll32执行程序的函数执行程序

一、前言

无心间发现hexacorn这个国外大佬,给出了不少经过rundll32执行DLL中的函数执行程序的方法,思路很灵巧。git

二、原理

  • rundll32加载dll

用法:github

rundll32 <dllname>,<entrypoint> <optional arguments>

参数<entrypoint>表明传入dll的导出函数名,在dll中定义以下:shell

void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);

参数<optional arguments>对应dll导出函数中的LPSTR lpszCmdLinewindows

也就是说经过rundll32能控制dll导出函数的LPSTR lpszCmdLine参数函数

  • 执行命令原理

枚举%windir%/system32下全部dll的导出函数,筛选出包含导出函数OpenURL的dll。ui

也就是在系统自带的DLL中找到存有利用函数的方式。url

经过powershell得到dll的导出函数可参考FuzzySecurity的代码,地址以下:spa

https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Get-Exports.ps1code

在这个代码的基础上,添加枚举dll的功能,分别得到导出函数,对能够执行程序的函数进行判断。blog

三、实现

  • url.dll
rundll32 url.dll, OpenURL file://c:\windows\system32\calc.exe

    rundll32 url.dll, OpenURLA file://c:\windows\system32\calc.exe

    rundll32 url.dll, FileProtocolHandler calc.exe
  • zipfldr.dll
rundll32 zipfldr.dll, RouteTheCall calc.exe

四、参考

关于利用rundll32执行程序的分析

https://xz.aliyun.com/t/2188

Running programs via Proxy & jumping on a EDR-bypass trampoline

http://www.hexacorn.com/blog/2017/05/01/running-programs-via-proxy-jumping-on-a-edr-bypass-trampoline/

命令执行系列

http://www.hexacorn.com/blog/category/living-off-the-land/pass-thru-command-execution/

https://twitter.com/subTee

相关文章
相关标签/搜索