作者:The_Itach1@知道創宇404實驗室
日期:2022年10月25日
漏洞簡介
TOTOLINK NR1800X最近報了一些cve,現主要對其命令注入進行具體分析,以及對其登錄繞過進行分析。
固件下載地址:https://www.totolink.net/home/menu/detail/menu_listtpl/download/id/225/ids/36.html
環境搭建
固件提取
binwalk提取固件
binwalk -Me TOTOLINK_C834FR-1C_NR1800X_IP04469_MT7621A_SPI_16M256M_V9.1.0u.6279_B20210910_ALL.web

查看文件相關信息,mips架構,小端序,使用mipsel來進行模擬。
readelf -h ./bin/busybox

固件模擬
有兩種模擬方式,user模式和system模式,感覺根據后面的模擬結果來看,好像差別不是很大。
user模式模擬
嘗試用qemu模擬
cp $(which qemu-mipsel-static) .
sudo chroot . ./qemu-mipsel-static ./usr/sbin/lighttpd
會報錯,顯示No configuration available. Try using -f option.,這個報錯是需要-f指定已有的配置文件。
運行sudo chroot . ./qemu-mipsel-static ./usr/sbin/lighttpd -f ./lighttp/lighttpd.conf即可,接著又會報錯,說缺少一個文件,創建在對應目錄創建一個即可。
cd ./var
mkdir run
cd run
touch touch lighttpd.pid
然后運行,可以看到服務啟動成功。

但是這個路由器登錄是需要密碼的,并且由于是模擬的關系,大部分功能無法正常使用,登錄不進去,但是還好經過搜索,發現看雪上有一篇文章講述了如何進行繞過登錄,登錄過后,能觀察到里面的一些設置,通過bp抓包能分析出一些有效的請求頭內容,其數據傳輸通過json實現。


system模擬
user模擬中創建的文件都要有,后面會一起傳到quem模擬的虛擬機中。
下載qemu啟動虛擬機所需要的“鏡像”,這是小端序,所以去下載mipsel的鏡像。
wget https://people.debian.org/~aurel32/qemu/mipsel/debian_wheezy_mipsel_standard.qcow2
wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-3.2.0-4-4kc-malta
創建虛擬網橋,實現虛擬機內部和Ubuntu的連接,并且啟動虛擬機,創建一個shell文件。
#set network
sudo brctl addbr virbr0
sudo ifconfig virbr0 192.168.5.1/24 up
sudo tunctl -t tap0
sudo ifconfig tap0 192.168.5.11/24 up
sudo brctl addif virbr0 tap0
qemu-system-mipsel -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_wheezy_mipsel_standard.qcow2 -append "root=/dev/sda1" -netdev tap,id=tapnet,ifname=tap0,script=no -device rtl8139,netdev=tapnet -nographic
然后sudo ./test.sh執行。

最后會讓登陸和輸入密碼,都寫root就行,然后就能成功進入qemu虛擬機。

在啟動的虛擬機里面添加一個IP,是在上面圖片中的qemu虛擬機中執行命令。
ifconfig eth0 192.168.5.12 up
然后則是將提取出的固件的文件系統上傳到qemu虛擬機中,在Ubuntu主機中執行命令。
scp -r squashfs-root/ root@192.168.5.12:/root/

然后到qemu虛擬機中進行掛載和啟動。
chroot ./squashfs-root/ /bin/sh
./usr/sbin/lighttpd -f ./lighttp/lighttpd.conf
成功啟動

界面這些和user模式都是差不多一樣的。
漏洞分析
報了很多個漏洞,大部分是堆棧溢出,然后一些是命令注入,這里主要分析命令注入的相關漏洞。
登錄驗證繞過
這兩個命令執行都是是需要登錄驗證的,這里先來分析如何進行登錄驗證繞過。
無論輸入什么密碼,都會返回錯誤,錯誤碼為302。
先隨便輸入一個密碼,看看發的包,可以看到主要的包有兩個,先看第一個包。

