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

这篇具有很好参考价值的文章主要介绍了关于利用rundll32执行程序的分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0x00 前言

最近看到了一篇有趣的文章《Abusing Exported Functions and Exposed DCOM Interfaces for Pass-Thru Command Execution and Lateral Movement》,介绍了利用rundll32.exe加载url.dll,通过导出函数OpenURL执行程序的方法。于是我对此做了研究,整理成文,解决以下问题:

  • 利用rundll32执行程序的细节和原理

  • 利用脚本批量扫描dll,查找能够执行程序的dll

0x01 简介

本文将要介绍以下内容:

  • rundll32加载dll的用法

  • OpenURL的用法

  • API ShellExecute的用法

  • 三者结合实现通过rundll32直接执行程序

  • 寻找其他可用的导出函数

  • 利用powershell脚本批量获得dll的导出函数,筛选特定dll

0x02 相关细节

1、rundll32加载dll的用法

官方文档:

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

用法:

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

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

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

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

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

2、OpenURL的用法

这里直接参考文章中的提示,找到url.dll,包含导出函数OpenURL

使用IDA查看url.dll的导出函数OpenURL,其中调用了API ShellExecute,如下图

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

查看伪代码,如下图

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

注意ShellExecute的第二个参数为NULL,第三个参数lpFile对应传入的参数lpFile

3、API ShellExecute的用法

函数原型与参数定义如下:

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

第二个参数为NULL时,表示执行默认操作"open"

第三个参数lpFile表示要打开的程序或文件路径

也就是说,url.dll中导出函数OpenURL的参数lpFile决定API ShellExecute要打开的程序或文件路径

综上,

rundll32.exe url.dll,OpenURL calc.exe

实际上的操作为ShellExecuteA(hwnd, NULL, "calc.exe", NULL, NULL, nShowCmd);,即执行计算器

使用Immunity Debugger动态调试,跟踪到ShellExecuteA,验证判断,传入的参数为

calc.exe,如下图

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

0x03 扩展利用

1、查找url.dll中其它可供利用的导出函数

IDA加载url.dll,选择Search - text...,搜索ShellExecuteA

导出函数FileProtocolHandler同样调用API ShellExecute,如下图

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

测试命令如下:

rundll32.exe url.dll,FileProtocolHandler calc.exe

执行计算器

2、查看其它dll是否包含导出函数OpenURL

实现思路:

枚举%windir%/system32下所有dll的导出函数,筛选出包含导出函数OpenURL的dll

通过powershell获得dll的导出函数可参考FuzzySecurity的代码,地址如下:

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

在这个代码的基础上,添加枚举dll的功能,分别获得导出函数,进行判断

实现细节:

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

$DllSearchPath = dir c:\windows\system32\*.dll

