---
# System prepended metadata

title: 某網通設備高危漏洞首次公開 / Henry Huang
tags: [HITCONCMT, HITCON, HITCONCMT2019]

---

某網通設備高危漏洞首次公開 / Henry Huang
===

某廠商：D-Link 

### D-Link Pre-auth Remote Root RCE (NO login required + Root)
### Demo
最新版本，且不能用whoami，用 touch 檔名，就可以利用 RCE 檔案
用 poc.py

### Impact
    官方給的型號，提供弱點版本，更新時現在還在Beta，所以要手動Upload。
    2019/05 CVE 已上版，但現在還在Beta。
    
    (1) 爬 shodan 找型號，約 23 個都有這樣的弱點
    (2) 由於管理介面在外網服務，有~8000多台可以利用的
    (3) 給 IP 就能入侵，可以利用養肉雞(Botnet) 
    (4) 加上弱密碼就可以像 Marai
    (5) DNS rebinding，可以進一步摸進去內網
    
    
### Authentication Bypass
    

    (1)使用者以瀏覽器正常作法：
        使用者送login request給 D-LINK，User 給 admin

    (2) D-LINK 新建一個檔案 /var/session/c1
        給 UID 放在Session中，加上一次性驗證碼(chal)，跟Public Key + tmp底下的明文密碼
        password + Public + 一次性驗證碼(chal) 產生 HMAC  
        
        hmac = hex_hmac_md5(pubkey+password+chal)
        
    (3) 由於User 得到 chal + pubkey + password => HMAC，再一次跟 Chal 再做雜湊
        然後跟 D-LINK 設備的 HMAC 雜湊完 Chal 做比較
        
        
    (4) 比較正確：新增檔案 /var/session/1
        然後給 newchal = timestamp + action name
        
        newchal = ～
        timestampe,(hamc X newchal)
        
    設計機制似乎很安全。
    
    BUT => 擷斷後，把 HMAC 清空。
    然後會找目前目錄上的/var/session 中還是空的，但由於UID 是空的，所以找不到UID，/var/session/1，
    HMAC 仍然是空的。
    後續的交易就一樣都可以正常登入。
    
### Authenticated Command Injection

    php 程式邏輯： php 執行完後，環境變數在 $ShellPath，但如果有加入一個分號' -> ByPass，就可以做command injction。
    不可以給正確 UID，要用不存在的 UID，然後它就會自己懷疑人生，然後會幫你自行產生一個檔案。
    UID (不存在的值) + HMAC 空值 => 加上 Command 直接執行，就執行成功了。
    

### Vendor Patch
### Detect & Mitigation
自我檢測：
/HNAP1/ => authbypass
SetAccessPointMode -> command injection
=> 代表存在該弱點。

### Reset
    (1)不要開遠端管理。
    (2)買其他產品
    (3)下載Beta framework
    
    

### NO TELNET，NO SSH
=> 沒有Shell
    方向 A：螺絲起子拆硬體
    方向 B：用瀏覽器黑箱，摸不到，進一步下firmware，Command Injection 執行。
    BurpSuite 每個AuthCode 一直動態隨機跳，較難。
    以javascript 去改程式去取得 ROOT Shell。
    

### Question
。下載 firmware 就好了，不用買 hardware。
    
。使用工具 firmadyne    
    
。shell in /etc/init.d or /etc/init0.d

。See appendix

解失敗之後，發現有加密，可以破解加密：
有進階加密就會有進解解密程式。
所以一定會有Key。後來發現解密程式 fw_sign

encimg -i FW.bin -d -s 'cat /etc/config/fw_sign' 

就可以正常使用firmware。

## Disclosure
原廠釋出更新，已調整該漏洞。


## Summary
已修復，不想公開。





###### tags: `HITCONCMT2019`,`HITCONCMT`,`HITCON`