無心間發現hexacorn這個國外大佬,給出了不少經過rundll32執行DLL中的函數執行程序的方法,思路很靈巧。git
用法: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
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
rundll32 zipfldr.dll, RouteTheCall calc.exe
關於利用rundll32執行程序的分析
Running programs via Proxy & jumping on a EDR-bypass trampoline
命令執行系列
http://www.hexacorn.com/blog/category/living-off-the-land/pass-thru-command-execution/