利用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

相關文章
相關標籤/搜索