2022DASCTF X SU 三月春季挑战赛 WEB_WP

220 阅读1分钟

1.ezpop

代码审计,很明显就是分析poc链 ``<?php

class crow
{
    public $v1;
    public $v2;

    function eval({
        echo new $this->v1($this->v2);
    }

    public function __invoke()
    {
        $this->v1->world();
    }
}

class fin
{
    public $f1;

    public function __destruct()
    {
        echo $this->f1 . '114514';
    }

    public function run()
    {
        ($this->f1)();
    }

    public function __call($a$b)
    {
        echo $this->f1->get_flag();
    }

}

class what
{
    public $a;

    public function __toString()
    {
        $this->a->run();
        return 'hello';
    }
}
class mix
{
    public $m1;

    public function run()
    {
        ($this->m1)();
    }

    public function get_flag()
    {
        eval('#' . $this->m1);
    }

}

if (isset($_POST['cmd'])) {
    unserialize($_POST['cmd']);
} else {
    highlight_file(__FILE__);
}

最终的恶意代码执行需要靠mix类中get_flag()函数中的eval()函数执行,逆向分析可以得到poc反应链:

fin: __destruct()自动调用

what: __toString()

mix: run()

crow: __invoke()

fin:__call()

mix:get_flag()

mix:$m1注入恶意查询代码,同时应该绕过#的注释 考虑使用标签闭合绕过

image.png

获取了cmd参数的value,使用hackbar进行post传参,得到以下页面

image.png 障眼法,看下源码试试,果然找到了flag

image.png