可以看到處理http post請求的是cstecgi.cgi,傳入了username和password,對應action是login,我們到相關位置去查看對應的代碼。

可以看到,這里主要就是用sprinf初始一段語句,我們需要注意的是其中的topicurl,這個后面跟的就是對應接口的字符串,所以我們要去尋找loginAuth對應的處理函數。
這里再說一下,cstecgi.cgi處理不同的函數接口就是通過topicurl的值實現的,也就是后面goto LABEL_16的代碼部分。

所以這些函數名稱和函數地址也是那種常見的結構體的形式,我們要尋找loginAuth對應的處理函數,找到字符串的交叉引用,然后在周圍找找,d鍵一下,就能找到對應的處理函數,函數地址在sub_42AEEC,下面來具體分析這個函數。
前面還是會獲取一些參數的值,比如username還有password這些,然后還對password進行了urldecode。

然后中間會有段比較password和http_passwd的代碼,其會修改v18的值。
v17 = strcmp(v6, v30); // username http_username
if ( !strcmp(v35, v32) ) // passwd http_passwd
v18 = v17 != 0;
else
v18 = 1;
這里不知道是否是因為模擬環境的原因,無論使用什么密碼都無法正常登陸,但是這里的v18,需要注意下,這是第二個包的參數之一,而且這個值在最后會為0。

這段代碼會snprintf一個重定向一個url,然后進行訪問,其流程由flag參數的值決定,我們隨便輸入密碼,就會進入第3個redirectURL,需要注意其authCode參數,授權碼,也就是之前v18的值,現在它的值為0。
接下來我們看第二個包,可以看到和我們前面分析的一樣,get訪問了這個url。

這個http get請求的處理在web服務進程lighttpd中,也就是我們quem啟動的那個進程,我們通過authCode字符串,能交叉引用到其對應的函數為Form_Login。
開始分析Form_Login,開始還是先獲取參數的值,然后根據goURL參數是否為空,來判斷是否進入if里面。

接著向下看。

所以這里,我們可以了解到goURL就是接下來要訪問的html文件,authCode則是驗證是否正確登錄的一個值,并且經過后面的測試訪問home.html就可以進入到后臺界面。 所以我們可以構造下面的url,來繞過登錄,進入后臺,并且可以獲取到cookie的SESSION_ID。
http://xxx.xxx.xxx.xxx/formLoginAuth.htm?authCode=1&userName=admin&goURL=home.html&action=login
http://xxx.xxx.xxx.xxx/formLoginAuth.htm?authCode=1&userName=admin&goURL=&action=login
goURL可有可無,因為goURL無值時,自動會strcpy “home.html”,效果如下。

OpModeCfg 命令注入
第一個是 /cgi-bin/cstecgi.cgi 中的 OpModeCfg 函數的命令注入漏洞,其漏洞原因是傳入的hostName參數,可執行到doSystem函數,通過簡單的構造即可導致命令執行。
但是想要執行到doSystem函數,需要繞過一些判斷語句,proto不能為0,3,4,6,hostName不能為空。

UploadFirmwareFile 命令注入
第二個是 /cgi-bin/cstecgi.cgi 的 UploadFirmwareFile 函數,其參數FileName參數可控,并且將作為doSystem的參數被執行。
這個命令注入不需要繞過什么東西,代碼位置比較靠前。

攻擊測試
先嘗試bp發一下包,可以看到攻擊成功,并且帶有回顯

編寫個poc進行攻擊,先進行登錄繞過獲取cookie,然后進行攻擊,攻擊效果如下

對于另一個命令注入攻擊方式也差不多,只是沒有回顯,簡單修改下poc,在tmp目錄創建一個hack文件,攻擊效果如下

參考
TOTOLINK NR1800X系列cve:https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=TOTOLINK%20NR1800X
環境搭建usr模式和system模式,并繞過登錄檢測:https://bbs.pediy.com/thread-271765.htm#msg_header_h2_1
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1995/
暫無評論