NetGear 夜鹰 RAX40V2 设备与固件分析
前言
NetGear 廠商的路由器設備中,拆解開經常會帶有UART 調試串口,并且以往的NetGear 設備UART調試口往往只需要正確的檢測出UART引腳的類型,設置波特率為115200,然后直接用串口調試軟件配合FT232就可以直接獲取設備內部的shell。但是Nightawk 夜鷹 RAX40V2 路由器在接入UART調試串口時,卻有所不同。本篇文章,將帶來對NetGear RAX40v2 在路由器開發板上的UART 獲取shell的過程中遇到的一些問題,如何進行解決,循序漸進的開啟設備的telnet,讓我們拭目以待。
設備分析
產品名稱:Nighthawk AX4 4-Stream WiFi Router
固件版本:V1.0.2.82_2.0.50
發布日期:2020年
首先我們從設備側入手,拆解的過程以及設備硬件的配置,這不屬于本片文章的重點,這里就不做過多的講解。
設備串口分析
引腳分析,這款設備的引腳已經給了針腳,也免去了另外焊接針腳的工作,根據萬用表和邏輯分析儀的識別(其實沒用到邏輯分析儀)
從上到下依次是 VCC 引腳、GND引腳 (紅線)、TXD引腳(黃線)、RXD引腳(橙線)
波特率識別
首先識別FTD 232 USB “ls -ll /dev/tty“
接下來使用devttys0 的小工具baudrate.py 來識別波特率,只需要簡單的使用上下鍵,就可以識別不同的波特率。如下圖所示,設備識別為115200。 這也是NetGear 常用的波特率,其他的廠商的波特率也很多使用這個波特率。
tip: 這里順帶提一下,baudrate.py 識別的波特率是設置好的常見波特率,但是里面只設置了幾個可以識別的波特率,如果需要增加識別廣度,需要在腳本內部的BAUDRATES 參數中增加想要識別的波特率值。
獲取啟動log
現在我們已經知道了波特率,接下來獲取設備在啟動的時候的log 信息,分析這些log 對設備分析有的時候會非常有用。但是常常 UART 的log 信息會非常多并且啟動比較快。因此需要想辦法將這些log 保存下來,以便后續分析。
我們使用minicom 打開,選擇 “Serial port setup” —> 設置 ”A—-Serial Device“ 和 ”E “的波特率,minicom 使用的方法搜索一下有詳細的使用說明。
保存串口log 為文件,關閉也是一樣的。最終可以看到生成的文件,文本編輯器打開生成的文件。
tips: 非正常關閉minicom,會在/var/lock下創建幾個文件LCK*,這幾個文件阻止了minicom的運行,將它們刪除后即可恢復。
查看設備啟動的log ,log 很多,這里截選了部分的log信息。
squashfs: version 4.0 (2009/01/31) Phillip Lougher jffs2: version 2.2. (NAND) (SUMMARY) ? 2001-2006 Red Hat, Inc. fuse init (API version 7.23) SGI XFS with security attributes, no debug enabled io scheduler noop registered (default) brd: module loaded loop: module loaded nand: device found, Manufacturer ID: 0xef, Chip ID: 0xda nand: Unknown W29N02GV nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64 bcm63xx_nand ff801800.nand: Adjust timing_1 to 0x6532845b timing_2 to 0x00091e94 bcm63xx_nand ff801800.nand: detected 256MiB total, 128KiB blocks, 2KiB pages, 16B OOB, 8-bit, BCH-4 Bad block table found at page 131008, version 0x01 Bad block table found at page 130944, version 0x01 >>>>> For primary mtd partition rootfs, cferam/vmlinux.lz UBI volume, vmlinux fs mounted as squash fs on UBI <<<<< Secondary mtd partition rootfs_update detected as UBI for cferam/vmlinux source and UBIFS for vmlinux filesystem Creating 11 MTD partitions on “brcmnand.0”: 0x000000100000-0x000006900000 : “rootfs” 0x000006900000-0x000006d00000 : “rootfs_update” 0x000007f00000-0x00000ff00000 : “data” 0x000000000000-0x000000100000 : “nvram” 0x000000100000-0x000006900000 : “image” 0x000006900000-0x000006d00000 : “image_update” 0x000000000000-0x000010000000 : “dummy1” 0x000000000000-0x000010000000 : “dummy2” 0x000007a00000-0x000007f00000 : “misc3” 0x000007500000-0x000007a00000 : “misc2” 0x000006d00000-0x000007500000 : “misc1” tun: Universal TUN/TAP device driver, 1.6 tun: (C) 1999-2004 Max Krasnyansky maxk@qualcomm.com PPP generic driver version 2.4.2 PPP BSD Compression module registered PPP Deflate Compression module registered NET: Registered protocol family 24 i2c /dev entries driver bcm96xxx-wdt ff800480.watchdog: Broadcom BCM96xxx watchdog timer brcmboard registered brcmboard: brcm_board_init entry print_rst_status: Last RESET due to HW reset print_rst_status: RESET reason: 0x00000000 DYING GASP IRQ Initialized and Enabled map_hw_timer_interrupt,130: interrupt_id 22 map_hw_timer_interrupt,130: interrupt_id 23 map_hw_timer_interrupt,130: interrupt_id 24 map_hw_timer_interrupt,130: interrupt_id 25 Allocated EXT_TIMER number 3 Broadcom Timer Initialized接入UART調試口shell
UART 接入,設置好波特率,重啟設備,待設備系統啟動完成,啟動日志輸出完之后,連接shell ,但是需要登錄口令。
遇到這種方法,本打算嘗試調整uboot在引導linux kernel時使用的啟動參數(bootargs) 直接訪問跟文件系統。但是我很幸運的使用弱口令進去之后,但是發現這是一個低權限的shell,并且支持的可執行的命令非常有限.
正當我一籌莫展的時候,想起了曾經看到的一款思科的設備的shell 也是類似這種低權限的shell,但是輸入 “sh”、”\bin\sh” 、”bash” 等命令可以獲取完整版的shell。很幸運,在我輸入”sh” 之后,成功的獲取了設備完整的shell,并且支持的可執行的命令也變多了。
busybox
開啟設備telnet
到這里我已經能通過UART串口獲取設備的shell了,但是進入設備shell 過于復雜,并且我也不滿足于UART的shell, 于是接著我嘗試開啟設備的ssh 、 telnet 的shell。我在測試的過程中,執行/bin/文件中的telnetd 毫無反應,并且執行busyBox 中的telnetd 也同樣顯示錯誤,我開始猜測開發者可能將telnetd做了更改,導致無法正常使用,但是我在 /usr/sbin/文件目錄中找到了 utelnetd 可執行文件,并且執行后很明顯的開啟了23端口進行監聽連接。然而一切都不如我所愿,進行登錄的時候又顯示需要登錄口令,我嘗試使用UART的弱口令和一些常見的口令也無法進入shell。
并且我使用google 搜索 NetGear 有沒有歷史的telnet 口令,在一個論壇中看到了一些信息,但是也依舊沒有任何效果。https://openwrt.org/toh/netgear/telnet.console
于是我打算通過UART提供的調試接口直接修改passwd 文件,因為是root 的權限,因此直接更改admin 用戶的密碼為空。
更改為如下圖所示
然后重新啟動utelnetd 服務,使用telnet 連接在輸入用戶名admin 之后就可以直接獲取到shell 。
固件提取
由于這款設備的是NetGear 的產品,設備固件都是可以直接下載來的,對這部分不感興趣的直接跳過。
接下來開始提取設備內部的文件系統,根據前面的查看設備啟動時的系統信息,并且配合設備內部的mtd信息分別,確定設備的文件系統是mtd11
使用dd 命令進行提取,在提取之前要確定空間使用的情況,以免文件太大,文件夾中放不下,如果文件太大,可以考慮將bin 文件進行壓縮一下。
dd if=/dev/mtd11 of=/tmp/rootfs_ubifs.bin
由于設備內有 tftp ,嘗試使用tftp 來進行提取dd 轉儲的bin 文件,但是遺憾的是,tftp 上傳文件到本地tftpd server 的文件是設備內部的配置信息。其他的命令也無法正常將文件提取到設備外部。所幸文件系統內部有可以使用的wget 命令,直接上傳上傳一個對應架構的完整版busybox 到其中,使用完整版的tftp 將文件傳出來即可。
tftp -p -t -f rootfs_ubifs.bin 172.15.0.2
再接下來我們提取設備的非易失性存儲器NVRAM(斷電之后,所存儲的數據不丟失的隨機訪問存儲器)。先將nvram的信息保存,然后使用buybox 的ftp 上傳到本地中。
成功提取,這里的 WiFi密碼和web 管理界面的口令都沒有加密,但是路由器忘記密碼更改密碼的答案給加密了。
固件解包
上面講述了如何提取設備的固件,但是NetGear 設備固件是開放了,直接去NetGear 官網下載即可。
下載完成之后,這是一個用 .chk 拓展名為結尾的NetGear 固件鏡像,那么使用binwalk 查看一下固件包
使用binwalk -Me 解開固件包,解開固件包之后,可以看到有兩個東西, 3A.ubi 文件和 ubifs-root 文件夾, 本以為固件中的文件系統提取到了ubifs-root 中,可以 ubifs-root 文件內沒有任何東西。把關注點放在3A.ubi 文件上。
解開ubi 文件有兩種方法,一個是通過掛載的方式, 一個是使用 ubi_reader 套件來解開,掛載的話過于麻煩,這里使用 ubi_reader 套件來解開. 我們需要https://github.com/jrspruitt/ubi_reader,可以通過PIP進行安裝:
sudo pip install ubi_reader,
使用 ubireader_extract_images 來進行解開ubi 的文件。
ubireader_extract_images 3A.ubi
解開之后 ubifs-root 文件內會生成四個ubifs 的文件
根據前面對設備啟動時的系統信息分析,rootfs_ubifs.ubifs 就是固件的文件系統。
使用binwalk 進行分析, 識別出來是squashfs 文件系統, 看樣子是可以使用binwalk 解開固件
成功解開
總結
本片文章主要從設備側和固件側,分別講解了如何通過UART獲取設備的shell, 并且通過開啟設備telnet , 在有密碼的情況下,如何進行處理。以及對 .chk 和ubi 的固件如何進行分析與解包,接下來在漏洞挖掘和分析固件的方面,應該著重于經常產生漏洞的httpd 組件開始,以及比對更新的固件,使用bindiff 進行更新后的固件的比對,找出漏洞點。
有需要相關的資料可以關注私信我哦!!!
【資料詳細】
總結
以上是生活随笔為你收集整理的NetGear 夜鹰 RAX40V2 设备与固件分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【攻防】Kubelet访问控制机制与提权
- 下一篇: 【安全漏洞】Rocket.Chat 远程