结论先行:download.php 目录穿越只能下源码(open_basedir + flag 过滤);构造 User→FileList→File POP 链的 phar 上传,用 delete.php 的 file_exists('phar://...') 触发反序列化读 /flag.txt。
题目信息
项
内容
比赛
CISCN2019
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
项目
内容
平台
BUUCTF 练习场
服务器环境
PHP/5.6.40 + openresty + MySQL
知识点:任意文件下载(目录穿越)、open_basedir 绕过、PHAR 反序列化 RCE(文件读取)。
攻击链总览123456注册登录网盘 → download.php 任意文件下载(filename=../../xxx.php)下载源码 → 审计 class.php,确认 POP 链 → 构造 phar(stub=GIF89a,metadata 为精心构造的对象) → upload.php 上 ...
结论先行:escapeshellarg() + escapeshellcmd() 组合可被绕过闭合单引号;用 nmap -oG 把含 <?php ...?> 的结果写进沙盒 a.php,访问木马读 /flag。
题目信息
项
内容
比赛
BUUCTF 2018
方向
Web
难度
中等
环境
授权靶场(已脱敏)
题目描述:一个在线 nmap 扫描工具,host 参数经 escapeshellarg() + escapeshellcmd() 过滤后执行 system("nmap ...")。
信息收集源码123456789101112131415161718<?phpif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];}if(!isset($_GET['host ...
结论先行:后端用 unicodedata.numeric(price) 解析价格且限制单字符,用「兆」「亿」这类单个 Unicode 大数值字符即可 ≥1337 买下 ultra unicorn 拿 flag。
题目信息
项
内容
比赛
ASIS 2019
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
信息收集商品列表页存在购买表单 POST /charge,参数 id、price。探测过程:
id=4&price=1337 → Only one char(?) allowed!(单字符限制)
id=4&price=0 → You don't have enough money!
id=4&price=(空白)→ 泄漏 Tornado Traceback:unicodedata.numeric(price) 在 Shop.py:34
由此确认后端是 Python Tornado,价格由 unicodedata.numeric() 解析。
漏洞分析类型逻辑漏洞:Unicode 数值解析绕过价格校验。
原理ultr ...
结论先行:file 参数未过滤伪协议,flag.php 被直接包含会执行、看不到注释里的 flag;用 php://filter 读 base64 源码再解码即可。
题目信息
项
内容
比赛
ACTF2020 新生赛
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
漏洞类型:文件包含(LFI)+ php://filter 伪协议读取源码。
信息收集访问首页,页面只有一个链接:
12<meta charset="utf8"><a href="?file=flag.php">tips</a>
提示通过 file 参数包含文件,存在文件包含漏洞。
漏洞分析flag.php 被 PHP 执行后只输出一行提示,flag 实际写在源码注释中,注释不会被执行显示。因此需要用伪协议把文件当作原始字节流读取,而非交给 PHP 引擎解析。
利用过程1. 直接访问 flag.php1GET /?file=flag.php
返回:
1Can you find out the flag?
说明 ...
结论先行:target 未过滤直接拼进 system("ping -c 3 " . $target),用 ; 注入任意命令,cat /flag 读取根目录 flag。
题目信息
项
内容
比赛
ACTF2020 新生赛
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
漏洞类型:命令注入(Command Injection)。
信息收集访问首页,是一个 PING 功能,POST 参数 target,后端直接拼接进 shell 命令执行。
123<form method="post"> <input type="text" name="target" placeholder="请输入需要ping的地址" /></form>
漏洞分析查看源码命令注入读取 index.php 源码:
1POST target=127.0.0.1;cat index.php
源码核心:
12345<?phpif (isset ...
结论先行:源码泄漏 + filter() 中 where→hacker 长度 +1 引发反序列化字符串逃逸;用 nickname[] 数组绕过正则与长度校验,把 photo 注入为 config.php,借 file_get_contents 读源码拿 flag。
题目信息
项
内容
比赛
0CTF 2016
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
信息收集访问 www.zip 下载源码,得到 config.php、index.php、register.php、update.php、profile.php、class.php。
漏洞清单:
源码泄漏(www.zip)
PHP 反序列化字符串逃逸(filter() 的 where→hacker 长度 +1)
preg_match/strlen 数组绕过
任意文件读取(file_get_contents($profile['photo']))
漏洞分析class.php 的 filter()(核心)12345678public function filter($st ...
结论先行:登录态的 /upload 会解压 zip 后 cat 解压产物并回显;zip 内的软链接条目未被过滤,可读取任意绝对路径。真 flag 在 PID 1 的 /proc/1/environ,/proc/self/environ 是诱饵。平台提交 accepted:true, is_solved:true。
结论
项
值
目标
BUUCTF CTF2 实践靶场 [HCTF 2018] Hideandseek(WEB / Easy / 1 分)
漏洞类型
Zip symlink 任意文件读 + 环境变量泄露(非注入 / 非反序列化 / 非 getshell)
状态
Confirmed
Flag
CTF2{3b741699-77a5-42f8-9adb-6f6c23dd5105}
置信度
High(独立二次复现 + 平台 accepted)
漏洞分析登录态(Observed / Verified)POST /login 对任意非 admin 用户名都放行,302 回 / 并下发 Flask signe ...







![[HCTF 2018] Hideandseek:zip symlink 任意文件读](/img/cover-default.webp)