foreach($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

会报错,尝试读取或写入受保护的内存,对语句$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

执行如下图,获得其他两个dll,分别为ieframe.dll和shdocvw.dll

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

使用IDA加载ieframe.dll,查看导出函数OpenURL,伪代码如下图

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

由CInternetShortcut可以得知执行的文件为.url文件

编写一个.url文件,内容如下:

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

cmd:

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

成功执行,弹出计算器

同样,shdocvw.dll也是相同的测试结果

3、执行的程序类型

调用API ShellExecute执行程序,不仅支持exe,也同样支持脚本

例如执行js文件,内容如下:

WScript.Echo("1");

cmd:

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

执行后弹框

例如hta文件,内容如下:

<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

执行后弹出计算器

例如url文件,内容如下:

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

cmd:

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

成功执行,弹出计算器

4、更多利用方法

hexacorn在他的文章里分享了另一个可供使用的dll和导出函数:

rundll32 zipfldr.dll, RouteTheCall calc.exe

当然,还有更多可供使用的dll,本文暂不介绍

0x04 小结

本文分析了利用rundll32.exe加载url.dll并通过导出函数OpenURL执行程序的细节,对其扩展,尝试利用脚本批量扫描%windir%/system32下的dll,找到能够执行程序的dll,分别验证了bohops和Hexacorn的结论。文章来源地址https://www.toymoban.com/news/detail-443197.html

到了这里,关于关于利用rundll32执行程序的分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CVE-2022-30190分析以及复现和POC利用 //Microsoft Office MSDT 远程代码执行漏洞

    在微软官方的介绍里,是从 Word 等调用应用程序使用 URL 协议调用 MSDT 时存在远程执行代码漏洞。成功利用此漏洞的攻击者可以使用调用应用程序的权限运行任意代码。 意思是恶意 Word 文档可以使用远程模板功能从远程服务器获取 HTML 文件,并且 HTML 代码可以使用 Microsoft 的

    2024年02月04日
    浏览(70)
  • 利用STM32实现流水灯程序

    keil MDK安装与新建工程 在KEIL MDK官网中下载KEIL MDK ARM,下载链接如下:MDK-ARM Version 5.38a Evaluation Software Request (keil.com),在填写信息后进行安装和下载。 安装后进行以下操作: 右键keil5图标,点击“以管理员身份运行” 进入之后, 点击“ file ”里边的选项“ License Management ”

    2024年02月06日
    浏览(44)
  • 关于Ubuntu python程序利用lixb264生成h264格式的视频相关问题

    从官网下载:https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/ 安装包页面上的nasm-2.13.03.tar.bz2 x264库下载地址:http://www.videolan.org/developers/x264.html 下载 x264-master.tar.bz2 利用命令 x264 --version 查看是否配置成功 从官网下载ffmpeg ffmpeg-snapshot.tar.bz2 sudo ldconfig 若转出视频为h.264格式则说明成功

    2023年04月08日
    浏览(93)
  • No such file or directory (os error 2) : 关于树莓派32位配置rust环境后执行rustc相关命令出现的错误.

    问题的前因: 最新32位树莓派os安装scrapy时提示rust版本需要=1.48.0. 手动安装rust,配置rust环境变量后执行rustc,cargo等相关命令时出现如题错误,参考国外网站给出的解决方案 执行如下两条命令:

    2024年02月12日
    浏览(62)
  • stm32利用mqtt与小程序通信

    本项目实现的功能如下:通过stm32连接esp8266,然后利用mqtt协议连接到服务器,同时小程序端也连接到服务器,通过订阅和发布主题来使得这两个客户端能进行数据的传输。 本章所用到的器件如下: STM32F103ZET6最小系统板 ESP8266-01S模块 USB转microUSB数据线 四根杜邦线 连接如下:

    2023年04月08日
    浏览(30)
  • 32.利用fmincon 解决 最小费用问题(matlab程序)

    1. 简述        fmincon函数非线性约束下的最优化问题 fmincon函数,既是求最小约束非线性多变量函数 该函数被用于求如下函数的最小值 语法如下: x = fmincon(fun,x0,A,b) x = fmincon(fun,x0,A,b,Aeq,beq) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) x = fmincon(fun,x0,A,b,Aeq,

    2024年02月14日
    浏览(42)
  • 关于四足行走机器人步态分析STM32+SG90舵机控制

    最近逛某站看了很多国赛大佬的赛车,下面评论区一堆大佬在感叹“老师看到赛车都摇头。”作为一个初入STM32坑的萌新,我在某些站上查阅了相关资料后,确定给我自己的机器人搞成四足行走(ps,其实是L298N烧了)。 目前手上的板子是C8T6,学习的视频是江科协,主要代码

    2024年01月21日
    浏览(72)
  • 关于在微信小程序中使用taro + react-hook后销毁函数无法执行的问题

    问题: 在 taro中使用navigageTo() 跳转路由后hook中useEffect 的return函数没有执行 没有执行return函数 框架版本:      tarojs:  3.6                            react:   18.0    原因: 使用navigateTo() 跳转路由的话并不会销毁页面和组件,会加入一个最大数量为十层的路由

    2024年01月24日
    浏览(45)
  • Rust 性能优化 : Rust 性能优化技巧,提升 Rust 程序的执行效率和资源利用率 The Rust Performance

    作者:禅与计算机程序设计艺术 在过去的几年中,随着编程语言的快速发展,编程人员已经逐渐从依赖编译型语言转向了使用解释型语言。相对于编译型语言来说,解释型语言具有更快的执行速度,在某些情况下甚至可以实现接近编译器的运行时效率。但是另一方面,这些语

    2024年02月07日
    浏览(103)
  • Midjourney万能高清咒语,真正的近看也美

    明明我都拿人家的图垫图了,为什么质量还是很差? 明明别人都把咒语分享出来了,为什么质量还是很差? 今天我们就来解决这两个问题,看到就是缘分,点点手指来个小心心不过分吧,哈哈 什么你在怀疑我的实力,可以看我第一张图的对比效果,可以来一张图片PK下呦 问

    2024年02月10日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包