【安全漏洞】CVE-2020-26567 DSR-250N 远程拒绝服务漏洞分析
漏洞信息
漏洞編號:CVE-2020-26567
漏洞詳情:在路由器DSR-250N、DSR-500N路由器的固件版本3.17之前的固件中存在一個upgradeStatusReboot.cgi文件,未授權(quán)訪問此文件能造成設(shè)備拒絕服務(wù),不過這個漏洞在3.17B中已修復(fù)。
接下來我將從兩個固件中來分析這個漏洞產(chǎn)生的原因,和其中的漏洞點,并且在分析的過程中,講解一些分析固件中所要關(guān)注的點。
DSR-250N 固件分析
首先我們先獲取來進(jìn)行對DSR-250N固件的分析,我們很簡單的就可以從D-Link Support 那里下載到我們要的固件DSR-250N_Ax_FW3.12_WW。
手動提取固件
拿到固件的第一步,大部分情況下都是用Binwalk來查看固件所帶有的信息。用習(xí)慣了自動提取固件,這回,我們來手動分析固件然后提取我們需要的文件系統(tǒng)。
直接打開固件,我們先從固件文件系統(tǒng)最常見的中squashfs文件系統(tǒng)來入手,
以squashfs文件系統(tǒng)為例,我們首先要確定固件的magic簽名頭,常見的squashfs的頭部特征有這些sqsh、hsqs、qshs、shsq、hsqt、tqsh、sqlz。
這里確定了固件的“hsqs”,發(fā)現(xiàn)了有兩個,那么這個固件有可能是有兩個squashfs類型的文件系統(tǒng)。
我們現(xiàn)在已經(jīng)知道了文件的magic簽名頭,那么我們怎么確定squashfs文件系統(tǒng)的大小。
使用先將 “hsqs”的 magic 簽名頭的偏移地址開始 dump 出一段數(shù)據(jù)(一般 squashfs 文件系統(tǒng)的頭部校驗不會超過100字節(jié))。然后使用 file 命令查看,可以看到 squashfs 文件的大小了。
然后我們將第一部分的squashfs文件從固件中 dump 出來,并且隨后使用 unsquashfs 解開。
成功的解開文件系統(tǒng)中的內(nèi)容,第一部分的固件解出來了,第二部分提取方式一樣,這里就不再做贅述。
固件分析
根據(jù)漏洞詳情,可以直接有效的定位到漏洞點upgradeStatusReboot.cgi,文件位于/www/中,一般來說,cgi文件都是和html的界面放在一起的,因此可以直接去/var/www/查找。
看到文件中的內(nèi)容,很明顯,文件中帶有重啟reboot的命令
漏洞文件找到了,接下來我們要知道是如何觸發(fā)這個文件的,cgi文件的作用往往伴隨著http的服務(wù),我們應(yīng)該往固件中web組件去分析,很快,我就在 /sslvpn/bin/ 中找到了 httpd 組件,這是一個在嵌入式設(shè)備中最常見的web服務(wù)的框架。
并且在文件系統(tǒng)的找到了 sslvpnInit 文件,里面可以看到啟動webserver httpd 的命令,并且這個文件還有一個 httpkeepAlive.sh 的后臺啟動,根據(jù)文件命名,這是一個 httpd 的守護(hù)進(jìn)程文件
接著定位 sslvpnInit 的調(diào)用方式,可以定位到 /etc/platformInit文件中,而 platformInit 卻在系統(tǒng)自啟動文件中被執(zhí)行(/etc/init.d/rcS)
接著在對httpd 的逆向工程中,發(fā)現(xiàn)了httpd在啟動的過程中,需要加載的文件,剛好的那個upgradeStatusReboot.cgi文件就在/var/www/ 文件中,正因為在啟動的時候就需要加載這些文件,并且是不需要授權(quán)就可以訪問,因此可以觸發(fā)這個文件的命令。那為什么在還有一個 scgi-bin 的路徑呢? 這里我們留著放到DSR-500N固件中再分析。
DSR-500 固件分析
DSR-500文件系統(tǒng)的提取方式和DSR-250一樣,這里我們也很快的定位漏洞文件
查找一下這個文件有可能在那些文件中調(diào)用到,這里我們看到kepler.config 和 httpdKeepAlive.sh 文件。同時還看到了thttpd 文件,根據(jù)以往的固件分析,這大概率是DSR-500 設(shè)備的 提供設(shè)備web服務(wù)的組件。
在/etc/ 文件中,根據(jù)thttpd 文件,找到了thttpdInit文件,這個文件應(yīng)該是thttpd的初始文件,文件內(nèi)容主要的內(nèi)容如下,可以看到此文件啟動了thttpd組件,并且根據(jù)上面的kepler.config 和 httpdKeepAlive.sh文件,基本可以確定,可以根據(jù)80端口或者h(yuǎn)ttps設(shè)置的端口進(jìn)行未授權(quán)訪問platform.cgi、dbglog.cgi、quickvpn.cgi、upgradeStatus.cgi、upgradeStatusReboot.cgi 這幾個文件。
我在我關(guān)注的一個文件userInit 中,這邊根據(jù)Country 設(shè)置安全等級,但是我并沒有發(fā)現(xiàn)這種設(shè)置有什么效果。
反而是發(fā)現(xiàn)了不同的漏洞觸發(fā)點,結(jié)合上面的設(shè)置,在Russia 的固件,可以通過/scgi-bin/來觸發(fā)漏洞,而其他地區(qū)的固件則是通過 /cgi-bin/ 來觸發(fā)。
漏洞復(fù)現(xiàn)
總結(jié)
這里講述了如果不使用binwalk 的情況下,如何手動的從固件中提取文件系統(tǒng),并且對漏洞進(jìn)行分析。
而且根據(jù)搜索引擎的搜索,SCGI是什么?其實這些都是為了更好的取代CGI的功能,SCGI全稱Simple Common Gateway Interface。顧名思義,這個就是簡單咯。scgi也是客戶端/服務(wù)器端形式,客戶端發(fā)送請求,處理,服務(wù)器端響應(yīng)請求。簡而言之,SCGI定義了發(fā)送或者響應(yīng)報文形式的協(xié)議。
福利!!!
分享我整理的網(wǎng)安學(xué)習(xí)資料call me
【免費獲取資料】
總結(jié)
以上是生活随笔為你收集整理的【安全漏洞】CVE-2020-26567 DSR-250N 远程拒绝服务漏洞分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 带你刷burpsuite官方网络安全学院
- 下一篇: 【网络安全】反序列化漏洞底层扩展与制作W