Bootstrap

BUU16 [ACTF2020 新生赛]BackupFile1

扫到index.php.bak 

实在扫不出来可以试试一些常有的文件,比如flag.php(flag.php.bak),index.php(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!";
}

其中一些知识点:
1.is_numeric($key):用于检测变量是否为数字或数字字符串 

2.intval($key):将变量 $key 转换为整数类型

3.php中 == 和 === 的区别:

在本题中,若想绕过弱类型判断$key==123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3:

可以让$key=123,此时123==123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3

弱类型比较规则

在使用 == 进行比较时,PHP 会尝试将两边的值转换为合适的类型后再进行比较。当比较一个整数和一个字符串时,PHP 会尝试将字符串转换为整数,转换规则如下:

  • 从字符串的开头开始解析数字字符,直到遇到第一个非数字字符为止。
  • 如果字符串开头没有数字字符,则将其转换为整数 0

右边的值 "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3" 是一个字符串,PHP 在进行比较时,会将这个字符串转换为整数。根据上述转换规则,从字符串开头开始解析数字,遇到第一个非数字字符 f 时停止,因此该字符串被转换为整数 123

输入/?key=123,拿到flag 

;