ctf-php-04

ctf-php-04

1.PNG

代码如上其实通读起来并不难,但是有以下几点需要注意


	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

可以推断出来其实就是最后一个的值,但是我们这里的代码是要循环传送多个值。

http://127.0.0.1/1/1.php/?value[]=a&value[]=bbbbsadsadasd

通过上面这种方式就可以输出所有的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这里就可以绕过

posted @ 2020-08-15 17:29  sasdsaxvcx  阅读(210)  评论(0编辑  收藏  举报