01
项目介绍
ThinkAdmin 是一款遵循 MIT 协议开源的快速开发框架,基于最新版本 ThinkPHP6 的极简后台管理系统 ( 已兼容 ThinkPHP8 )
官网:https://thinkadmin.top/
审计版本:ThinkAdmin Version v6.1.53
经过检索,公众号、百度都没有相关漏洞信息,本篇公众号为首发
02
检索语句
fofa : body="/admin/api.plugs/script"
03
漏洞一:目录穿越+文件上传
漏洞一:目录穿越+文件上传=getshell
漏洞所在位置:/app/admin/controller/api/Upload.php
188-251行 file函数
196行 限制../无法存在 但是可以通过.../绕过
200行 对比key参数与文件的后缀是否一致
204行 对比数据库中的允许上传的后缀
212行 可以看到强制限制的php无法上传
其保存文件命名使用的是key参数非filename
综上所述
可以利用目录穿越上传.user.ini或者.htaccess
进行图片马的上传和使用
04
漏洞二 :逻辑缺陷 getshell
漏洞位置 /app/admin/controller/Config.php 80-111行 system函数
102行 设置setFavicon传入参数site_icon
跟随进去到文件位置:
/vendor/zoujingli/think-library/src/service/SystemService.php
340 – 362行 setFavicon函数
344行对传进来的site_icon参数进行正则判断是否含有http https
347行对文件目录进行查询是否已经有文件
351行出现down函数跟进去到文件位置为
/vendor/zoujingli/think-library/src/Storage.php 86-180行 down函数
此函数注释为下载文件到本地
首先实例化一个LocalStorage对象
然后使用name方法构造出filename变量 这个很重要
位置在相同文件下的72-77行
91行又对文件是否已经存在进行判断
96行出现set函数跟随进去看一下 传入的参数为filename和远程拉取site_icon url文件的内容
文件位置
/vendor/zoujingli/think-library/src/storage/LocalStorage.php
60-71行
此处可以看到其使用传入进来的filename变量和site_icon参数url文件内容写入文件 至此漏洞发生
05
漏洞一复现
在官网进行composer 安装
安装后登录进入后台
首先对后台设置可上传后缀
http://localhost/admin/config/storage.html?spm=m-1-2-3
param
storage%5Bname_type%5D=xmd5&storage%5Blink_type%5D=none&storage%5Ballow_exts%5D=doc%2Cgif%2Cico%2Cjpg%2Cmp3%2Cmp4%2Cp12%2Cpem%2Cpng%2Czip%2Crar%2Cxls%2Cxlsx%2Chtaccess%2Cini&storage%5Blocal_http_protocol%5D=follow&storage%5Blocal_http_domain%5D=&storage%5Btype%5D=local
先上传一个任意文件内容为webshell的木马
构造payload上传
http://localhost/admin/api.upload/file
可以看到都上传成功了
Webshell也成功解析
06
漏洞二复现
登录后台设置系统参数
此处填写纯静态的可下载的php webshell文件url
也就是webshell下载路径
点击保存配置
保存完毕需计算一下下载到服务器上的路径
脚本如下
使用如上计算 url变量为设置系统参数的url
拼接路径即可
以上内容为青山ya师傅的代码审计投稿
原文始发于微信公众号(梅苑安全学术):thinkAdmin框架0day
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论