从“备份文件”到“信息泄露”:CTF中那些藏在角落里的flag

在网络安全的世界里,信息泄露是最常见、也最容易被忽视的漏洞之一。很多新手觉得“泄露个备份文件能有多大危害?”但事实上,在CTF(夺旗赛)和真实渗透测试中,一个不起眼的.bak文件、一个残留的.git目录,往往就是通向服务器权限或核心数据的大门。

今天这篇文章,会把“信息泄露”和“备份文件”相关的知识讲透,并列举CTF中常见的考题类型和解题思路。不管你是CTF新手,还是想巩固Web安全基础,相信都能有所收获。


一、什么是信息泄露?

简单说,信息泄露就是本不该被外人看到的东西,因为配置不当、开发习惯不好或者疏忽,被暴露在了公网上

比如:

  • 网站管理员把数据库配置文件config.php备份成了config.php.bak,结果这个备份文件可以被直接下载。
  • 开发者用Git管理代码,但把整个.git目录上传到了服务器,任何人都能还原出完整源码。
  • 编辑器(如Vim)异常退出后留下了.swp临时文件,里面可能包含未保存的敏感内容。
  • 服务器开启了目录浏览,别人能看到所有文件列表。

这些泄露的信息本身可能不是flag,但它们往往是通往flag的钥匙。CTF中,信息泄露题通常作为Web题的入口,考察选手的观察力和对常见泄露点的熟悉程度。


二、常见的信息泄露类型(附CTF出题点)

2.1 备份文件泄露

这是最经典的一类。开发者修改文件前,习惯手动备份一份,比如把index.php复制为index.php.bak,或者用编辑器自动生成备份文件。如果这些文件还在Web目录下,且能被访问,就会造成源码泄露。

常见备份文件后缀:

后缀 来源
.bak 手动备份,最常见
.old 旧版本文件
.orig 原始文件备份
.save 编辑器保存的副本
.swp / .swo Vim崩溃或未正常退出留下的交换文件
~ 某些编辑器(如Gedit)的临时文件,如index.php~
.txt / .temp 有时会把配置导出成文本
.zip / .tar.gz 整站打包备份,如www.zipweb.tar.gz

CTF出题方式:

  • 题目只有一句话:“你能找到备份文件吗?”
  • 或者给了网站源码,但删掉了关键文件(比如flag.php),实际服务器上存在flag.php.bak
  • 常见文件名:www.zipbackup.zipweb.rarindex.php.bakconfig.php.swp等。

解题思路:

  1. 用目录扫描工具(如dirsearch、gobuster、ffuf)爆破常见备份文件名和路径。
  2. 手动尝试访问:index.php.bakindex.php~.index.php.swpwww.zip等。
  3. 注意:有些服务器不解析.bak后缀,会直接以文本形式输出源码,这正好让你看到PHP代码。
  4. 如果是压缩包备份,下载下来解压,里面可能有数据库配置、flag文件等。

2.2 版本控制工具泄露

开发者用Git、SVN等管理代码,但部署时忘记删除版本控制目录,导致整个仓库被暴露。

2.2.1 Git泄露

.git目录包含完整的提交历史、分支、对象数据库。即使当前工作目录里没有flag,也可以通过git loggit reset恢复历史版本中的敏感文件。

CTF出题方式:

  • 题目网站存在/.git/可访问,但直接访问/.git/config可能返回403,但其他文件(如/.git/HEAD)可访问。
  • 常见工具:GitHackgit-dumperGit_Extract
  • 出题者可能会删除.git中的某些文件,但保留足够信息让你恢复源码。

解题步骤(以GitHack为例):

1
python GitHack.py http://target/.git/

它会自动下载整个Git仓库,然后你就可以在本地查看代码,寻找flag或数据库密码。

进阶技巧:如果.git不完整,可以尝试用git fsck找回丢失的对象。

2.2.2 SVN泄露

SVN(Subversion)使用.svn目录管理版本。与Git不同,.svn目录下每个子目录都有一个.svn文件夹,里面包含.entrieswc.db,可以还原出文件内容。

CTF出题方式:

  • 存在/.svn/目录,可以通过访问/.svn/entries获取文件列表和内容。
  • 工具:svn-extractorSeay-SVN

注意: SVN 1.7之前使用.svn/entries文本文件存储信息;之后使用SQLite数据库wc.db。解题时要会查看数据库。

2.2.3 HG(Mercurial)泄露

.hg目录,相对少见,但原理类似。工具:hg_dumper

2.3 编辑器临时文件

  • Vim交换文件.filename.swp.filename.swo。Vim非正常退出时留下,里面可能包含未保存的内容或撤销历史。恢复命令:vim -r .filename.swp
  • Emacs自动保存文件#filename#
  • Gedit等filename~

CTF出题方式:

  • 故意留下.index.php.swp,让你恢复出源码。
  • 有时.swp文件可以直接用文本编辑器打开,里面包含明文源码。

2.4 压缩包/整站备份

网站管理员经常把整个网站目录打包成www.zipweb.tar.gzbackup.rar放在网站根目录下,方便迁移。如果忘了删除,任何人都能下载整个站点源码。

