[ACTF2020 新生赛]BackupFile这题,虽然不是什么难题,但是有个有意思的知识点,在获取到他的源代码之后,我们可以看到

<?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!";
}

可以看到这里传入一个参数key,先进行一个是否为数字或数字字符串类型的判断,如果过了,取这个数的整数值,再与str进行判断,这里要用到一个php弱类型的知识点

PHP里面有两种比较符号,==和===,===在进行比较的时候,要求类型和值都相等才为真,也就是全等于,而==在进行比较的时候,如果两者类型不同,则会先把两个字符串转化为同一类型,然后再进行比较,如1xsafa会被转化为1,xsafa会被转化为0,0e54548777等等类似以0e开头的字符串都会被识别为科学计数法的数字,所以无论多少都一样

同理也可以用来绕过is_number

这题最后在被比较的时候key已经被处理成数字了,而==又会使str被转化为123,所以只要传入key=123就行

标签: none

评论已关闭