该题目涉及md5()绕过的知识点-弱比较
打开网页看见内容:
英语不好,所以用翻译来翻译了一下,说按f12,于是直接ctrl+u调出源代码观察:
代码审计
审计代码isset()
是一个函数,用于检查变量是否已设置并且不为null。
代码的意思是有两个$_GET为id和gg,如果id和gg的md5加密值相同,且明文不同,那么可以绕过第一层,因为md5函数不能处理数组,处理数组会报错,就会返回null,然后经过md5就相等了,传入的参数不同,gg和id的值就不同了。
测试代码
<?php
if(md5([12354])===md5([8520])){
echo "相等";
}else{
echo "不相等";
}
?> 返回的结果为相同,所以可以构造playload为gg[]=1234&id[]=4321
成功绕过了第一层--?id[]=123&gg[]=321
于是开始绕过第二层,第二层的传参方式为POST
is_numeric()
是一个函数,用于检查给定的变量是否为数字或数字字符串。
这个函数接受一个参数,并返回一个布尔值。如果参数是数字或数字字符串,则返回 true
;否则,返回 false
。
以下是一些使用 is_numeric()
的示例:
php复制代码
$a = 5; | |
$b = "10"; | |
$c = "Hello"; | |
// 检查一个变量是否为数字或数字字符串 | |
|
这是个弱类型比较,弱类型比较时,还需要等于1234567,php的弱类型比较 1234567a==1234567这两个肯定返回true
于是我们构造payload:get方式提交gg[]=1234&id=4321,post传参passwd=1234567b
解题成功!!!