ctf-php-04
代码如上其实通读起来并不难,但是有以下几点需要注意
for ($i = 0; $i < count($value); ++$i) {
echo count($value);
echo $value[$i];
echo chr($value[$i]);
}
重写了一下循环的代码想要判断对于输入的处理然后发现
127.0.0.1/index.php?value=123
这里此时了一下直接受到count($value)=1,$value[$i]=1
127.0.0.1/index.php?value=123&value=aaa
这里此时了一下直接受到count($value)=1,$value[$i]=a
可以推断出来其实就是最后一个的值,但是我们这里的代码是要循环传送多个值。
通过上面这种方式就可以输出所有的value的参数和值
接着来chr的意思是从ascii返回字符
(首先限制了传入的数值,不允许传入在32到127之内的数值,那么利用chr特性,只需要传入所需字符串的ASCii+256,在进行chr()函数后就可以完成所需字符的传递)
为了验证上述的观点,做了下面的demo:
<?php
$b = chr(119);
$a = chr(375);
echo $b;
echo $a;
发现两个输出都是ww这下就知道怎么绕过了
在原有字母的ascii值上加255就好最终拼成w3lc0me_To_ansec,就可以绕过
下面的代码有三个(已经满足一个)条件:
intval($password) < 2333 && intval($password + 1) > 2333)
怎么绕过上面的的???看下面的代码,懂得都懂
var_dump(intval('0x2')) //int(0)字符串形式输入
var_dump(intval('0xa'+1)) //int(11)数值形式输入
var_dump(intval('2e2')) //int(2)字符串形式输入
var_dump(intval('2e2'+1)) //int(201)数值形式输入
?password=2e4这里就可以绕过