• 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这里就可以绕过

  • 相关阅读:
    2.2阶乘末尾0的个数,最低位1的位置
    samba服务器使用
    全排列的非递归算法
    2.1二进制数中1的个数
    2.3发帖水王
    C #与##的使用
    NEU1141the unique number
    【转】4习惯让你越休息越累
    二叉树由先序遍历和中序遍历输出后序遍历
    UVA100
  • 原文地址:https://www.cnblogs.com/J0ng/p/13509537.html
Copyright © 2020-2023  润新知