IOT入門---------第一個cve復現(CVE-2020-24581 D-Link DSL-2888A 遠程命令執行漏洞分析)


漏洞描述:

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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM