[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。

相关推荐
点心的游戏开发世界1 小时前
GDScript 入门笔记(十一):Lambda 与匿名函数
开发语言·笔记·游戏引擎·godot
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 32
spring boot·笔记·后端
91刘仁德2 小时前
MYSQL 事务原理及使用
android·mysql·adb
sunshine22 girl3 小时前
Java学习一 环境配置2 安装和基本使用Idea
java·学习·intellij-idea
鱼子星_3 小时前
【C++】继承和多态(上)
c++·笔记
Kobebryant-Manba4 小时前
学习Bert微调
人工智能·学习·bert
xian_wwq4 小时前
【学习笔记】深度认知系列-第14讲 端侧AI崛起——为什么AI正在从云端走向本地
人工智能·笔记·学习
一笑的小酒馆4 小时前
AndroidKMP之瀑布流实现
android
RainyJiang4 小时前
AI时代下,Android的边界正在消失
android·openai·ai编程
我爱cope4 小时前
【计算机网络 | 传输层3:TCP 协议概述:面向连接、可靠传输到底意味着什么?】
网络·网络协议·学习·tcp/ip·计算机网络·传输层