日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發(fā)布時間:2023/12/18 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于利用rundll32执行程序的分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

0x00 前言

最近看到了一篇有趣的文章《Abusing Exported Functions and Exposed DCOM Interfaces for Pass-Thru Command Execution and Lateral Movement》,介紹了利用rundll32.exe加載url.dll,通過導出函數(shù)OpenURL執(zhí)行程序的方法。于是我對此做了研究,整理成文,解決以下問題:

  • 利用rundll32執(zhí)行程序的細節(jié)和原理

  • 利用腳本批量掃描dll,查找能夠執(zhí)行程序的dll

0x01 簡介

本文將要介紹以下內(nèi)容:

  • rundll32加載dll的用法

  • OpenURL的用法

  • API ShellExecute的用法

  • 三者結合實現(xiàn)通過rundll32直接執(zhí)行程序

  • 尋找其他可用的導出函數(shù)

  • 利用powershell腳本批量獲得dll的導出函數(shù),篩選特定dll

0x02 相關細節(jié)

1、rundll32加載dll的用法

官方文檔:

https://support.microsoft.com/sk-sk/help/164787/info-windows-rundll-and-rundll32-interface

用法:

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

參數(shù)<entrypoint>代表傳入dll的導出函數(shù)名,在dll中定義如下:

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

參數(shù)<optional arguments>對應dll導出函數(shù)中的LPSTR lpszCmdLine

也就是說通過rundll32能控制dll導出函數(shù)的LPSTR lpszCmdLine參數(shù)

2、OpenURL的用法

這里直接參考文章中的提示,找到url.dll,包含導出函數(shù)OpenURL

使用IDA查看url.dll的導出函數(shù)OpenURL,其中調(diào)用了API ShellExecute,如下圖

查看偽代碼,如下圖

注意ShellExecute的第二個參數(shù)為NULL,第三個參數(shù)lpFile對應傳入的參數(shù)lpFile

3、API ShellExecute的用法

函數(shù)原型與參數(shù)定義如下:

HINSTANCE ShellExecute(_In_opt_ HWND hwnd,_In_opt_ LPCTSTR lpOperation,_In_ LPCTSTR lpFile,_In_opt_ LPCTSTR lpParameters,_In_opt_ LPCTSTR lpDirectory,_In_ INT nShowCmd );

第二個參數(shù)為NULL時,表示執(zhí)行默認操作"open"

第三個參數(shù)lpFile表示要打開的程序或文件路徑

也就是說,url.dll中導出函數(shù)OpenURL的參數(shù)lpFile決定API ShellExecute要打開的程序或文件路徑

綜上,

rundll32.exe url.dll,OpenURL calc.exe

實際上的操作為ShellExecuteA(hwnd, NULL, "calc.exe", NULL, NULL, nShowCmd);,即執(zhí)行計算器

使用Immunity Debugger動態(tài)調(diào)試,跟蹤到ShellExecuteA,驗證判斷,傳入的參數(shù)為

calc.exe,如下圖

0x03 擴展利用

1、查找url.dll中其它可供利用的導出函數(shù)

IDA加載url.dll,選擇Search?-?text...,搜索ShellExecuteA

導出函數(shù)FileProtocolHandler同樣調(diào)用API ShellExecute,如下圖

測試命令如下:

rundll32.exe url.dll,FileProtocolHandler calc.exe

執(zhí)行計算器

2、查看其它dll是否包含導出函數(shù)OpenURL

實現(xiàn)思路:

枚舉%windir%/system32下所有dll的導出函數(shù),篩選出包含導出函數(shù)OpenURL的dll

通過powershell獲得dll的導出函數(shù)可參考FuzzySecurity的代碼,地址如下:

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

在這個代碼的基礎上,添加枚舉dll的功能,分別獲得導出函數(shù),進行判斷

實現(xiàn)細節(jié):

(1)枚舉c:\windows\system32下的所有dll:

$DllSearchPath = dir c:\windows\system32\*.dllforeach($DllName in $DllSearchPath) { $DllName.Name }

(2)對于c:\windows\system32\auditpolmsg.dll

會報錯提示輸入字符串的格式不正確,所以對語句$OffsetPtr = New-Object System.Intptr -ArgumentList $($HModule.ToInt64() + $ExportRVA)加入try catch判斷

代碼位置:

https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Get-Exports.ps1#L141

(3)對于c:\windows\system32\avicap.dll

會報錯,嘗試讀取或?qū)懭胧鼙Wo的內(nèi)存,對語句$EXPORT_DIRECTORY_FLAGS = [system.runtime.interopservices.marshal]::PtrToStructure($OffsetPtr, [type]$IMAGE_EXPORT_DIRECTORY)
加入try catch判斷

(4)目前代碼只支持32位dll的判斷

完整代碼可參考:

https://raw.githubusercontent.com/3gstudent/Writeup/master/Find-OpenURL.ps1

執(zhí)行如下圖,獲得其他兩個dll,分別為ieframe.dll和shdocvw.dll

使用IDA加載ieframe.dll,查看導出函數(shù)OpenURL,偽代碼如下圖

由CInternetShortcut可以得知執(zhí)行的文件為.url文件

編寫一個.url文件,內(nèi)容如下:

[InternetShortcut] URL=c:\windows\system32\calc.exe

cmd:

rundll32.exe ieframe.dll,OpenURL C:\4\calc.url

成功執(zhí)行,彈出計算器

同樣,shdocvw.dll也是相同的測試結果

3、執(zhí)行的程序類型

調(diào)用API ShellExecute執(zhí)行程序,不僅支持exe,也同樣支持腳本

例如執(zhí)行js文件,內(nèi)容如下:

WScript.Echo("1");

cmd:

rundll32.exe url.dll,OpenURL C:\4\echo.js

執(zhí)行后彈框

例如hta文件,內(nèi)容如下:

<HTML> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <HEAD> <script language="VBScript"> Window.ReSizeTo 0, 0 Window.moveTo -2000,-2000 Set objShell = CreateObject("Wscript.Shell") objShell.Run "calc.exe" self.close </script> <body> demo </body> </HEAD> </HTML>

cmd:

rundll32.exe url.dll,OpenURLA C:\4\calc.hta

執(zhí)行后彈出計算器

例如url文件,內(nèi)容如下:

[InternetShortcut] URL=c:\windows\system32\calc.exe

cmd:

rundll32.exe ieframe.dll,OpenURL C:\4\calc.url

成功執(zhí)行,彈出計算器

4、更多利用方法

hexacorn在他的文章里分享了另一個可供使用的dll和導出函數(shù):

rundll32 zipfldr.dll, RouteTheCall calc.exe

當然,還有更多可供使用的dll,本文暫不介紹

0x04 小結

本文分析了利用rundll32.exe加載url.dll并通過導出函數(shù)OpenURL執(zhí)行程序的細節(jié),對其擴展,嘗試利用腳本批量掃描%windir%/system32下的dll,找到能夠執(zhí)行程序的dll,分別驗證了bohops和Hexacorn的結論。

總結

以上是生活随笔為你收集整理的关于利用rundll32执行程序的分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。