D-Link DSL-2888A AU_2.31_V1.1.47ae55之前的版本存在遠(yuǎn)程命令執(zhí)行漏洞,經(jīng)過(guò)身份驗(yàn)證的用戶可通過(guò)訪問(wèn)/cgi-bin/execute_cmd.cgi觸發(fā)命令執(zhí)行漏洞。
D-Link DSL-2888A AU_2.31_V1.1.47ae55之前的版本
點(diǎn)擊登錄后訪問(wèn)/cgi-bin/execute_cmd.cgi?timestamp=1&cmd=id即可觸發(fā)命令執(zhí)行漏洞
執(zhí)行命令binwal -Me ../IOT_BUG/CVE-2020-24581/DSL-2888A_AU_2.12_V1.1.47Z1-Image-all.bin --run-as=root將固件文件系統(tǒng)提取,提取后的目錄結(jié)構(gòu)如圖所示
執(zhí)行命令
cd jffs2-root
進(jìn)入文件系統(tǒng),文件系統(tǒng)結(jié)構(gòu)如圖所示
該漏洞為web應(yīng)用漏洞,該固件中web組件為dhttpd,執(zhí)行命令find . -name “dhttpd”搜索web組件位置,搜索結(jié)果如圖所示
如圖所示,通過(guò)IDA打開(kāi)dhttpd
該遠(yuǎn)程命令執(zhí)行接口為/cgi-bin/execute_cmd.cgi,如圖所示,在函數(shù)sub_9C4C中,如果訪問(wèn)路徑中存在/cgi-bin,則調(diào)用sub_BEA0函數(shù)進(jìn)行處理
跟進(jìn)sub_BEA0函數(shù),如圖所示,在sub_BEA0函數(shù)的第52行將cgi文件與cgi-bin目錄進(jìn)行拼接,在第53行判斷cgi文件是否存在,在第63行判斷cgi文件是否存在執(zhí)行權(quán)限
跟進(jìn)sub_BEA0函數(shù),如圖所示,在sub_BEA0函數(shù)的第70行將獲取當(dāng)前文件路徑,在71行在file查找”/”最后一次的位置,如果該位置存在,則在第76行進(jìn)入file目錄

跟進(jìn)sub_BEA0函數(shù),如圖所示,在sub_BEA0函數(shù)的105-108行將進(jìn)行cgi文件執(zhí)行環(huán)境變量配置
跟進(jìn)sub_BEA0函數(shù),如圖所示,在sub_BEA0函數(shù)的111-143行將進(jìn)行身份校驗(yàn)
繼續(xù)跟進(jìn)sub_BEA0函數(shù),如圖所示,通過(guò)身份校驗(yàn)后,在第149行調(diào)用sub_BB5C函數(shù)對(duì)cgi文件進(jìn)行處理
跟進(jìn)sub_BB5C函數(shù),在sub_BB5C函數(shù)的第40行調(diào)用execve函數(shù)執(zhí)行cgi文件
查找存在漏洞的execute_cmd.cgi文件,execute_cmd.cgi文件位于文件系統(tǒng)下的www/cgi-bin目錄
查看execute_cmd.cgi文件具體內(nèi)容,execute_cmd.cgi文件具體內(nèi)容如圖所示,execute_cmd.cgi文件內(nèi)容為獲取QUERY_STRING中第二個(gè)參數(shù)的值,并通過(guò)反引號(hào)``以執(zhí)行命令方式執(zhí)行該值
在IDA中搜索QUERY_STRING,搜索結(jié)果如圖所示
在js文件目錄查找QueryString,查找結(jié)果如圖所示
訪問(wèn)存在QueryString字符的ajax.js文件,ajax.js文件內(nèi)容如圖所示
故當(dāng)通過(guò)身份校驗(yàn)時(shí),構(gòu)造uri:/cgi-bin/execute_cmd.cgi?timestamp=1&cmd=cmd可執(zhí)行任意命令,由于該版本路由器在密碼欄輸入任意密碼后即可繞過(guò)身份校驗(yàn),所以不需知道設(shè)備密碼即可觸發(fā)命令執(zhí)行漏洞
