[ACTF2020 新生赛]BackupFile 思路及解法
2026/7/8 7:22:39 网站建设 项目流程

大家好,你们可以叫我凌,是个16岁的网络安全学习者。

今天,我们来完成的靶场是 [ACTF2020 新生赛]BackupFile ,废话不多说我们就直接开始吧!


解题思路

先启动靶场。

进入靶场界面,发现界面上写着 “Try to find out source file!”。

我们先不着急按照界面上面的做,先看看前端代码有没有线索。

依旧是那句话,“Try to find out source file!”。那么我们这个时候尝试用 7kbscan 看看能不能找出突破口。

Try to find out source file!

通过扫描,发现并没有,可能是我们的字典不够全。那我们目前还不着急,先点击 F12 进入开发者模式的网络里面看看有没有线索。

多次点击 F5 进行刷新,依旧没有线索。那我们就暂时回到 “Try to find out source file!” 这句话上,这次放弃 7kbscan 转而使用功能更强的 dirsearch 来进行扫描。

dirsearch -u https://ef59fc8cce22b586fcbbb94b.http-ctf2.dasctf.com/ -e php,html,txt,bak,swp,~,old,zip,tar.gz -x 403,404

参数说明:

-u:目标 URL

-e:指定后缀列表(你刚学的那套常见后缀)

-x:排除指定状态码的结果(不显示 403 和 404,只留下有效的)

成功扫描出来了几个,共有以下几个文件:

[05:00:42] Starting: [05:00:55] 200 - 6KB - /favicon.ico [05:00:55] 200 - 0B - /flag.php [05:00:56] 200 - 2B - /health [05:00:56] 200 - 347B - /index.php.bak [05:00:58] 200 - 9B - /manager/jmxproxy/?get=BEANNAME&att=MYATTRIBUTE&key=MYKEY

首先排除第一个 favicon.ico 文件,因为它只是个图片格式,目前暂时不纳入考虑范围(除非实在没有办法)。接着依次访问其他文件看看。

经过依次访问,发现只有 index.php.bak 文件有线索,它会下载个index.php.bak文件:

<?php include_once "flag.php"; if(isset($_GET['key'])) { $key = $_GET['key']; if(!is_numeric($key)) { exit("Just num!"); } $key = intval($key); $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3"; if($key == $str) { echo $flag; } } else { echo "Try to find out source file!"; }

注意:bak后缀属于Windows备份文件的一种

分析源码可知:程序通过 “key” 参数接收用户输入,随后进行两层判断。

1. 数字校验:is_numeric() 检查输入是否为纯数字。如果不是就直接终止并返回 “Just num!”。
2. 弱类型比较:通过校验后,intval() 将输入转换为整数,再与一个预设字符串 $str 进行 == 比较。

漏洞出在第二步的 PHP 弱类型比较。由于 == 在比较数字和字符串时,会强制将字符串转换为数字。$str 的值 "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3" 以 123 开头,后续是非数字字符,转换为整数时结果正好是 123。

因此只需传入 key=123,即可满足 123 == $str,输出 Flag。

https://ef59fc8cce22b586fcbbb94b.http-ctf2.dasctf.com/?key=123

这样子,flag就成功出来了!

靶场小结

考点标签

信息收集、备份文件泄露、PHP弱类型比较、源码审计

核心教训

1. 备份文件泄露是常见的低级错误:开发时用编辑器留下的 .bak、.swp、~ 等备份文件,如果没有清理就直接上线,攻击者可以直接下载到完整的源代码。
2. 信息收集的通用流程:面对空白页面,先看源码有无提示,然后用 dirsearch 等工具枚举常见备份文件后缀,再从响应中找出异常的那个。
3. PHP 弱类型比较是经典漏洞:== 在比较数字和字符串时,会将字符串强制转换为数字。"123ffwsf..." 转换为整数后变成 123,所以传入 key=123 即可绕过比较。

解题关键步骤

1. 信息收集:首页提示 “Try to find out source file!”,使用 dirsearch 枚举常见备份后缀。
2. 发现备份文件:index.php.bak 返回 200,下载后获得完整源代码。
3. 源码审计:发现 “is_numeric + intval + ==” 的弱类型比较逻辑。
4. 构造 Payload:利用 PHP 弱类型特性,传入 key=123,使 123 == "123ffwsf..." 成立。
5. 拿到 Flag:访问 "https://xxx/index.php?key=123" 直接输出 Flag。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询