实验吧-你真的会PHP吗

2019-07-05  本文已影响0人  byc_404

实验吧这道题让我成功知道自己真的不会php。。。。。。

开始就卡住了,点开链接出现的是

题目

然后就抓包嘛,结果在response里找到了hint

hint: 6c525af4059b4fe7d8c33a.txt

结果半天不知道怎么访问这个文件,,,最后发现只用url里访问就行了

```

<?php

$info = "";

$req = [];

$flag="xxxxxxxxxx";

ini_set("display_error", false);

error_reporting(0);

if(!isset($_POST['number'])){

  header("hint:6c525af4059b4fe7d8c33a.txt");

  die("have a fun!!");

}

foreach([$_POST] as $global_var) {

    foreach($global_var as $key => $value) {

        $value = trim($value);

        is_string($value) && $req[$key] = addslashes($value);

    }

}

function is_palindrome_number($number) {

    $number = strval($number);

    $i = 0;

    $j = strlen($number) - 1;

    while($i < $j) {

        if($number[$i] !== $number[$j]) {

            return false;

        }

        $i++;

        $j--;

    }

    return true;

}

if(is_numeric($_REQUEST['number'])){

  $info="sorry, you cann't input a number!";

}elseif($req['number']!=strval(intval($req['number']))){

    $info = "number must be equal to it's integer!! "; 

}else{

    $value1 = intval($req["number"]);

    $value2 = intval(strrev($req["number"])); 

    if($value1!=$value2){

          $info="no, this is not a palindrome number!";

    }else{

          if(is_palindrome_number($req["number"])){

              $info = "nice! {$value1} is a palindrome number!";

          }else{

            $info=$flag;

          }

    }

}

```

源码可以自己去看,总结下来几个条件比较清晰:

 条件一: 提交的number不能是数字

条件二: 输入的数和他整数的返回值相等

条件三: 需要value1和value2相等,value2是反序的value1,所以就是要求是回文数

条件四:用is_palindrome_number()这个函数检测 number,需要number不是回文数

(此处涉及到intval()化整函数与strrev()反序函数,很有意思)

代码审计题总是给出这种看似自相矛盾的条件,实际上还是得从函数的漏洞入手。

第一,二个条件,可以用到%00放在payload中,number就不是数字

第三四个条件则有不同思路,比如说运用到0:

intval()返回的0.00还是0

0的反序也是0

用上科学记数法与小数点可以混过回文的判断

因此payload:  number=0.00%00  或者是 0e00%00.


post方法提交得flag即可

最后仍有一点疑问:之前在网上找到的wp大都用了另一种方法:构造出number=2147483647%00,因为抓包时发现服务器是32位的, 32 位系统最大带符号的 integer 范围是 -2147483648 到 2147483647。因此intval()返回的整数最大为2147483647,恰好其逆序比自己大,因此逆序取整还是2147483647,妙啊。

但,这个方法现在不行了。。。

难道是换服务器了?那就不得而知了。。。

上一篇下一篇

猜你喜欢

热点阅读