利用rundll32執行程序的函數執行程序
來源 https://www.cnblogs.com/17bdw/p/8668780.html
1、前言
無意間發現hexacorn這個國外大佬,給出了很多通過rundll32執行DLL中的函數執行程序的方法,思路很靈巧。
2、原理
- rundll32加載dll
用法:
rundll32 <dllname>,<entrypoint> <optional arguments>
參數代表傳入dll的導出函數名,在dll中定義如下:
void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
參數對應dll導出函數中的LPSTR lpszCmdLine
也就是說通過rundll32能控制dll導出函數的LPSTR lpszCmdLine參數
- 執行命令原理
枚舉%windir%/system32下所有dll的導出函數,篩選出包含導出函數OpenURL的dll。
也就是在系統自帶的DLL中找到存有利用函數的方式。
通過powershell獲得dll的導出函數可參考FuzzySecurity的代碼,地址如下:
https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Get-Exports.ps1
在這個代碼的基礎上,添加枚舉dll的功能,分別獲得導出函數,對可以執行程序的函數進行判斷。
3、實現
- 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
4、參考
關於利用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/
============= End