天天看點

[漏洞分析]NetLink GPON RCE

目錄

        • 0x01 漏洞回顧
        • 0x02 固件下載下傳及解包
        • 0x03 漏洞分析
        • 0x04 寫在最後

0x01 漏洞回顧

漏洞描述:遠端指令執行(Remote Code Execution)。

根據exploit-db顯示,該漏洞是target_addr字段存在指令注入漏洞,漏洞poc傳送門。

漏洞利用條件:需要身份認證。

該漏洞需要身份認證,部分裝置的預設使用者名/密碼為:e8c/e8c。可利用此使用者名密碼成功登入裝置。

漏洞影響:較大。

[漏洞分析]NetLink GPON RCE

0x02 固件下載下傳及解包

Netlink Gpon裝置固件可以在官網下載下傳到,傳送門。

下載下傳後,直接通過binwalk解包固件即可。

$ binwalk -Me HG323RW_UPGRADE_NETLINK_1.0.35-200817.tar 
           

固件檔案結構如下圖所示(進檢視三級目錄結構)。

[漏洞分析]NetLink GPON RCE

0x03 漏洞分析

  1. 根據Poc可知,漏洞發生在送出資料給

    /boaform/admin/formPing

    時候。是以,對固件中的

    /bin/boa

    進行分析。

    當然,也可以通過指令

    grep ‘boaform/admin’ ./* -r

    來比對看看哪個可執行檔案比對到,再簡單分析一下,就可以确定要分析的目标程式。
    $ sudo grep 'boaform/admin' ./* -r
    Binary file ./bin/boa matches
    ...
               
  2. 先檢視

    boa

    檔案格式。可知,該可執行檔案為MIPS架構,大端,32位。
    [漏洞分析]NetLink GPON RCE
  3. 用IDA打開

    boa

    檔案。注意,在處理器類型裡邊,選擇好相比對的内容。本次選擇是“MIPS big endian”。
    [漏洞分析]NetLink GPON RCE
  4. 有了前期對poc的閱讀,我們清楚地知道,本次漏洞是在對

    boaform/admin/formPing

    送出非法參數引起。是以,我們可以直接打開字元串子視窗,搜尋

    formPing

    [漏洞分析]NetLink GPON RCE
  5. 輕按兩下,可以在IDA View視窗看到該字元串所在的位置。接着,檢視交叉引用, 跳轉到引用該字元串的函數中。
    [漏洞分析]NetLink GPON RCE
  6. 閱讀彙編代碼,可知,擷取參數的步驟大緻如下:

    加載“formPing”字元串,從用戶端送出的參數中獲得“target_addr”,儲存在"0xA30+var_9FC"中(

    sw $v0, 0xA30+var_9FC

    ),随後,獲得"waninf"參數,儲存在"0xA30+car_A00"中(

    sw 0xA30+var_A00($fp)

    )。

    0xA30+var_9FC —> target_addr;

    0xA30+var_A00 —> waninf.

    如果

    waninf

    等于0, 則跳轉至

    loc_4D6A4C

    ,顯然不會跳轉過去。繼續往下, 如果

    target_addr

    不為0,則跳轉至

    loc_4D6BD8

    處。顯而易見,此處會跳轉分支。
    [漏洞分析]NetLink GPON RCE
  7. 此處似乎是對“target_addr"長度做一個儲存。繼續跳轉至

    loc_4D6D1C

    [漏洞分析]NetLink GPON RCE
  8. 此處,完成一些提示輸出,繼續跳轉至

    loc_4D6FB8

    [漏洞分析]NetLink GPON RCE
  9. 此處進行了一個比較,随後跳轉至

    loc_4D6FD8

    [漏洞分析]NetLink GPON RCE
  10. 此處進行一些與使用者輸入無關的操作,生成并儲存一些變量,随後跳轉至

    loc_4D7044

    [漏洞分析]NetLink GPON RCE
  11. 此處,先加載寫在固件裡的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 ...'

    [漏洞分析]NetLink GPON RCE
  12. 至此分析完畢。

0x04 寫在最後

可分析可知,該漏洞形成的原因是:沒有對使用者輸入的字元串進行過濾,接收到參數後,直接儲存在記憶體中,最後在補全指令語句的過程中,直接從記憶體加載參數。

使用者隻需構造簡單的語句(如添加

;

符号等)即可截斷bash指令的前一部分,随後跟随任意指令即可達到任意指令執行,産生漏洞。

加載了惡意參數的最終執行指令如下:

/bin/sh -c 'ping ;/usr/bin/id; -c 4 -l ...'

備注:分析過程中,有些參數并非使用者輸入可控,乃是程式生成變量,是以未做深入分析。

繼續閱讀