扫到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