iT邦幫忙

2026 iThome 鐵人賽

DAY 26
0
Security

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

【𝕯𝖆𝖞 𝟐𝟔】Another View 2

  • 分享至 

  • xImage
  •  

前言

昨天提到把關鍵的架構辨識後看是去模擬或是實機,但模擬起來後漏洞是否可以完成重現過程也有些許波折。
今天繼續來講一些坑跟修復的小tips

0x01 emulation 404

主流的全系統模擬(Firmadyne、FirmAE)在整台跑起來,由於追求涵蓋面廣,不一定針對每一種特定韌體的具體服務有完整依賴的建立
而單一的服務模擬(Qiling、chroot + qemu-user)只跑目標 binary,啟動較快,但針對不同服務間的串聯偶爾會失敗。

一些tips的解法分成

  • 補件 缺什麼放回去
  • bypass 把不相干的檢查拿掉

0x02 補件

default config

很多韌體讀不到 NVRAM 時會退回載入預設設定檔。比如在第一個case中利用 EMUX 模擬 Tenda AC15 時,找不到 /dev/nvram 就會改讀 /webroot/nvram_default.cfg可以去trace後替換成其他的 比如nvram_fake等工具

唯讀目錄複製成可寫

在 Tenda 案例中,只有預設讀取 webroot_ro資料夾,執行期才對應到 webroot。模擬時可以直接複製一份。同理對 /var、/tmp 掛 tmpfs。

網路介面

httpd 常從 br0 取 IP,模擬的時候可以改成 host 端建一個同名 bridge 給位址即可。
e.g., emux container 沒有 CAP_NET_ADMIN 時,Tenda AC18 的做法是把 br0、eth1、vlan* 全部改指向 lo。

misc -靜態工具

針對chroot的部分,接不到dbg可以把static busybox、gdbserver、qemu-*-static 丟進 rootFS 再 chroot。

0x03 Bypass

繞過 web server,直接跑 CGI

以 D-Link 的 hedwig.cgi 為例,該檔案是指向 cgibin 的symlink,而 cgibin 會根據呼叫時使用的檔名來決定對應的 handler。

patching 的部分,執行時把相應的檔名塞入環境變數傳遞輸入,例如設定 REQUEST_METHOD=POST,再將 payload 放入 HTTP_COOKIE,即可模擬相應的請求處理流程。

有一些cgibin 架構都可以這樣進行

patch 掉啟動時的網路/連線/硬體檢查

httpd 常等網路就緒或等設定 daemon,不滿足就退出。這時候可以把檢查函式回傳值改掉,或 NOP 條件跳轉

0x04 NVRAM 與設定後端

出錯八成是nvram在搞qvq

LD_PRELOAD hooking

nvram_faker 裡面的做法。
攔 libnvram.so 的 nvram_get/nvram_set,印出每一次查詢,可以把目標需要的 key補齊。Firmadyne/FirmAE 內建版本也是差不多的做法。

To Be Continue

Day26了 耶呼 眼神死


上一篇
【𝕯𝖆𝖞 𝟐𝟓】Another View
下一篇
【𝕯𝖆𝖞 𝟐𝟕】Agent skills ?!
系列文
Like an Exploition:IoT 韌體漏洞鍊成術 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言