目錄
-
-
-
- 0x01 漏洞回顧
- 0x02 固件下載下傳及解包
- 0x03 漏洞分析
- 0x04 寫在最後
-
-
0x01 漏洞回顧
漏洞描述:遠端指令執行(Remote Code Execution)。
根據exploit-db顯示,該漏洞是target_addr字段存在指令注入漏洞,漏洞poc傳送門。
漏洞利用條件:需要身份認證。
該漏洞需要身份認證,部分裝置的預設使用者名/密碼為:e8c/e8c。可利用此使用者名密碼成功登入裝置。
漏洞影響:較大。
0x02 固件下載下傳及解包
Netlink Gpon裝置固件可以在官網下載下傳到,傳送門。
下載下傳後,直接通過binwalk解包固件即可。
$ binwalk -Me HG323RW_UPGRADE_NETLINK_1.0.35-200817.tar
固件檔案結構如下圖所示(進檢視三級目錄結構)。
0x03 漏洞分析
- 根據Poc可知,漏洞發生在送出資料給
時候。是以,對固件中的/boaform/admin/formPing
/bin/boa
進行分析。
當然,也可以通過指令
來比對看看哪個可執行檔案比對到,再簡單分析一下,就可以确定要分析的目标程式。grep ‘boaform/admin’ ./* -r
$ sudo grep 'boaform/admin' ./* -r Binary file ./bin/boa matches ...
- 先檢視
檔案格式。可知,該可執行檔案為MIPS架構,大端,32位。boa
- 用IDA打開
檔案。注意,在處理器類型裡邊,選擇好相比對的内容。本次選擇是“MIPS big endian”。boa
- 有了前期對poc的閱讀,我們清楚地知道,本次漏洞是在對
送出非法參數引起。是以,我們可以直接打開字元串子視窗,搜尋boaform/admin/formPing
。formPing
- 輕按兩下,可以在IDA View視窗看到該字元串所在的位置。接着,檢視交叉引用, 跳轉到引用該字元串的函數中。
-
閱讀彙編代碼,可知,擷取參數的步驟大緻如下:
加載“formPing”字元串,從用戶端送出的參數中獲得“target_addr”,儲存在"0xA30+var_9FC"中(
),随後,獲得"waninf"參數,儲存在"0xA30+car_A00"中(sw $v0, 0xA30+var_9FC
sw 0xA30+var_A00($fp)
)。
0xA30+var_9FC —> target_addr;
0xA30+var_A00 —> waninf.
如果
等于0, 則跳轉至waninf
,顯然不會跳轉過去。繼續往下, 如果loc_4D6A4C
不為0,則跳轉至target_addr
處。顯而易見,此處會跳轉分支。loc_4D6BD8
- 此處似乎是對“target_addr"長度做一個儲存。繼續跳轉至
。loc_4D6D1C
- 此處,完成一些提示輸出,繼續跳轉至
。loc_4D6FB8
- 此處進行了一個比較,随後跳轉至
。loc_4D6FD8
- 此處進行一些與使用者輸入無關的操作,生成并儲存一些變量,随後跳轉至
。loc_4D7044
- 此處,先加載寫在固件裡的bash語句:
ping %s -c 4 -l %s -w 5 %s > /tmp/ping.tmp
。
随後依次将參數“target_addr”等壓入棧空間,補全指令語句,最後調用
/bin/sh -c
執行剛剛補全的指令語句。
執行指令大緻如下:
。/bin/sh -c 'ping target_addr -c 4 -l ...'
- 至此分析完畢。
0x04 寫在最後
可分析可知,該漏洞形成的原因是:沒有對使用者輸入的字元串進行過濾,接收到參數後,直接儲存在記憶體中,最後在補全指令語句的過程中,直接從記憶體加載參數。
使用者隻需構造簡單的語句(如添加
;
符号等)即可截斷bash指令的前一部分,随後跟随任意指令即可達到任意指令執行,産生漏洞。
加載了惡意參數的最終執行指令如下:
/bin/sh -c 'ping ;/usr/bin/id; -c 4 -l ...'
備注:分析過程中,有些參數并非使用者輸入可控,乃是程式生成變量,是以未做深入分析。