iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0
Security

Like an Exploition:IoT 韌體漏洞鍊成術系列 第 6 篇

【𝕯𝖆𝖞 𝟔】My First CVE (Reproduction) - Web Command Injeciton (1/2)

  • 分享至 

  • xImage
  •  

前言

原本打算繼續說一些硬體相關,但由於設備還沒到手,有些實體測試希望有更詳細的案例因此移到後面的章節繼續。(*滑跪)

基礎理論完備,現在開始來手搓第一個 CVE 付現吧 owo
為何要做 CVE 復現?無論是更加熟悉硬體漏洞的形成原因以及增加對不同系統的了解,都是很好的做法。再來是說不定也可以在復現過程中挖到屬於你的CVE

淺談漏洞復現流程

一般來說,在做漏洞挖掘的時候,首先會去進行攻擊面的列舉,定位到弱點之後,再去撰寫 POC 或者是把不同的弱點串起來擴大攻擊面。

而在漏洞復現上,前面幾個目標我們會先選擇已知漏洞成因,聚焦在確認漏洞成因後透過模擬或是實體機器的方式,在執行狀態下去定位到漏洞、撰寫 POC,最後重現漏洞。

碎碎念:雖然知道這些東西丟給現在的 AI 一下就做出來了,不需要這些麻煩的過程,甚至有些部分調用既有工具跟調用 AI 的感覺也差不多了,不過知道這些部分是如何實作的細節還是挺有趣的,或許未來哪天再等待 token 重置的時候可以想起這些東西,動手去做做看,也會有一番收穫><。

CVE-2025-25632

目標設備:Tanda AC15 路由器
韌體版本:US_AC15V1.0BR_V15.03.05.19_multi_TD01

0x01 Recon & Target Vulnerability

先來解壓縮拿到的韌體,這邊順便比較一下binwalk和unblob兩個工具的差別跟介面
(那天binwalk更新之後介面就更新了,怪不習慣的)

binwalk unblob
image.png image.png

成功解壓RootFS,其中bin是使用buzybox(一個常見於 IoT 的shell)

image.png


squashfs-root/
├── bin/                  # 常用執行檔(httpd、busybox、各種工具)
├── sbin/                 # 系統管理指令
├── lib/                  # 動態函式庫
├── usr/
│   ├── bin/
│   ├── sbin/
│   └── lib/
├── etc/                  # 可寫入的設定檔(執行時會用到)
├── etc_ro/               # 唯讀的設定檔
├── webroot/              # 網頁介面檔案(執行時讀取的)
├── webroot_ro/           # 唯讀的網頁檔案
├── home/
├── root/
├── var/
├── tmp/
├── proc/                 # 虛擬檔案系統
├── sys/                  # 虛擬檔案系統
├── dev/                  # 裝置節點
└── ...

0x02 Targeting Vulnerability

了解檔案結構後來看看漏洞的成因
image.png
導讀一下 NVD 的介紹,可以看它的簡介跟相關的 引用連結(特別是exploitation),通常就可以得知大部分的漏洞細節。

而本次成因是在 Tenda 自製的 GoAhead 網頁伺服器
中的 /goform/telnethandler。

路由器的網頁相關處理通常是由httpd之類的web binary來進行
file: bin/httpd

一打開進去可以看到tenda友善的歡迎
image.png

在TendaTelnet()中,可以看到他對lan.ip未經驗證或任何處理就交由systemCmd來執行
image.png

而需要觸發這個漏洞可以往回追到,在R7WebsSecurityHandler()中,會比較是否是 /goform/telnet routing,是的話會直接進到handler
image.png

觸發點是 httpd 的 goform 分派表(url → handler function pointer 的對照表,放在 .data.rel.ro,靠 relocation 在載入時才補上真正位址)。流程:

tl;dr

  1. 連線進來 → httpd 解析 request path /goform/telnet
  2. Cookie 驗證只檢查字串是否含 user=admin(弱驗證,繞過)
  3. Dispatcher 拿 path 去比對 goform table,找到對應 entry
  4. Entry 的 handler pointer 指向 TendaTelnet()
  5. TendaTelnet() 執行 dosystemcmd

To Be Continue

今天用最簡單的方式介紹了漏洞付現的基本流程,明天會針對模擬部分進行進一步的討論。


上一篇
【𝕯𝖆𝖞 𝟓】My First DLC - 韌體加解密-2 反魔改
下一篇
【𝕯𝖆𝖞 𝟕】My First CVE (Reproduction) - Web Command Injeciton (2/2)
系列文
Like an Exploition:IoT 韌體漏洞鍊成術 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言