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,如下图

查看伪代码,如下图

注意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,如下图

0x03 扩展利用

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

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

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

测试命令如下:

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\*.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

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

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

由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的结论。

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

  1. NLP实战:利用Python理解、分析和生成文本 | 赠书

    导读:本文内容参考自<自然语言处理实战:利用Python理解.分析和生成文本>一书,由Hobson Lane等人所著. 本书是介绍自然语言处理(NLP)和深度学习的实战书.NLP已成为深度 ...

  2. python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc

    利用Python处理和分析Excel表中数据实战 [利用python进行数据分析--基础篇]利用Python处理和分析Excel表中数据实战 原创 2017年06月28日 15:09:32 标签: p ...

  3. ML之FE:利用FE特征工程(分析两两数值型特征之间的相关性)对AllstateClaimsSeverity(Kaggle2016竞赛)数据集实现索赔成本值的回归预测

    ML之FE:利用FE特征工程(分析两两数值型特征之间的相关性)对AllstateClaimsSeverity(Kaggle2016竞赛)数据集实现索赔成本值的回归预测 目录 输出结果 设计思路 核心代 ...

  4. 噪音曲线图测试软件,利用示波器统计工具分析有噪声信号之测量统计和余晖图...

    利用示波器统计工具分析有噪声信号之测量统计和余晖图 2019-09-24 数字示波提供了多种基于统计的工具,除了前文提到的平均和直方图之外,测量参数统计和余晖图,也是非常有用的工具,协助快速获取有用信 ...

  5. 案例解读:利用12c渐进式DASH分析ON CPU

    墨墨导读:本文来自墨天轮读者"Anbob"供稿,分享利用12c渐进式DASH分析"ON CPU"的过程. 墨天轮主页:https://www.modb.pro/ ...

  6. 利用python进行显著性分析

    利用python进行显著性分析 实验数据 做的是朋友的 呃呃植物什么什么实验 ,相关数据已经打码,最右侧的一列是 spss 的显著性分析的结果 代码 最终设想是能实现和 SPSS 一样或者近似的结果 ...

  7. 利用CIBERSORT免疫细胞类群分析详细教程

    利用CIBERSORT免疫细胞类群分析详细教程 查看全文 http://www.taodudu.cc/news/show-4326345.html 相关文章: 新冠免疫细胞培养.转染.核酸分析整合解决 ...

  8. 利用人工智能和进化分析,绘制出真核生物的蛋白质之间相互作用的3D模型

    美国科学家主导的国际科研团队在最新一期<科学>杂志撰文指出,他们利用人工智能和进化分析,绘制出了真核生物的蛋白质之间相互作用的3D模型,首次确定了100多个可能的蛋白质复合物,并为700多 ...

  9. 利用HTTPWatch进行前端分析之 ——Time chart详细解析

    利用HTTPWatch进行前端分析之  --Time chart详细解析 测试视频笔记 输入http://baidu.com后httpwatch抓取到的内容 1.可以从下图中看到302重定向,因为用户 ...

  10. 利用SQL语句实现分析需求(1)

    利用SQL语句实现分析需求 数仓的设计 原始数据的拆分 利用SQL实现分析需求 流量分析 TOPN问题的求解 页面访问分析 每日最热门页面 访客分析 数仓的设计 维度建模的基本概念: 维度表: 用于描 ...

最新文章

  1. PyTorch 深度剖析:如何保存和加载PyTorch模型?
  2. 移动端屏幕自适应布局
  3. H3C 5510 交换机DHCP设置
  4. quartz 任务调试 建表 sql 语句、create table语句
  5. shell读取文件并且遍历输出
  6. mysql数据库参数
  7. sklearn中的逻辑回归
  8. C# 实现打开和关闭可执行文件
  9. 对话Man Group:对冲基金的达尔文式竞争
  10. MFC windows程序设计(第三版)课后习题第二章
  11. OkHttp3出现java.io.IOException: Hostname was not verified解决方案
  12. 什么是java?以及java的初步简单学习
  13. pdf转换成jpg python_【PyMuPDF和pdf2image】Python将PDF转成图片PNG和JPG
  14. app启动页面的问题
  15. ksy是谁_MOON,sky他们是谁啊?
  16. 织梦选php哪个版本,织梦DedeCMS网站及其版本的判断
  17. 并发初体验,解决小规模并发下单问题
  18. 虹软android实现人脸比对,[Android]虹软arcface人脸识别SDK引擎使用总结
  19. 震惊科学界!DeepMind AI破解「蛋白质折叠」难题
  20. Airtest 安装及模拟器连接

热门文章

  1. 作业5-需求分析(EX:南通大学成绩录入系统)
  2. 访问服务器硬盘速度慢,硬盘读取速度变慢 当前传输模式pio的解决方法
  3. pdf.js上传有盖章文件盖章不显示
  4. 懒人的法宝——办公自动化!
  5. Matlab App Designer自学笔记(三):利息计算器案例
  6. Android GIF图片显示
  7. 如何创建网站 网站的创建方法
  8. 浙江大学计算机系自主招生题目,浙江大学自主招生试题
  9. Linux下分卷压缩与解压
  10. 无法打开匿名级安全令牌——CV明