CTFHub 信息泄露通关笔记4:备份文件下载 bak文件
目录
一、bak备份文件
1、手动生成:开发者主动备份
2、自动生成:工具 / 服务器被动备份
二、bak信息泄露
1、本质
2、特性
(1)通用性强:跨工具、跨平台
(2)易猜测性:文件名可预测
(3)危害直接:泄露内容可直接利用
三、渗透实战
1、打开靶场
2、信息搜集
(1)DirSearch工具
(2)Dirmap工具
3、下载index.php.bak
4、获取flag
5、总结
第一步:信息收集与探测
第二步:获取与分析备份文件
第三步:代码审计与利用构造
第四步:获取Flag与总结
本文通过CTFHub的备份文件下载-bak文件关卡的渗透实战,详细介绍了.bak备份文件的信息泄露风险。.bak文件作为常见的备份文件后缀,可能因开发者疏忽残留在Web目录中,导致源代码和敏感信息泄露。文章首先分析了.bak文件的两种生成方式(手动和自动)及其特性(通用性强、易猜测、危害直接)。随后通过CTFHub靶场演示渗透过程:使用DirSearch和Dirmap工具扫描发现index.php.bak文件,下载并分析该备份文件获取flag。最后总结了渗透测试的四个关键步骤:信息收集、获取备份文件、代码审计和利用构造。文章强调了.bak文件泄露的安全风险及防范措施。
一、bak备份文件
.bak
是 “Backup”(备份)的缩写,并非某一工具的专属后缀,而是行业通用的备份文件命名习惯—— 开发者或服务器在修改、删除文件前,会手动或自动生成原文件的副本,并添加 .bak
后缀标识,用于 “误操作后恢复原始内容”。其生成逻辑与本质可分为两类:
1、手动生成:开发者主动备份
这是 .bak
文件最主要的来源。开发者在编辑服务器上的关键文件(如配置文件、代码文件)时,为防止修改出错无法回滚,会手动复制原文件并添加 .bak
后缀。例如:
- 原文件:
config.php
(存储数据库账号密码的配置文件); - 开发者执行命令
cp config.php config.php.bak
(Linux/macOS)或copy config.php config.php.bak
(Windows),生成备份文件; - 开发者修改
config.php
(如更新数据库地址),若修改后出现错误,可通过cp config.php.bak config.php
恢复原始内容; - 若开发者忘记删除
config.php.bak
,该文件会残留于 Web 根目录,成为信息泄露源。
2、自动生成:工具 / 服务器被动备份
部分工具或服务器软件会默认开启 “自动备份” 功能,将 .bak
作为默认后缀,无需开发者手动操作。常见场景包括:
- 文本编辑器自动备份:部分编辑器(如 Notepad++、Sublime Text)可配置 “保存时自动生成.bak 文件”,例如 Notepad++ 开启 “备份” 功能后,编辑
index.php
并保存时,会自动生成index.php.bak
; - 服务器管理工具备份:如宝塔面板、cPanel 等可视化管理工具,在 “文件修改”“网站迁移” 功能中,会自动生成
.bak
备份(如修改nginx.conf
时生成nginx.conf.bak
); - 脚本 / 程序自动备份:开发者编写的自动化脚本(如数据库备份脚本、代码更新脚本),可能将
.bak
作为备份文件的统一后缀(如bash backup.sh
脚本执行时生成data.sql.bak
)。
二、bak信息泄露
1、本质
bak文件信息泄露本质:未被清理的 “原始文件副本”。无论手动还是自动生成,.bak
文件的核心本质是“原始文件的完整副本”:
- 内容完整性:
.bak
文件与原文件完全一致,无加密、无编码(纯文本格式),原文件中的代码、注释、敏感变量(如$dbpass = "123456"
)会原样保留; - 访问可达性:
.bak
后缀不属于 Web 服务器默认解析的脚本后缀(如.php
、.jsp
),会被服务器识别为 “静态文件”,默认允许通过 HTTP 请求直接下载或查看; - 隐蔽性弱:
.bak
后缀无特殊隐藏标识(如 Linux 中.
开头的隐藏文件),但因 “非业务文件名” 易被开发者忽略,导致长期残留。
2、特性
与其他备份文件(如 Vim 的 .swp
、~
后缀文件)相比,.bak
文件的泄露场景更广泛,核心特性可总结为三点:
(1)通用性强:跨工具、跨平台
- 无工具绑定:
.bak
是通用后缀,不依赖特定编辑器或工具(Vim 的.swp
仅 Vim 生成,而.bak
可由任何工具 / 手动操作生成); - 跨操作系统:Linux、Windows、macOS 均支持
.bak
后缀命名,无论是服务器还是本地开发环境,都可能产生.bak
文件; - 跨文件类型:
.bak
可附加在任何文件后缀后,如index.php.bak
(代码文件)、config.ini.bak
(配置文件)、flag.txt.bak
(敏感文本)、data.sql.bak
(数据库备份),覆盖 Web 场景中绝大多数文件类型。
(2)易猜测性:文件名可预测
.bak
文件的命名规则高度固定 ——“原文件名 + .bak”,攻击者无需复杂扫描,仅需基于 “常见业务文件名” 即可快速猜测:
- 针对首页文件:
index.html.bak
、index.php.bak
、index.jsp.bak
; - 针对配置文件:
config.php.bak
、database.ini.bak
、appsettings.json.bak
; - 针对敏感文件:
flag.txt.bak
、backup.sql.bak
、admin_login.php.bak
; - 针对特殊功能文件:
upload.php.bak
(上传功能)、pay.php.bak
(支付逻辑)。
这种 “可预测性” 让 .bak
文件泄露成为 “低技术成本” 的攻击场景 —— 攻击者无需工具,直接拼接 URL 即可尝试访问(如 http://target.com/config.php.bak
)。
(3)危害直接:泄露内容可直接利用
.bak
文件的纯文本特性使其泄露的信息 “无需二次处理”,攻击者下载后可直接获取关键信息:
- 源代码泄露:
index.php.bak
泄露网站业务逻辑,攻击者可从中分析 SQL 注入、文件上传、XSS 等风险的触发点; - 配置信息泄露:
config.php.bak
泄露数据库账号($dbuser
)、密码($dbpass
)、API 密钥($api_key
),可直接用于连接数据库或调用第三方接口; - 敏感数据泄露:
flag.txt.bak
(CTF 场景)直接包含 Flag,user_data.sql.bak
泄露用户账号密码明文 / 哈希; - 后门 / 测试代码泄露:
test.php.bak
可能包含开发者未删除的测试后门(如if($_GET['pass']=='123'){eval($_POST['cmd']);}
)。
三、渗透实战
1、打开靶场
打开关卡如下所示,提示信息为“当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。”,提示本关卡可以利用源码编辑过程中产生的的备份文件进行渗透测试。点击打开题目,此时系统自动创建Docker环境,下图蓝色部分的URL地址就是靶场环境。
打开靶场URL(challenge-3dc6f0a968244b18.sandbox.ctfhub.com:10800),进入了备份文件下载-vim页面,提示"flag in index.php source code.",具体如下所示。
http://challenge-3dc6f0a968244b18.sandbox.ctfhub.com:10800/
2、信息搜集
(1)DirSearch工具
通过目录扫描工具对challenge-3dc6f0a968244b18.sandbox.ctfhub.com:10800进行渗透,这里选择使用dirsearch工具进行渗透,尝试发现隐藏文件或目录,并通过 -i 200
参数设定只输出服务器返回状态码为200(成功)的扫描结果,命令如下所示。
python dirsearch.py -u http://challenge-3dc6f0a968244b18.sandbox.ctfhub.com:10800/ -i 200
-
python dirsearch.py
: 调用Python运行的dirsearch工具。 -
-u <URL>
: 指定要扫描的目标URL。 -
-i 200
: 这是一个过滤器(--filter-code
的缩写),告诉工具在输出结果时只显示那些响应状态码为200(即请求成功)的路径,屏蔽404错误等其他无效信息,使结果更清晰。
dirsearch的扫描结果如下所示,在网站根目录下发现了index.php.bak文件。
(2)Dirmap工具
通过目录扫描工具对challenge-3dc6f0a968244b18.sandbox.ctfhub.com:10800进行渗透,这里选择使用dirmap工具进行渗透,命令如下所示。
python dirmap.py -i http://challenge-3dc6f0a968244b18.sandbox.ctfhub.com:10800/ -lcf
其中-lcf
(--loadConfigFile
):该参数表示加载项目根目录下的 dirmap.conf
配置文件,使用文件中定义的详细扫描规则(如字典模式、递归扫描、请求头设置等)。dirmap的扫描结果如下所示,在网站根目录下发现了index.php.bak文件。
3、下载index.php.bak
在url后面输入/index.php.bak,构造完整的URL地址,具体如下所示。
http://challenge-3dc6f0a968244b18.sandbox.ctfhub.com:10800/index.php.bak
访问如上URL地址后页面提示是否下载index.php.bak文件,点击确认保存文件,如下所示。
4、获取flag
打开index.php.bak文件,即可查看到flag值,如下图所示。
5、总结
总结CTFHub“备份文件下载”系列题型的渗透流程,具体如下所示。
第一步:信息收集与探测
渗透开始于高效的信息收集。我们首要目标是探测目标网站可能存在的备份文件。这些文件通常由 vim 等编辑器自动生成,常见形式包括:.index.php.swp
(交换文件)、index.php~
(备份文件)、index.php.bak
或整站压缩包如 www.zip
。我们使用目录爆破工具(如 dirsearch、dirmap、gobuster)并配合包含这些常见后缀的专用字典,对目标URL进行扫描。同时,手动尝试访问这些常见路径也是一个快速有效的方法。关键在于覆盖全面的文件名和后缀组合,不遗漏任何可能的备份痕迹,为下一步分析奠定基础。
第二步:获取与分析备份文件
一旦扫描器发现或手动尝试确认了备份文件的存在(例如通过HTTP状态码200成功下载了 index.php.bak
),立即下载该文件。如果是 .bak
或 ~
文件,可能直接就是可读的源代码。恢复后,使用文本编辑器或代码编辑器仔细审计源代码,这是发现敏感信息的关键一步。
第三步:代码审计与利用构造
仔细审计恢复得到的源代码,寻找两样东西:一是直接的Flag,可能以明文形式硬编码在配置变量或注释中(如 $flag="ctfhub{...}"
);二是更深层的安全风险,如数据库连接字符串、API密钥、隐藏的管理功能入口,或具体的代码风险(如SQL注入、命令注入、文件包含)。例如,若发现 system($cmd);
且 $cmd
参数可控,则可能存在命令注入。审计的目标是找到利用点,并据此构思如何构造攻击载荷(Payload)来读取文件、执行命令或获取数据库中的Flag。
第四步:获取Flag与总结
-
情况一:Flag在源码中 -> 直接复制提交。
-
情况二:发现数据库凭证 -> 尝试用这些凭证连接数据库(通常题目会开放MySQL端口,用命令行或工具如MySQL Workbench连接),然后在数据库的表中查找Flag。
-
情况三:发现隐藏功能 -> 根据风险类型(如文件包含、命令执行),构造请求URL或表单数据,获取服务器权限或直接读取敏感文件(如
/flag
)来得到Flag。