原本打算繼續說一些硬體相關,但由於設備還沒到手,有些實體測試希望有更詳細的案例因此移到後面的章節繼續。(*滑跪)
基礎理論完備,現在開始來手搓第一個 CVE 付現吧 owo
為何要做 CVE 復現?無論是更加熟悉硬體漏洞的形成原因以及增加對不同系統的了解,都是很好的做法。再來是說不定也可以在復現過程中挖到屬於你的CVE
一般來說,在做漏洞挖掘的時候,首先會去進行攻擊面的列舉,定位到弱點之後,再去撰寫 POC 或者是把不同的弱點串起來擴大攻擊面。
而在漏洞復現上,前面幾個目標我們會先選擇已知漏洞成因,聚焦在確認漏洞成因後透過模擬或是實體機器的方式,在執行狀態下去定位到漏洞、撰寫 POC,最後重現漏洞。
碎碎念:雖然知道這些東西丟給現在的 AI 一下就做出來了,不需要這些麻煩的過程,甚至有些部分調用既有工具跟調用 AI 的感覺也差不多了,不過知道這些部分是如何實作的細節還是挺有趣的,或許未來哪天再等待 token 重置的時候可以想起這些東西,動手去做做看,也會有一番收穫><。
目標設備:Tanda AC15 路由器
韌體版本:US_AC15V1.0BR_V15.03.05.19_multi_TD01
先來解壓縮拿到的韌體,這邊順便比較一下binwalk和unblob兩個工具的差別跟介面
(那天binwalk更新之後介面就更新了,怪不習慣的)
| binwalk | unblob |
|---|---|
![]() |
![]() |
成功解壓RootFS,其中bin是使用buzybox(一個常見於 IoT 的shell)

squashfs-root/
├── bin/ # 常用執行檔(httpd、busybox、各種工具)
├── sbin/ # 系統管理指令
├── lib/ # 動態函式庫
├── usr/
│ ├── bin/
│ ├── sbin/
│ └── lib/
├── etc/ # 可寫入的設定檔(執行時會用到)
├── etc_ro/ # 唯讀的設定檔
├── webroot/ # 網頁介面檔案(執行時讀取的)
├── webroot_ro/ # 唯讀的網頁檔案
├── home/
├── root/
├── var/
├── tmp/
├── proc/ # 虛擬檔案系統
├── sys/ # 虛擬檔案系統
├── dev/ # 裝置節點
└── ...
了解檔案結構後來看看漏洞的成因
導讀一下 NVD 的介紹,可以看它的簡介跟相關的 引用連結(特別是exploitation),通常就可以得知大部分的漏洞細節。
而本次成因是在 Tenda 自製的 GoAhead 網頁伺服器
中的 /goform/telnethandler。
路由器的網頁相關處理通常是由httpd之類的web binary來進行
file: bin/httpd
一打開進去可以看到tenda友善的歡迎
在TendaTelnet()中,可以看到他對lan.ip未經驗證或任何處理就交由systemCmd來執行
而需要觸發這個漏洞可以往回追到,在R7WebsSecurityHandler()中,會比較是否是 /goform/telnet routing,是的話會直接進到handler
觸發點是 httpd 的 goform 分派表(url → handler function pointer 的對照表,放在 .data.rel.ro,靠 relocation 在載入時才補上真正位址)。流程:
今天用最簡單的方式介紹了漏洞付現的基本流程,明天會針對模擬部分進行進一步的討論。