[ACTF2020 新生赛]BackupFile学习笔记

正文

一、.bak备份文件泄露

访问题目主页,页面只显示一句话:

复制代码
Try to find out source file!

这提示我们要去找源代码文件。常见的备份文件名后缀有:

后缀 示例 说明
.bak index.php.bak 最常见的备份文件
~ index.php~ vim 编辑器的临时文件
.swp index.php.swp vim 交换文件
.swo index.php.swo vim 交换文件
.save index.php.save 保存的备份
.old index.php.old 旧版本备份

直接尝试最常见的备份文件名 index.php.bak:

bash 复制代码
curl "http://目标地址/index.php.bak"

成功下载到源码,内容如下:

php 复制代码
<?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!";
}

这段代码的逻辑是:

    1. 检查 $_GET['key'] 是否存在
    1. 用 is_numeric() 检查 $key 是否为数字------如果不是,输出 "Just num!" 并退出
    1. 用 intval($key) 把 $key 转为整数
    1. 用 ==(松散比较 )判断 $key 是否等于 $str
    1. 如果相等,输出 $flag

关键在 == 与 === 的区别。

二、PHP 中的 ==(松散比较) vs ===(严格比较)

比较方式 说明 示例
== 只比较值,不比较类型,会自动类型转换 123 == "123abc" → true
=== 同时比较值和类型,不会自动转换 123 === "123abc" → false

为什么 123 == "123ffwsfwefwf24r..." 是 true?

当 PHP 用 == 比较一个整数和一个字符串时,PHP 会尝试把字符串转换成整数 ,转换规则是:

从字符串开头取连续的数字字符,直到遇到第一个非数字字符为止

所以 "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3" 转换成整数就是:

"123" → 遇到 f(非数字)→ 停止 → 得到 123

因此 123 == 123 → true ✅

三、构造请求,获取flag

直接给 key 参数传值 123:

bash 复制代码
curl "http://目标地址/?key=123"

返回 Flag。

相关推荐
影寂ldy8 分钟前
C# TCP转串口Modbus网关终极完整版笔记(队列防抖+一问一答+帧解析+双客户端轮询)
笔记·tcp/ip·c#
Orange_sparkle37 分钟前
langgraph快速入门
学习·ai·typescript·deepseek·claude code
蒸鱼Yuzheng9 小时前
设备端性能工件可靠导出:断点续传、哈希、manifest 与失败恢复
android·自动化测试·python·adb·数据完整性
差不多的周周9 小时前
《骨架上下文:基于零镜头骨架的动作识别的骨架侧上下文提示学习》论文核心部分详解
学习
Century_Dragon10 小时前
从挂图到VR:汽修专业的一堂新能源原理课可以怎么上~
学习
美狐美颜sdk10 小时前
直播APP接入美颜SDK后出现卡顿怎么办?从性能瓶颈寻找解决方案
android·人工智能·音视频·美颜sdk·直播美颜sdk
知识分享小能手11 小时前
C++ 学习教程,从入门到精通,C++对象和类 — 详细知识点总结(10)
开发语言·c++·学习
美狐美颜SDK开放平台11 小时前
直播APP开发实战:从摄像头调用到视频美颜sdk集成
android·人工智能·计算机视觉·音视频·直播美颜sdk
New农民工11 小时前
倒立摆训练秘籍:理解训练参数
学习
alexhilton11 小时前
生命周期感知的多模块启动模式
android·kotlin·android jetpack