1. 极安网首页
  2. 网络安全技术

ThinkAdmin5/6未授权列目录/任意文件读取漏洞

#内容来自ThinkAdmin的GitHub的官方项目,由@Hzllaga提供#

0x1.漏洞简介

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

0x2.影响范围

Thinkadmin ≤ 2020.08.03.01

0x3.漏洞分析复现

app/admin/controller/api/Update.php存在3个function,都是不用登录认证就可以使用的,引用列表如下:

namespace app\admin\controller\api;

use think\admin\Controller;

use think\admin\service\InstallService;

use think\admin\service\ModuleService;

version()可以获取到当前版本:2020.08.03.01,≤这个版本的都有可能存在漏洞

URL:http://think.admin/ThinkAdmin/public/admin.html?s=admin/api.Update/version

列目录

node():

  1. /**
  2. * 读取文件列表
  3. */
  4. public function node()
  5. {
  6.     $this->success('获取文件列表成功!', InstallService::instance()->getList(
  7.         json_decode($this->request->post('rules', '[]', ''), true),
  8.         json_decode($this->request->post('ignore', '[]', ''), true)
  9.     ));
  10. }

直接把POST的rules和ignore参数传给InstallService::instance()->getList(),根据上面的use引用可以知道文件路径在vendor/zoujingli/think-library/src/service/InstallService.php:

  1. /**
  2.  * 获取文件信息列表
  3.  * @param array $rules 文件规则
  4.  * @param array $ignore 忽略规则
  5.  * @param array $data 扫描结果列表
  6.  * @return array
  7.  */
  8. public function getList(array $rules, array $ignore = [], array $data = []): array
  9. {
  10.     // 扫描规则文件
  11.     foreach ($rules as $key => $rule) {
  12.         $name = strtr(trim($rule, '\\/'), '\\', '/');
  13.         $data = array_merge($data, $this->_scanList($this->root . $name));
  14.     }
  15.     // 清除忽略文件
  16.     foreach ($data as $key => $item) foreach ($ignore as $ign) {
  17.         if (stripos($item['name'], $ign) === 0) unset($data[$key]);
  18.     }
  19.     // 返回文件数据
  20.     return ['rules' => $rules, 'ignore' => $ignore, 'list' => $data];
  21. }

本文转载:GitHub,不代表 极安网 立场,转载请注明出处:https://secvery.com/1900.html