网站源码 — 考点精讲

前置知识:HTTP 协议基础 — 先了解 HTTP 协议基础再来看本考点

原理精讲 — 备份文件为什么存在?

开发者为什么留下整站压缩包

flowchart LR
 A[开发者打包源码] --> B[www.zip 上传服务器]
 B --> C{部署完是否删除?}
 C -->|忘记删| D[备份文件留在 Web 目录]
 C -->|以为别人不知道路径| D
 D --> E[攻击者可下载整站源码]

常见场景:

  1. 上线部署后未清理:用 zip -r www.zip /var/www/ 打包后 FTP 上传,解压完没删压缩包
  2. 以为文件名没人知道backup.zip 放在网站根目录,以为不会被发现
  3. 自动化 CI/CD 残留:打包脚本输出 www.zip 到 Web 目录后未清理
  4. 编辑器 / 版本工具自动备份index.php~index.php.swpindex.php.bak(见 bak文件vim缓存

备份文件泄露的危害面

泄露层具体危害
源码直接获取后端代码,找到 SQL 注入点、文件上传漏洞、认证缺陷
配置数据库 IP:端口:用户名:密码 全部暴露在 config.php
路径结构看到完整的目录树和文件清单(如 flag_1155626646.txt 暴露真实路径)
凭据SSH 密钥、.env 文件、API token 跟着一起打包
flag 本身如果 flag 被写进源码而非环境变量,压缩包直接包含明文 flag
代码逻辑反推后端路由、权限校验、加密方法 → 针对性构造 payload

通用心法

服务器行为如果可被观察(200 vs 404 有明确区分),就用脚本枚举。覆盖面决定成功率,不依赖”猜”。

备份文件场景里,“可被观察”的条件完全满足:文件存在则 200,不存在则 404,curl 一行就判断。

命名习惯

备份文件名的约定俗成:网站根目录在 Linux 上是 /var/www,所以 www.zipweb.zipbackup.zipwebsite.zipwwwroot.ziptemp.zip 是最高概率的几项;后缀常见 tar / tar.gz / zip / rar

注意事项

易错点说明
干扰项(decoy)压缩包里的 flag 文件内容可能是假的(如 “where is flag ??”),真实 flag 在文件名暴露的服务器路径
文件名本身就是线索flag_1155626646.txt 这个随机名 → 直接访问服务器根目录的同名文件
别只解压解压后先 unzip -l 看清单,文件名/结构往往比内容更值钱
命中判定200 才算文件存在,404 是空;网络错误 000 要排除
高概率优先先试 www.zip(/var/www 约定)再跑全组合

题目解法

CTFHub 技能树位置:CTFHub → Web → Web 信息泄露 → 备份文件下载 → 网站源码

提示:组合枚举(文件名 × 后缀两两组合)用 trav 一行搞定(trav "目标/" "web&website&backup&www" "!=404" --ext ".zip&.tar&.tar.gz&.rar")。trav 的源码与完整用法见首次引入处 基本认证遍历脚本

解法(trav / 脚本枚举):

# 1. 按提示的组合枚举,找到真实存在的备份文件
trav "http://目标/" "web&website&backup&back&www&wwwroot&temp" "!=404" --ext ".zip&.tar&.tar.gz&.rar"
# HIT: /www.zip -> 200
 
# 2. 下载并查看压缩包内容(-l 只列清单不解压)
curl -s "http://目标/www.zip" -o www.zip
unzip -l www.zip
# 看到 50x.html / flag_1155626646.txt / index.html
 
# 3. 看 flag 文件内容(是干扰项,别上当)
unzip -p www.zip flag_1155626646.txt
# 输出: where is flag ??
 
# 4. 关键一步:文件名暴露了真实路径,直接访问服务器同名文件
curl -s "http://目标/flag_1155626646.txt"
# ctfhub{5933d6146203d891f3a406fa}

解法(gobuster 目录爆破,量大时用):

gobuster dir -u http://目标/ -w dict/backup.txt --no-error -s 200
# 爆出 www.zip 后手动下载解压

同类变式(备份文件下载大类)

考点说明终端提取
网站源码压缩包(本题)www.zip 整站源码备份泄露组合枚举 → unzip -l → 按文件名访问
编辑器备份文件index.php~index.php.bak.index.php.swp 编辑后残留curl URL/index.php.bak
版本控制泄露.git/.svn/ 目录可公开访问gitdump URL,见 Git泄露
文本备份文件直接把 flag 写到备份里,内容含 flag直接 curl 或用 grep -oE 提取
DS_Store 泄露macOS 目录元数据,泄露完整文件清单dsstore --notes URL/.DS_Store,见 DS_Store
目录索引泄露备份文件名出现在目录列表中目录遍历题 — 见 目录遍历
备份文件下载-命令执行下载 .bak 文件含有 PHP 代码可执行CTFHub 同一分类的进阶题

核心知识点总结

概念说明
备份文件开发者在服务器上留下的 .zip / .tar.gz / .bak / ~ / .swp 等备份
整站压缩包zip -r www.zip /var/www/ 打包后留在 Web 目录
组合枚举文件名 × 后缀,trav --ext 一键笛卡尔积
干扰项(decoy)zip 内文件内容误导,真实 flag 在 zip 文件的文件名暴露的路径上
/var/wwwLinux 默认网站根目录,www.zip 是备份文件最高概率项
unzip -l / -p-l 列出内容不解压,-p 把内容输出到 stdout(方便 grep)
防御角度部署后删除备份压缩包,保留打包脚本但排除 Web 目录输出路径

关联教程