萌新赛的web题
<?php$six_number = $_POST['webp'];$a = $_POST['a'];$b = $_POST['b'];$c = $_POST['c'];if (md5($six_number) == 'e10adc3949ba59abbe56e057f20f883e' && md5($a) === md5($b) && $a !== $b) {if($array[++$c]=1){if($array[]=1){echo "nonono";}else{require_once 'flag.php';echo $flag;}}}?>
MD5(123456)=e10adc3949ba59abbe56e057f20f883e ==>webp=123456
md5无法处理数组a[]=1&b[]=2
分析c
if($array[++$c]=1){
if($array[]=1){
echo "nonono";
}
else{
require_once 'flag.php';
echo $flag;
}}
关键是;$array[]=1
此语句正常赋值时,返回结果一定是为 1 的,要想跳出这个判断语句,必须让它赋值出问题。
查阅资料后发现:
作为PHP最重要的数据类型HashTable其key值是有一定的范围的,如果设置的key值过大就会出现溢出的问题,临界点是9223372036854775807这个数字。
c=9223372036854775807
payload
webp=123456&a[]=1&b[]=2&c=9223372036854775806
即可得到密码
