漏洞描述:
D-Link DSL-2888A AU_2.31_V1.1.47ae55之前版本存在安全漏洞,該漏洞源於包含一個execute cmd.cgi特性(不能通過web用戶界面訪問),該特性允許經過身份驗證的用戶執行操作系統命令。
在該版本固件中同時存在着一個不安全認證漏洞(CVE-2020-24580),在登錄界面輸入任意密碼就可以成功訪問路由器界面。
通過組合這兩個漏洞可以實現未授權的任意代碼執行
漏洞編號: CVE-2020-24581、CVE-2020-24579
fofa指紋: body=”DSL-2888A” && server==”uhttpd”
影響版本: AU_2.31_V1.1.47ae55之前版本
固件下載:https://www.dlink.com.sg/dsl-2888a/
漏洞分析:
首先我們需要binwalk將固件解開
binwalk -Me DSL-2888A_AU_2.12_V1.1.47Z1-Image-all.bin
這里我要吐槽一下,因為我的虛擬機環境是ubuntu 21.10 這binwalk我總是提取不出來root目錄,在耗費了一天的時間之后,才發現devttys0的binwalk在py3好像是有問題的,所以我們需要下載liyansong2018的binwalk
下載過程
cd ../../ git clone https://github.com/liyansong2018/binwalk.git cd binwalk sudo ./deps.sh sudo python3 setup.py install sudo pip3 install python3-magic
提取之后
因為這個漏洞是需要web服務的,所以我們需要了解一下固件中組件的位置,我們可以去查看開機啟動腳本/ect/rc.d/rcS文件查看
所以我們通過在源代碼中查找這個文件進行代碼審計
通過shift+f12根據./cgi-bin發現了該字符串在函數sub_BEA0有所調用
於是乎進行代碼審計
首先是獲取要訪問的文件路徑,然后將cgi-bin拼接到文件路徑之后
這里就是給參數拼接環境變量,然后后面的post看出可能是需要設備登錄權限
這里主要是用來執行文件的函數
經過這里的判斷可以看出,如果設備登錄,就可以任意執行文件
然后再去查看httpd是如何調用到cgi-bin的,繼續搜索字符串在別的函數的調用
我們可以看到在函數sub_9C4C加載了/cgi-bin路徑並且運行了sub_BEA0這個函數
而這個函數在sub_9F24中被調用,是為了加載/cgi-bin /goform等各種組件
然后我們去查看execute_cmd.cgi這個文件在cgi-bin文件里面
#!/bin/sh . /usr/syscfg/api_log.sh cmd=`echo ${QUERY_STRING} | cut -d = -f 3` #取出cmd=后面的內容 cmd=`echo ${cmd} |tr "%20" " "` #將%02轉化成空格 result=`${cmd}` #運行命令 TGP_Log ${TGP_LOG_WARNING} "cmd=${cmd}, result=${result}" echo "Content-type: text/html" echo "" echo -n ${result}
可以看到他獲取了QUERY_STRING這個參數的值,然后去運行,並沒有對參數進行過濾,甚至不同的參數都是可以的
然后我們去到httpd代碼中尋找QUERY_STRING這個參數
可以看到在這個函數中加載了這參數
我們在ajax.js(/www/js/ajax.js)中也可以看到querystring 字符串
我們可以看到他是將url通過這個js文件拼接號之后送到dhttpd中進行處理
############################################################################
所以這個漏洞利用就是,我們通過登錄設備后,去訪問execute_cmd.cgi這個文件然后通過timostamp參數&后+cmd命令進行任意代碼執行,甚至說不需要這些參數即可任意代碼執行
#############################################################################
因為我的firmae一直沒download.sh好,所以我就跟作者一樣通過fofa去搜索了該設備進行復現
可以看到在我們錯誤輸入密碼之后,拼接了wifi.shtml成功訪問到了改文件
所以我們同樣能通過訪問cgi-bin/execute_cmd.cgi文件跟cmd命令去實現任意代碼執行
復現感覺:
第一次復現iot漏洞后,我通過根據師傅的文章進行復現,面對如此廣的的各種配置文件和各種函數,感覺到了漏洞挖掘過程中,需要不斷的積累經驗和代碼審計能力的提高,革命尚未成功,同志們仍需努力,沖!
感謝師傅在網上的文章,能幫助我去復現漏洞,非常感謝
CVE-2020-24581 D-Link DSL-2888A 遠程命令執行漏洞分析 - 安全客,安全資訊平台 (anquanke.com)