V1.0.03.21RV340V1.0.03.21RV340RV340V1.0.03.18 2、漏洞分析
固件為格式,與常見的文件貌似有一些些區(qū)別?直接使用一路解壓,當(dāng)?shù)玫?/span>時(shí)繼續(xù)解壓,最終結(jié)果如下:
使用binwalk對(duì)文件openwrt-comcerto2000-hgw-rootfs-ubi_nand.img文件進(jìn)行分析,最終可得到文件系統(tǒng)中的全部內(nèi)容:
可知目標(biāo)平臺(tái)為:ARM 32位小端。
JSON-RPCset_snmpUSMUserPrivKeyRPCrootfs/www/cgi-bin/jsonrpc.cgiIDAjsonrpc.cgi,RPCsub_149FCsub_149FCRPC
關(guān)鍵點(diǎn)位于,這里剛好與指令的前個(gè)字節(jié)匹配:
sub_12DB4“sessionid”sub_13E2C
可知此處調(diào)用了導(dǎo)出函數(shù)jsonrpc_set_config處理set_snmp請求,于是在rootfs根目錄使用grep -r “jsonrpc_set_config” ./ 來定位導(dǎo)出此函數(shù)的so文件:
jsonrpc.cgi jsonrpc_set_configlibjsess.so使用打開定位到導(dǎo)出函數(shù),發(fā)現(xiàn)函數(shù)被動(dòng)態(tài)調(diào)用,而我們又無法動(dòng)態(tài)調(diào)試此文件,因此無法獲取到函數(shù)的真實(shí)地址。
“USMUserPrivKey” setpre_snmpset_snmp
3、漏洞復(fù)現(xiàn)
開啟監(jiān)聽:
重放上一步中抓取到的數(shù)據(jù)包,在字段注入待執(zhí)行的命令:
ncshell 4、補(bǔ)丁對(duì)比
補(bǔ)丁之前的代碼,未校驗(yàn)參數(shù),直接調(diào)用popen執(zhí)行命令:
參考資料:
[2] https://www.zerodayinitiative.com/advisories/ZDI-21-559/