thinkAdmin框架0day

admin 2024年1月15日15:39:11评论63 views字数 1699阅读5分39秒阅读模式
thinkAdmin框架0day

01

项目介绍   

ThinkAdmin 是一款遵循 MIT 协议开源的快速开发框架,基于最新版本 ThinkPHP6 的极简后台管理系统 ( 已兼容 ThinkPHP8 )
官网:https://thinkadmin.top/

审计版本:ThinkAdmin Version v6.1.53

thinkAdmin框架0day

经过检索,公众号、百度都没有相关漏洞信息,本篇公众号为首发

thinkAdmin框架0day

02

检索语句   

fofa : body="/admin/api.plugs/script"

thinkAdmin框架0day
thinkAdmin框架0day

03

漏洞一:目录穿越+文件上传

漏洞一:目录穿越+文件上传=getshell
漏洞所在位置:/app/admin/controller/api/Upload.php
188-251行 file函数

thinkAdmin框架0day
thinkAdmin框架0day

196行 限制../无法存在 但是可以通过.../绕过
200行 对比key参数与文件的后缀是否一致

204行 对比数据库中的允许上传的后缀

212行 可以看到强制限制的php无法上传
其保存文件命名使用的是key参数非filename
综上所述
可以利用目录穿越上传.user.ini或者.htaccess
进行图片马的上传和使用

thinkAdmin框架0day

04

漏洞二 :逻辑缺陷 getshell

漏洞位置 /app/admin/controller/Config.php 80-111行 system函数

thinkAdmin框架0day

102行 设置setFavicon传入参数site_icon
跟随进去到文件位置:

/vendor/zoujingli/think-library/src/service/SystemService.php

340 – 362行 setFavicon函数

thinkAdmin框架0day

344行对传进来的site_icon参数进行正则判断是否含有http https

347行对文件目录进行查询是否已经有文件

351行出现down函数跟进去到文件位置为
/vendor/zoujingli/think-library/src/Storage.php 86-180行 down函数

thinkAdmin框架0day

此函数注释为下载文件到本地

首先实例化一个LocalStorage对象
然后使用name方法构造出filename变量 这个很重要

位置在相同文件下的72-77行

thinkAdmin框架0day

91行又对文件是否已经存在进行判断

96行出现set函数跟随进去看一下 传入的参数为filename和远程拉取site_icon url文件的内容

文件位置

/vendor/zoujingli/think-library/src/storage/LocalStorage.php

60-71行

thinkAdmin框架0day

此处可以看到其使用传入进来的filename变量和site_icon参数url文件内容写入文件 至此漏洞发生

thinkAdmin框架0day

05

漏洞一复现

在官网进行composer 安装
安装后登录进入后台
首先对后台设置可上传后缀

thinkAdmin框架0day

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

thinkAdmin框架0day

先上传一个任意文件内容为webshell的木马

thinkAdmin框架0day
thinkAdmin框架0day

构造payload上传
http://localhost/admin/api.upload/file

thinkAdmin框架0day
thinkAdmin框架0day
thinkAdmin框架0day

可以看到都上传成功了

thinkAdmin框架0day

Webshell也成功解析

thinkAdmin框架0day

06

漏洞二复现

登录后台设置系统参数

thinkAdmin框架0day

此处填写纯静态的可下载的php webshell文件url 

也就是webshell下载路径

点击保存配置

保存完毕需计算一下下载到服务器上的路径

脚本如下

thinkAdmin框架0day
thinkAdmin框架0day

使用如上计算 url变量为设置系统参数的url

拼接路径即可

thinkAdmin框架0day

以上内容为青山ya师傅的代码审计投稿

原文始发于微信公众号(梅苑安全学术):thinkAdmin框架0day

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月15日15:39:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   thinkAdmin框架0dayhttps://cn-sec.com/archives/2212698.html

发表评论

匿名网友 填写信息