Bludit cms 后台RCE漏洞
漏洞分析
第一次听说这个cms,也是atao师傅告诉我的,源码地址-https://bludit.com/
新奇的地方在于不依赖数据库,数据以json形式储存在文件里,我一开始的思路就是去找他的文件写入的点。
入口文件如下。
$url
在 init.php
中定义
此文件只有声明常量,包含php类文件。
在edit-category/general路由 中,可以修改数据,然后写入文件中,对应的文件处理如下。
直接将$_POST整个数组传入,感觉有可以利用的点,一系列的处理如下。
这里会将一些参数做一个strip_tags
的处理,但写到newKey
里。
他确实写进去了,但发现在save方法的时候,拼接了第一行defined('BLUDIT')or die('xxx');
,妈的。
这几乎在每一个文件中都存在,除过入口文件。而且此常量,也只在入口文件中声明,这就导致我们即使可以通过一些拼接手段注入代码,在没有文件包含的情况下也没有办法利用的,不过我没找见。
无能为力只能写个存储xss了。
后台提供了安装插件的方法。
不过插件都是在本地的bl-plugins文件夹里,然后通过activate将其加载进来。
此处的 $plugins['all']
是 admin.php 文件中包含了 这个文件
然后此文件中实例化了所有的插件类,将其存入数组中。
在site.php 中有如下调用
这里会遍历存在该type的插件,并调用其beforeall方法。
但其实只会调用已经activate的插件的beforeall方法,所以我们需要先在后台把对应插件下载下来。
在插件中找到一个可以利用的。
跟进downloadfiles方法。
跟进TCP::download,
就是从url获取内容,然后写入目的文件中,最后解压到目的文件所在的目录。
也就是 图片中的 romote-content 目录中,那么我们就可以构造一个压缩包在vps上,然后修改source值就可以写入木马文件了
这个漏洞感觉跟 极致cms后台的一个漏洞很相似。修改source为我们的恶意服务器,并上传带有木马的压缩包。
save之后 trywebhook
这里的try webhook就是把webhook写入配置文件中,然后访问对应webhook的路由,就会去执行该插件的beforeall方法,从而导致我们的恶意文件被下载解压。
成功getshell