固件下載
我是到官網(wǎng)的查詢下載的,下載地址:http://support.dlink.com.cn/ProductInfo.aspx?m=DIR-850L
也可以直接到ftp服務(wù)器上下載:ftp://ftp2.dlink.com/PRODUCTS/DIR-850L/REVA/DIR-850L_REVA_FIRMWARE_1.14.B07_WW.ZIP
固件解壓
下載的bin文件利用binwalk進(jìn)行解壓
binwalk -Me DIR850L_FW113WWb01_f4if.bin
起文件系統(tǒng)的路徑為
/_DIR850L_FW113WWb01_f4if.bin.extracted/squashfs-root
其中web服務(wù)放置于htdocs中,我是進(jìn)行白盒跟著早前的分析文章進(jìn)行分析,所以將文件夾打包到本地查看代碼。
漏洞分析
漏洞分析得前提是要會(huì)用ida逆向cgi文件來分析web服務(wù)調(diào)用邏輯。
0x01 getcfg.php 任意文件讀取
查看\htdocs\web\getcfg.php的源代碼??

這個(gè)代碼邏輯特別簡(jiǎn)單了,就是SERVICES參數(shù)的值傳入變量$GETCFG_SVC中,最后拼接到了變量$file中,利用dophp函數(shù)給load出來了,也就是說我們可以控制SERVICES的值,即可以控制file指向的文件,雖然說后面拼接了'.xml.php',不過雖然事小白的我也知道后綴為'.xml.php'有管理員信息的文件~,不過顯然這是一個(gè)else條件觸發(fā)的代碼,所以看一下前面的if條件??

這里需要判斷一個(gè)AUTHORIZED_GROUP的值和CACHE,CACHE的簡(jiǎn)單,不輸入或者不為True就好了,AUTHORIZED_GROUP這個(gè)就要涉及到分析cgi的事了,其中cgibin文件是負(fù)責(zé)解析php的,參考https://www.anquanke.com/post/id/175625來進(jìn)行分析(畢竟一個(gè)IoT小白得先跟著一步一步來)??

通過sess_validate來解析驗(yàn)證AUTHORIZED_GROUP變量值,并通過sprintf處理作為全局變量,之后調(diào)用了sobj_add_string和sobj_add_char,由于在調(diào)用 sobj_add_char 函數(shù)時(shí),會(huì)用換行符來分隔參數(shù),也就是說構(gòu)造 %0aAUTHORIZED_GROUP=1 即AUTHORIZED_GROUP會(huì)當(dāng)作參數(shù)處理,處理后并作為全局變量,所以也就可以用來繞過is_power_user函數(shù)的身份檢驗(yàn),所以payload可以為??
SERVICES=DEVICE.ACCOUNT&[隨便啥都行]=%0aAUTHORIZED_GROUP=1
就可以觸發(fā)相關(guān)邏輯代碼,實(shí)現(xiàn)任意文件讀取。
0x02 fatlady.php 任意文件讀取
由于用戶向hedwig.cgi發(fā)送xml數(shù)據(jù)時(shí),hedwig.xml會(huì)調(diào)用fatlady.php 文件進(jìn)行處理,查看fatlady.php文件代碼,路徑\htdocs\webinc\fatlady.php??

同理,service直接拼接到了變量$target上,之后調(diào)用dophp進(jìn)行l(wèi)oad,導(dǎo)致直接讀取任意以php為后綴的文件,同上,我們可以讀取DEVICE.ACCOUNT.xml.php文件,即利用service進(jìn)行跨目錄讀取,例如構(gòu)造service的值為../../../htdocs/webinc/getcfg/DEVICE.ACCOUNT.xml,這里POST 數(shù)據(jù)包中 xml 數(shù)據(jù)帶上 postxml標(biāo)簽即可,如??
<?xml version "1.0" encoding "utf-8"><postxml><module><service>../../../htdocs/webinc/getcfg/DEVICE.ACCOUNT.xml</service></module></postxml>
發(fā)送xml數(shù)據(jù),將header中的Content-Type設(shè)置為text/xml即可。
未完待續(xù)。。。。。。