利用PHP的NAN和INF来获取字符串来自增绕过长度限制

最近在一道题目里面学到了一个新的小技巧 在php中,字符串是可以递增的,如下: 但是不可递减

在这里插入图片描述

这道题是这样的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
error_reporting(0);
if ($_GET['looklook']){
    highlight_file(__FILE__);
}else{
    setcookie("hint", "?looklook", time()+3600);
}
if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (is_string($ctfshow) || strlen($ctfshow) <= 107) {
        if (!preg_match("/[!@#%^&*:'\"|`a-zA-BD-Z~\\\\]|[4-9]/",$ctfshow)){
            eval($ctfshow);
        }else{
            echo("fucccc hacker!!");
        }
    }
} else {

    phpinfo();
}
?>

可以看到,这里长度的限制是107,我们如果拼接一个_GET,如果硬从C开始自增,那可能会超过限制,T理C太远了,所以这里学到了两个新的操作

这篇文章有写到(也是原题)

1
2
$_=C/C ---> NAN
$_=1/C ---> INF

但是这不是string类型,但在php里面,我们可以通过拼接一个字符串来让他转成String类型 比如这里我写如下代码

1
2
3
4
5
6
<?php

$a = (C/C.C);
$b = (1/C.C);
var_dump($a);
var_dump($b);

在这里插入图片描述

成功得到string类型,这里我们就使用索引就可以单选中字母了

在这里插入图片描述

这样做就可以从N开始递增了,避开了长度的限制

Licensed under CC BY-NC-SA 4.0