ezphp

<?php
error_reporting(0);
$seed = str_split(uniqid(),10)[1];
extract(getallheaders());
mt_srand($seed);
$flag = str_split(file_get_contents("/flag"));
$result = "";
foreach ($flag as $value){
    $result = $result . chr(ord($value)+mt_rand(1,2));
}
if (isset($answer)){

    if ($answer == substr($result,0,strlen($answer))){
        echo "wow~";
    }else{
        echo "no~";
    }
}else{
    highlight_file(__FILE__);
    echo "no~";
}

源码如上
通过extract进行变量覆盖,我们可以覆盖$seed将它设为一个已知的种子,这样就是伪随机数了,然后通过answer进行爆破即可,但不知道为什么根本传不了值,本地一模一样的源码完全可以穿,反正应该是题目环境设置的有问题

LD

先在前端上传文件,查看页面源代码,似乎没有过滤,然而根本传不上去,在控制台发现要求必须是png,上传的文件路径长度还必须超过100,/'1'100,然后就可以上传了,在数据包里改成'./'100或'../'100或'/proc/self/root/'30+/proc/self/cwd/'都可以,通过报错发现我们的文件的确成功上传了,但是不知道网站的根目录在哪,而且服务器没有/var/www目录,网站根目录下也没有index.php,真的人(⊙_⊙)?傻了,现在想想,可能根本不是php,返回的数据包也没有说是php。通过报错信息还知道网站根目录往上跳一级就是服务器的根目录了。感觉应该是通过上传so文件来进行劫持,而且我们还可以控制环境变量,添加一个LD_PRELOAD设置优先加载我们上传的so文件应该就可以了,但不知道为什么触发不了。

briefphp

比赛的时候没看。

现在看到一篇wp:https://www.cnblogs.com/skyxmao/p/17734229.html
LD的思路应该就是那样,传文件的时候好像也差不多,可惜没环境复现。briefphp又是那个php的filter的妙用。