CTF出题方式:

  • 直接访问/www.zip/backup.zip,下载解压后找flag。
  • 有时备份文件名带日期,如backup_20240101.zip,需要爆破。
  • 有些题目把压缩包放在子目录,比如/backup/www.zip

解题思路:

  • 先尝试常见文件名:www.zipweb.zipbackup.zipsite.zip1.zip
  • 用字典爆破压缩包文件名(用dirsearch的字典加上zip/rar/tar.gz后缀)。
  • 解压后查找包含“flag”的文件,或从数据库配置中获取密码,进一步渗透。

2.5 敏感文件直接访问

有些文件本身就不该被访问,但由于配置错误,Web服务器把它们当普通文件返回了。

  • /robots.txt:有时管理员会在这里写“Disallow: /flag.txt”或“Disallow: /admin/”,相当于变相告诉你敏感路径。
  • /.htaccess/.htpasswd:Apache配置文件,可能泄露认证信息。
  • /web.config:ASP.NET配置文件,包含连接字符串。
  • /crossdomain.xml/sitemap.xml:有时会列出目录结构。
  • /README.md/CHANGELOG.txt:可能包含版本信息或提示。

CTF出题方式:

  • robots.txt里写着Disallow: /f1a9g.php,访问该文件得到flag。
  • 访问/.git/config得到仓库地址,进一步利用。
  • 直接访问/flag/flag.txt(有时出题人故意把flag放在明面上,但需要你“猜到”)。

2.6 目录浏览

服务器开启了目录浏览(Indexes),当没有默认首页(index.html/index.php)时,会列出目录下所有文件,相当于给了你一个文件管理器。

CTF出题方式:

  • 访问某个目录,直接看到文件列表,其中可能包含flag.txtbackup.zip等。
  • 需要层层点击,找到隐藏目录。

验证方法:

  • URL最后加/,如果返回一个文件列表页面,说明开启了目录浏览。
  • 常见路径:/backup//upload//admin//data/

三、CTF中常见的综合出题套路

3.1 备份文件→源码审计→SQL注入/RCE

题目网站看起来是一个普通的登录框或查询页面,没有明显漏洞。但你发现index.php.bak可以下载,源码中发现了SQL查询语句没有过滤,或者使用了eval()函数,于是构造payload获取flag。

典型题目: “备份是个好习惯”(Bugku)、”Backup”(攻防世界)。

3.2 Git泄露→历史版本还原→flag

网站只有静态页面,但存在/.git/。用GitHack下载仓库后,在git log中发现某个历史版本里包含flag.php,但当前版本被删除了。用git reset --hard <commit>恢复到那个版本,得到flag。

典型题目: “Git泄露”(CTFHub技能树)、”git”(攻防世界)。

3.3 SVN泄露→数据库配置→连接数据库

通过.svn/entries拿到config.php源码,里面包含数据库账号密码。用这些信息远程连接数据库(如果数据库允许远程连接),查询flag表。

3.4 压缩包备份→源码里藏后门或提示

下载www.zip后,发现源码中有一个/admin/后台,密码写在注释里。登录后台,上传shell或直接查看flag。

3.5 多层信息泄露结合

比如:robots.txt提示/backup/目录,访问该目录开启目录浏览,看到www.zip,下载解压后发现.git目录,再用GitHack恢复历史版本,最终找到flag。


四、实战工具推荐

工具 用途
dirsearch 目录扫描,支持自定义字典,可扫描备份文件
gobuster / ffuf 目录爆破,速度快
GitHack 下载.git泄露仓库
git-dumper 更强大的Git泄露利用工具,支持绕过限制
svn-extractor 下载.svn泄露
dvcs-ripper 综合工具,支持Git、SVN、HG、Bazaar
Vim 恢复.swp文件

常用字典:

1
2
3
4
5
6
7
8
9
10
11
index.php.bak
index.php~
.index.php.swp
www.zip
backup.zip
web.zip
site.tar.gz
.htaccess
robots.txt
.git/config
.svn/entries

可以自己整理一份备份文件字典,在CTF中事半功倍。


五、如何防止信息泄露(防御角度)

虽然CTF是攻击视角,但了解防御措施有助于加深理解:

  1. 禁止备份文件放在Web目录下,或使用.htaccess禁止访问*.bak*.swp等。
  2. 部署时删除.git.svn.hg等版本控制目录
  3. 关闭目录浏览(Apache:Options -Indexes;Nginx:autoindex off)。
  4. robots.txt不要泄露真实敏感路径(它只是君子协定,不是安全措施)。
  5. 打包备份文件不要放在网站根目录,并且设置强密码(如果有)。
  6. 定期扫描网站目录,发现异常文件及时清理。

总结

信息泄露和备份文件相关的题目,在CTF Web类中属于基础但重要的部分。它们往往不需要复杂的技术,但考验选手的细心、耐心和知识广度。很多时候,一个不起眼的.bak文件就是解题的突破口。

记住几个关键点:

  • 看到网站,先试robots.txt/.git//.svn//www.zip/index.php.bak
  • 目录扫描时使用包含备份后缀的字典。
  • 拿到源码后,不要只盯着当前文件,要翻历史版本、找注释、找配置文件。
  • 工具要熟练,GitHack、dirsearch是必备。

最后,祝你在CTF中旗开得胜,多挖备份,多拿flag!