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执行程序的分析

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

最新文章

  1. 谈谈关键字final
  2. 洛谷P1101 单词方阵——S.B.S.
  3. Shell study note
  4. Delphi 有关Dbgrideh控件:变色处理
  5. [kipmi0]进程导致系统负载高
  6. Linux发行分支时间轴
  7. 导出excel表功能
  8. .Net实现的批量删除(使用了repeater控件)
  9. VS的启动方式
  10. C# 白话系列之——白话委托
  11. iOS sharedSDK详解
  12. (转载)delphi 把图片存入数据库
  13. canvas个人总结
  14. 在WPF中使用ArcGIS Engine
  15. winform倒计时
  16. delphi 鼠标拖动
  17. RHEL,红帽CentOS7linux进入单用户(紧急救援)模式修改密码
  18. 使用数据泵expdp、impdp备份和还原oracle数据库
  19. rad 10.2
  20. 导出Excel工具类

热门文章

  1. UFLDL学习笔记 ---- 主成分分析与白化
  2. java中new两个对象,在堆中开辟几个对象空间
  3. Springboot+Thymeleaf框架的button错误
  4. Java8 新特性Stream 的学习和使用方法
  5. vim 折叠的用法
  6. python3.6爬虫总结-01
  7. COGS 栅格网络流
  8. 浅谈splay(点的操作)
  9. SQL语句(十七)综合练习_分组查询_内嵌查询_视图使用
  10. Spyder简述