0

0

kali怎么挖php漏洞_利用exiftool查php上传图片马洞【技巧】

看不見的法師

看不見的法師

发布时间:2026-01-25 19:07:06

|

739人浏览过

|

来源于php中文网

原创

exiftool 可将 PHP 代码写入 JPEG 的 Comment 或 APP1 段而不破坏图片结构,但执行需服务器配置支持(如 Apache AddType 或 Nginx fastcgi_pass),且绕过校验依赖保持文件头(FF D8 FF)和 MIME 识别为 image/jpeg。

kali怎么挖php漏洞_利用exiftool查php上传图片马洞【技巧】

exiftool 能不能直接写入 PHP 代码到图片里

能,但不是“写入 PHP 马”,而是把 PHP 代码作为无效的 EXIF 元数据塞进图片头部——多数 PHP 环境在 move_uploaded_file() 后未重命名或未校验文件内容,且服务器配置为解析 .jpg.php.jpg 后缀(如 Apache 的 AddType application/x-httpd-php .jpg),才会触发执行。

常见错误现象:exiftool -Comment="" shell.jpg 后上传,但访问返回 404 或纯文本显示,说明后端没启用该后缀解析,或 Nginx/Apache 没配 MIME 类型映射。

  • 必须确认目标服务器支持将图片后缀(如 .jpg)交由 PHP 解析器处理,否则只是个带垃圾注释的正常图片
  • exiftool 修改的是 JPEG 的 APP1/APP2 段或 Comment 字段,不破坏图片结构,但某些 WAF 或后端校验会提取并丢弃非标准字段
  • PHP 代码需避开单双引号冲突,推荐用 -Comment='' 并确保引号嵌套正确

为什么上传后 PHP 代码不执行

根本原因不是 exiftool 没写进去,而是执行链断在了中间环节。典型断点有三个:

  • Web 服务器未配置 .jpg 关联 PHP 处理器(Apache 需 AddType,Nginx 需 location ~ \.jpg$ { fastcgi_pass ... }
  • PHP 配置禁用了危险函数(disable_functions = exec,system,shell_exec),导致 @eval 无效果
  • 上传后文件被移动到非 Web 目录、或重命名为 xxx.jpg?123 这类带参数路径,实际访问时无法命中

验证方式:上传后直接请求该 URL,用 curl -v http://target.com/uploads/shell.jpg 看响应头是否含 X-Powered-By: PHP,或响应体是否含 phpinfo() 输出。

立即学习PHP免费学习笔记(深入)”;

Mulan AI
Mulan AI

画布式AI视频创作平台,轻松制作爆款视频

下载

怎么绕过前端 JS 和后端对图片格式的校验

前端 JS 校验(如 file.type === 'image/jpeg')完全可绕过;后端用 getimagesize()exif_imagetype() 判断,这些函数只检查文件头,不扫描全文。

  • 保持 JPEG 文件头不变(FF D8 FF),在合法 APP1 段插入 PHP 代码,getimagesize() 仍返回 IMAGETYPE_JPEG
  • 避免使用 file_exists()finfo_file() 的 strict mode,后者可能因 Content-Type 不匹配而失败
  • 若后端用 pathinfo($file)['extension'] 取扩展名,就别改后缀;若用 mime_content_type(),则需确保 exiftool 写入后 MIME 仍被识别为 image/jpeg

实操建议:exiftool -Comment="" -o shell_backdoor.jpg original.jpg,再用 file shell_backdoor.jpgexiftool shell_backdoor.jpg | grep Comment 确认写入成功且类型未变。

Kali 中 exiftool 写入后怎么快速测试是否生效

别急着上传,先本地验证 payload 是否干净、是否会被杀软拦截、是否语法合法。

  • exiftool -Comment shell_backdoor.jpg 看输出是否完整显示 PHP 代码(注意转义问题)
  • strings shell_backdoor.jpg | grep -n " 确保字符串未被截断或编码污染
  • 起一个临时 PHP 服务:php -S 127.0.0.1:8000 -t ./uploads,把图片放进去,浏览器访问 http://127.0.0.1:8000/shell_backdoor.jpg
  • 如果报错 Parse error: syntax error,说明 PHP 代码里混入了不可见字符(exiftool 默认加 UTF-8 BOM),加参数 -encoding Latin 重试

真正难的从来不是写入,而是让那个 .jpg 文件,在经过前端、WAF、后端校验、文件移动、Web 服务器路由之后,还能被当成 PHP 执行——每个环节都可能静默失败,且不报错。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2882

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1704

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1561

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

1078

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1525

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1277

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1649

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1309

2023.11.13

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

45

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 9.3万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 10.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号