靶场名称: 春秋云境
**靶场类型:**目录遍历漏洞

**目标说明:**靶场页面无交互功能,需要挖掘后台存在的文件下载接口,利用目录穿越漏洞读取服务器根目录下的 flag 文件,拿到题目 flag。
**信息收集过程:**打开靶场首页,观察前端页面,页面仅有展示界面,不存在按钮、表单等可交互功能,无法直接从页面上找到利用点。首先查看题目提示,提示指向后台文件下载接口/_admin/imgdownload.php。使用 Burp Suite 抓包,构造 GET 请求直接访问该接口,携带filename参数,初始测试时传入普通参数,服务器返回 200 状态码,证明该 PHP 接口真实存在并且参数可控,确认接口可以正常接收我们传入的 filename 参数,具备进一步测试的条件。

**使用的工具:**Burp Suite Professional,用于构造、发送 HTTP 请求,查看服务器响应包内容。
关键漏洞点: imgdownload.php中的filename参数对用户输入没有做../路径字符过滤,直接将用户传入的参数拼接到文件读取函数中,攻击者可以通过../向上跳转目录,跳出网站 Web 工作目录,读取服务器本地任意文件 。注意该接口响应头中ContentDisposition: attachment; filename="flag.png"只是 HTTP 下载头,仅用来定义浏览器下载弹窗显示的文件名,不是服务器磁盘上真实读取的文件名,不能被这个返回头迷惑,真实文件内容存放在 HTTP 响应包的响应正文当中。
利用过程概述: 在 Burp Suite 的 Repeater 模块构造 GET 请求,请求路径为/_admin/imgdownload.php,给filename参数传入../进行目录向上跳转,不断叠加../尝试跳出 web 站点目录,使用../../../../flag作为参数值,多次../回退到服务器根目录,读取根目录下的 flag 文件。发送请求之后服务器返回 HTTP/2 200 OK,观察响应包,虽然响应头告知浏览器下载文件名为 flag.png,但是直接查看 Response 响应正文,正文内直接输出了目标 flag 字符串,不需要下载保存 png 文件,直接从响应数据包中提取 flag 即可完成解题。


修复建议:
- 对filename用户输入进行严格过滤,直接拦截、替换../、..\这类目录跳转字符;
- 使用白名单机制,限制仅允许读取指定文件夹内的文件,将用户传入文件名拼接固定的基础目录,使用realpath()函数校验最终文件路径,确保文件不会跳出预设的允许访问目录;
- 禁止直接把用户可控输入作为文件路径传入readfile()等文件读取函数;
- 文件下载功能不要直接暴露后台接口,增加身份鉴权校验。
**本题总结:**这道 CVE 靶场的前端页面没有任何交互点,漏洞藏在后台的文件下载接口,很容易被响应头里的flag.png误导,误以为需要处理图片文件,实际上这只是 PHP 写死的下载展示名称,flag 直接明文放在响应体。解题核心就是理解../代表向上跳转目录的原理,利用未过滤的文件下载参数实现目录穿越读取任意文件,做这类题重点关注抓包后的完整响应包,不要只看响应头,多观察响应正文返回的内容。