[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 == 123true

三、构造请求,获取flag

直接给 key 参数传值 123

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

返回 Flag。

相关推荐
2601_963870171 小时前
【计算机毕业设计】基于Spring Boot的社区老年大学课程报名与学习系统的设计与实现
java·spring boot·学习
ITmaster07312 小时前
告别 IDE?Android CLI 来了,开发进入 AI Agent 时代
android·ide·人工智能
xian_wwq2 小时前
【学习笔记】解剖 Claude Code —— Anthropic 的 Harness 参考实现-09/15
人工智能·笔记·学习
其实防守也摸鱼2 小时前
Kimi K3深度测评:长文本之外的真实力
运维·开发语言·网络·人工智能·python·学习·安全
晓梦林3 小时前
Tools靶场学习笔记
笔记·学习
aaajj3 小时前
【Android】获取设备音频
android
xian_wwq3 小时前
【学习笔记】什么是Harness Engineering- 01/15
人工智能·笔记·学习
笨笨饿3 小时前
#102_Codex无在VSCold无法打开
java·c语言·数据库·笔记
xian_wwq4 小时前
【学习笔记】Agent 安全护栏 —— 当 Agent DROP TABLE 了你的生产数据库-07/15
笔记·学习·安全