Ciscn初赛WP
字数 913 2025-08-06 12:20:59
利用软链接进行目录穿越攻击的技术分析
技术背景
本文档详细分析了一种通过构造特殊压缩包利用软链接(符号链接)实现目录穿越的攻击技术,该技术在CTF比赛(Ciscn初赛)中被用于解决Web题目。
核心原理
攻击者通过创建指向根目录的软链接,并将其打包成压缩文件,当目标系统解压该文件时,会遵循软链接的指向,导致文件被解压到非预期位置,实现目录穿越。
详细攻击步骤
1. 创建软链接
ln -s / .binbin
这条命令创建了一个名为.binbin的软链接,指向系统的根目录/。
2. 打包软链接
zip --symlinks root.zip .binbin
使用zip命令打包软链接文件,--symlinks参数确保打包时保留符号链接属性而非链接指向的内容。
3. 构造恶意压缩包
攻击者需要构造一个压缩包,使其解压时:
- 首先创建
.binbin软链接指向根目录 - 然后利用该软链接将文件解压到
/var/www/html/目录下
4. 上传并利用
- 将构造好的压缩包上传到目标系统
- 目标系统解压时:
- 首先创建
.binbin -> /的软链接 - 然后解压文件到
.binbin/var/www/html/,由于.binbin指向/,实际文件会被解压到/var/www/html/
- 首先创建
实际应用示例
假设攻击者想要将binbin.php文件写入目标系统的/var/www/html/目录:
-
创建目录结构:
mkdir -p .binbin/var/www/html/ cp binbin.php .binbin/var/www/html/ ln -s / .binbin -
打包:
zip --symlinks malicious.zip .binbin -
上传
malicious.zip到目标系统并解压后,binbin.php会被写入/var/www/html/binbin.php
防御措施
- 解压前检查:在解压用户上传的压缩包前,检查其中是否包含符号链接
- 使用安全解压参数:
unzip命令可使用-L参数将符号链接转换为普通文件- 或使用
-P参数禁止处理符号链接
- 限制解压目录:使用
-d参数指定解压目录,不跟随符号链接 - 文件系统隔离:在容器或沙箱环境中处理不可信压缩文件
- 权限控制:确保Web应用运行账户对系统关键目录没有写权限
总结
这种攻击利用了压缩工具处理符号链接时的特性,结合Web应用的文件上传和解压功能,实现了目录穿越和任意文件写入。防御的关键在于正确处理符号链接和限制解压行为。