[ACTF2020 新生赛]BackupFile 思路及解法

发布时间:2026/7/8 7:22:48
[ACTF2020 新生赛]BackupFile 思路及解法 大家好你们可以叫我凌是个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/?getBEANNAMEattMYATTRIBUTEkeyMYKEY首先排除第一个 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。因此只需传入 key123即可满足 123 $str输出 Flag。https://ef59fc8cce22b586fcbbb94b.http-ctf2.dasctf.com/?key123这样子flag就成功出来了靶场小结考点标签信息收集、备份文件泄露、PHP弱类型比较、源码审计核心教训1. 备份文件泄露是常见的低级错误开发时用编辑器留下的 .bak、.swp、~ 等备份文件如果没有清理就直接上线攻击者可以直接下载到完整的源代码。2. 信息收集的通用流程面对空白页面先看源码有无提示然后用 dirsearch 等工具枚举常见备份文件后缀再从响应中找出异常的那个。3. PHP 弱类型比较是经典漏洞 在比较数字和字符串时会将字符串强制转换为数字。123ffwsf... 转换为整数后变成 123所以传入 key123 即可绕过比较。解题关键步骤1. 信息收集首页提示 “Try to find out source file!”使用 dirsearch 枚举常见备份后缀。2. 发现备份文件index.php.bak 返回 200下载后获得完整源代码。3. 源码审计发现 “is_numeric intval ” 的弱类型比较逻辑。4. 构造 Payload利用 PHP 弱类型特性传入 key123使 123 123ffwsf... 成立。5. 拿到 Flag访问 https://xxx/index.php?key123 直接输出 Flag。