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