闲着无聊刷一下三个菜鸡。

0x01 Bit-flipping Attack

AES-128加密,CBC方式,直接注册个cdmin,然后翻转密文的第一个字节,跑一下拿到了admin的cookie。

0x02 Bypass WAF

$uri = explode("?",$_SERVER['REQUEST_URI']);
if(isset($uri[1])) {
    $parameter = explode("&",$uri[1]);
    # $parameter = ['a=1','b=2','c=3']
    foreach ($parameter as $k => $v) {
        $v1 = explode("=",$v);
        if (isset($v1[1])) {
            $_REQUEST[$v1[0]] = stripStr($v1[1]);
        }
    }
}

参数解析有问题,用多个问号分割参数,会导致$_GET取到的值和$_REQUEST获取到的值不一样。
POC:user.php?id=1&id=4%20and?=2&id=3
payload:user.php?id=1&id=-1/**/union/**/select/**/1,2,3,(select/**/content/**/from/**/memo),5?=2&id=3

0x03 Bypass open_basedir

给了webshell地址,提示flag在/目录下,执行phpinfo()看到open_basedir为/var/www/html和/tmp。
用move_upload_file向/tmp中写文件,发现被秒删。
看到disable_functions中没有禁止putenv,考虑上传个so文件用LD_PRELOAD劫持,so文件的内容是利用C语言的库函数列目录和读取flag内容。
因为会秒删,所以执行完move_upload_file之后要马上执行putenv和mail函数。
执行没有回显,所以把列出的目录写到/tmp/lightless.txt中,然后马上执行source_file('/tmp/lightless.txt'),成功拿到flag.