Exif 注入 (Exif Injection)是一种网络安全攻击技术。攻击者将恶意代码如 PHP 脚本、JavaScript 等隐藏在图片文件的Exif 元数据中并利用目标系统对这些数据的处理缺陷最终在服务器或用户的浏览器上执行恶意代码。Exif 是什么ExifExchangeable Image File Format是专门为数码照片设定的标准用于记录照片的属性信息和拍摄数据。当你用手机或相机拍照时文件内不仅包含图像本身还包含很多文本标签字段例如相机品牌和型号 (Make / Model)拍摄时间和日期GPS 地理位置信息图像描述或备注 (Comment)作者/艺术家 (Artist)攻击者通常会使用类似exiftool的命令行工具篡改一张正常图片中的 Exif 字段将恶意 Payload 写入原本应该存放普通文本的地方。例如攻击者可以将一段 PHP 一句话木马写入图片的Comment备注字段exiftool-Comment?php system($_GET[cmd]); ?malicious.jpg经过修改后malicious.jpg依然是一张可以正常打开的图片但它的内部结构中已经潜伏了恶意代码。常见的攻击与利用场景Exif 注入本身相当于一个“特洛伊木马”它通常需要结合目标网站的其他漏洞才能触发实质性的危害。以下是两种最经典的利用场景1. 结合文件包含漏洞 (LFI) 导致远程代码执行 (RCE)这是 Exif 注入最危险的利用方式。上传木马目标网站可能对上传文件有严格的后缀名检查仅允许.jpg,.png但由于修改了 Exif 的图片本质上仍是合法的图片格式因此可以轻易绕过上传验证并保存在服务器上。触发执行如果该网站同时存在本地文件包含漏洞 (LFI)例如代码中使用了不受信任的变量include($_GET[page]);攻击者就可以通过 LFI 去“包含”刚才上传的图片如?pageuploads/malicious.jpg。最终结果当 PHP 引擎解析被包含的文件时它会跳过图片的二进制乱码一旦匹配到 Exif 数据中隐藏的?php ... ?标签就会将其作为后端的代码强制执行导致服务器被攻陷。2. 导致存储型跨站脚本攻击 (Stored XSS)注入脚本攻击者在 Exif 字段中注入恶意的 JavaScript 代码例如scriptalert(document.cookie)/script。触发执行许多摄影社区或博客网站会自动读取用户上传图片的 Exif 信息并在前端页面上展示例如显示“照片由某某相机拍摄”。如果网站后端在提取和存储这些 Exif 数据时没有进行过滤前端在展示时也没有进行 HTML 实体转义。最终结果恶意脚本会被直接渲染在网页中。任何访问该页面的其他用户都会在其浏览器中执行这段恶意代码可能导致会话劫持Cookie 窃取或账号被盗用。防御与修复建议要防范 Exif 注入开发者在处理用户上传的媒体文件时应遵循以下安全实践强制剥离元数据 (Metadata Stripping)最根本的防御方法是在图片上传后使用图像处理库如 PHP 的 GD 库或 Python 的 Pillow重新渲染该图片或者使用专用工具彻底清除图片中的所有 Exif 信息然后再保存到服务器。目录权限控制确保存放用户上传文件的目录例如/uploads/没有脚本执行权限。在 Web 服务器如 Nginx 或 Apache中配置该目录禁止解析任何动态脚本如.php。严格的数据转义如果业务场景确实需要读取并展示图片的 Exif 信息必须将其视为“不可信的用户输入”。在前端页面输出之前务必进行严格的 XSS 过滤和 HTML 实体转义。案例演示这里拿xss-labs靶场的第14关来作为演示查看前端源码既然前端是一个标准的input typefile我们就来实打实地造一个“带毒”的图片。随便找一张图片修改它的 EXIF 信息将作者名改成scriptalert(1)/script带上是为了防止后端将信息输出在某个标签属性里有备无患。 我们使用kali自带的 ExifTool 工具。