NetGear 夜鹰 RAX40V2 设备与固件分析
前言
NetGear 廠商的路由器設(shè)備中,拆解開(kāi)經(jīng)常會(huì)帶有UART 調(diào)試串口,并且以往的NetGear 設(shè)備UART調(diào)試口往往只需要正確的檢測(cè)出UART引腳的類(lèi)型,設(shè)置波特率為115200,然后直接用串口調(diào)試軟件配合FT232就可以直接獲取設(shè)備內(nèi)部的shell。但是Nightawk 夜鷹 RAX40V2 路由器在接入U(xiǎn)ART調(diào)試串口時(shí),卻有所不同。本篇文章,將帶來(lái)對(duì)NetGear RAX40v2 在路由器開(kāi)發(fā)板上的UART 獲取shell的過(guò)程中遇到的一些問(wèn)題,如何進(jìn)行解決,循序漸進(jìn)的開(kāi)啟設(shè)備的telnet,讓我們拭目以待。
設(shè)備分析
產(chǎn)品名稱(chēng):Nighthawk AX4 4-Stream WiFi Router
固件版本:V1.0.2.82_2.0.50
發(fā)布日期:2020年
首先我們從設(shè)備側(cè)入手,拆解的過(guò)程以及設(shè)備硬件的配置,這不屬于本片文章的重點(diǎn),這里就不做過(guò)多的講解。
設(shè)備串口分析
引腳分析,這款設(shè)備的引腳已經(jīng)給了針腳,也免去了另外焊接針腳的工作,根據(jù)萬(wàn)用表和邏輯分析儀的識(shí)別(其實(shí)沒(méi)用到邏輯分析儀)
從上到下依次是 VCC 引腳、GND引腳 (紅線)、TXD引腳(黃線)、RXD引腳(橙線)
波特率識(shí)別
首先識(shí)別FTD 232 USB “l(fā)s -ll /dev/tty“
接下來(lái)使用devttys0 的小工具baudrate.py 來(lái)識(shí)別波特率,只需要簡(jiǎn)單的使用上下鍵,就可以識(shí)別不同的波特率。如下圖所示,設(shè)備識(shí)別為115200。 這也是NetGear 常用的波特率,其他的廠商的波特率也很多使用這個(gè)波特率。
tip: 這里順帶提一下,baudrate.py 識(shí)別的波特率是設(shè)置好的常見(jiàn)波特率,但是里面只設(shè)置了幾個(gè)可以識(shí)別的波特率,如果需要增加識(shí)別廣度,需要在腳本內(nèi)部的BAUDRATES 參數(shù)中增加想要識(shí)別的波特率值。
獲取啟動(dòng)log
現(xiàn)在我們已經(jīng)知道了波特率,接下來(lái)獲取設(shè)備在啟動(dòng)的時(shí)候的log 信息,分析這些log 對(duì)設(shè)備分析有的時(shí)候會(huì)非常有用。但是常常 UART 的log 信息會(huì)非常多并且啟動(dòng)比較快。因此需要想辦法將這些log 保存下來(lái),以便后續(xù)分析。
我們使用minicom 打開(kāi),選擇 “Serial port setup” —> 設(shè)置 ”A—-Serial Device“ 和 ”E “的波特率,minicom 使用的方法搜索一下有詳細(xì)的使用說(shuō)明。
保存串口log 為文件,關(guān)閉也是一樣的。最終可以看到生成的文件,文本編輯器打開(kāi)生成的文件。
tips: 非正常關(guān)閉minicom,會(huì)在/var/lock下創(chuàng)建幾個(gè)文件LCK*,這幾個(gè)文件阻止了minicom的運(yùn)行,將它們刪除后即可恢復(fù)。
查看設(shè)備啟動(dòng)的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接入U(xiǎn)ART調(diào)試口shell
UART 接入,設(shè)置好波特率,重啟設(shè)備,待設(shè)備系統(tǒng)啟動(dòng)完成,啟動(dòng)日志輸出完之后,連接shell ,但是需要登錄口令。
遇到這種方法,本打算嘗試調(diào)整uboot在引導(dǎo)linux kernel時(shí)使用的啟動(dòng)參數(shù)(bootargs) 直接訪問(wèn)跟文件系統(tǒng)。但是我很幸運(yùn)的使用弱口令進(jìn)去之后,但是發(fā)現(xiàn)這是一個(gè)低權(quán)限的shell,并且支持的可執(zhí)行的命令非常有限.
正當(dāng)我一籌莫展的時(shí)候,想起了曾經(jīng)看到的一款思科的設(shè)備的shell 也是類(lèi)似這種低權(quán)限的shell,但是輸入 “sh”、”\bin\sh” 、”bash” 等命令可以獲取完整版的shell。很幸運(yùn),在我輸入”sh” 之后,成功的獲取了設(shè)備完整的shell,并且支持的可執(zhí)行的命令也變多了。
busybox
開(kāi)啟設(shè)備telnet
到這里我已經(jīng)能通過(guò)UART串口獲取設(shè)備的shell了,但是進(jìn)入設(shè)備shell 過(guò)于復(fù)雜,并且我也不滿足于UART的shell, 于是接著我嘗試開(kāi)啟設(shè)備的ssh 、 telnet 的shell。我在測(cè)試的過(guò)程中,執(zhí)行/bin/文件中的telnetd 毫無(wú)反應(yīng),并且執(zhí)行busyBox 中的telnetd 也同樣顯示錯(cuò)誤,我開(kāi)始猜測(cè)開(kāi)發(fā)者可能將telnetd做了更改,導(dǎo)致無(wú)法正常使用,但是我在 /usr/sbin/文件目錄中找到了 utelnetd 可執(zhí)行文件,并且執(zhí)行后很明顯的開(kāi)啟了23端口進(jìn)行監(jiān)聽(tīng)連接。然而一切都不如我所愿,進(jìn)行登錄的時(shí)候又顯示需要登錄口令,我嘗試使用UART的弱口令和一些常見(jiàn)的口令也無(wú)法進(jìn)入shell。
并且我使用google 搜索 NetGear 有沒(méi)有歷史的telnet 口令,在一個(gè)論壇中看到了一些信息,但是也依舊沒(méi)有任何效果。https://openwrt.org/toh/netgear/telnet.console
于是我打算通過(guò)UART提供的調(diào)試接口直接修改passwd 文件,因?yàn)槭莚oot 的權(quán)限,因此直接更改admin 用戶的密碼為空。
更改為如下圖所示
然后重新啟動(dòng)utelnetd 服務(wù),使用telnet 連接在輸入用戶名admin 之后就可以直接獲取到shell 。
固件提取
由于這款設(shè)備的是NetGear 的產(chǎn)品,設(shè)備固件都是可以直接下載來(lái)的,對(duì)這部分不感興趣的直接跳過(guò)。
接下來(lái)開(kāi)始提取設(shè)備內(nèi)部的文件系統(tǒng),根據(jù)前面的查看設(shè)備啟動(dòng)時(shí)的系統(tǒng)信息,并且配合設(shè)備內(nèi)部的mtd信息分別,確定設(shè)備的文件系統(tǒng)是mtd11
使用dd 命令進(jìn)行提取,在提取之前要確定空間使用的情況,以免文件太大,文件夾中放不下,如果文件太大,可以考慮將bin 文件進(jìn)行壓縮一下。
dd if=/dev/mtd11 of=/tmp/rootfs_ubifs.bin
由于設(shè)備內(nèi)有 tftp ,嘗試使用tftp 來(lái)進(jìn)行提取dd 轉(zhuǎn)儲(chǔ)的bin 文件,但是遺憾的是,tftp 上傳文件到本地tftpd server 的文件是設(shè)備內(nèi)部的配置信息。其他的命令也無(wú)法正常將文件提取到設(shè)備外部。所幸文件系統(tǒng)內(nèi)部有可以使用的wget 命令,直接上傳上傳一個(gè)對(duì)應(yīng)架構(gòu)的完整版busybox 到其中,使用完整版的tftp 將文件傳出來(lái)即可。
tftp -p -t -f rootfs_ubifs.bin 172.15.0.2
再接下來(lái)我們提取設(shè)備的非易失性存儲(chǔ)器NVRAM(斷電之后,所存儲(chǔ)的數(shù)據(jù)不丟失的隨機(jī)訪問(wèn)存儲(chǔ)器)。先將nvram的信息保存,然后使用buybox 的ftp 上傳到本地中。
成功提取,這里的 WiFi密碼和web 管理界面的口令都沒(méi)有加密,但是路由器忘記密碼更改密碼的答案給加密了。
固件解包
上面講述了如何提取設(shè)備的固件,但是NetGear 設(shè)備固件是開(kāi)放了,直接去NetGear 官網(wǎng)下載即可。
下載完成之后,這是一個(gè)用 .chk 拓展名為結(jié)尾的NetGear 固件鏡像,那么使用binwalk 查看一下固件包
使用binwalk -Me 解開(kāi)固件包,解開(kāi)固件包之后,可以看到有兩個(gè)東西, 3A.ubi 文件和 ubifs-root 文件夾, 本以為固件中的文件系統(tǒng)提取到了ubifs-root 中,可以 ubifs-root 文件內(nèi)沒(méi)有任何東西。把關(guān)注點(diǎn)放在3A.ubi 文件上。
解開(kāi)ubi 文件有兩種方法,一個(gè)是通過(guò)掛載的方式, 一個(gè)是使用 ubi_reader 套件來(lái)解開(kāi),掛載的話過(guò)于麻煩,這里使用 ubi_reader 套件來(lái)解開(kāi). 我們需要https://github.com/jrspruitt/ubi_reader,可以通過(guò)PIP進(jìn)行安裝:
sudo pip install ubi_reader,
使用 ubireader_extract_images 來(lái)進(jìn)行解開(kāi)ubi 的文件。
ubireader_extract_images 3A.ubi
解開(kāi)之后 ubifs-root 文件內(nèi)會(huì)生成四個(gè)ubifs 的文件
根據(jù)前面對(duì)設(shè)備啟動(dòng)時(shí)的系統(tǒng)信息分析,rootfs_ubifs.ubifs 就是固件的文件系統(tǒng)。
使用binwalk 進(jìn)行分析, 識(shí)別出來(lái)是squashfs 文件系統(tǒng), 看樣子是可以使用binwalk 解開(kāi)固件
成功解開(kāi)
總結(jié)
本片文章主要從設(shè)備側(cè)和固件側(cè),分別講解了如何通過(guò)UART獲取設(shè)備的shell, 并且通過(guò)開(kāi)啟設(shè)備telnet , 在有密碼的情況下,如何進(jìn)行處理。以及對(duì) .chk 和ubi 的固件如何進(jìn)行分析與解包,接下來(lái)在漏洞挖掘和分析固件的方面,應(yīng)該著重于經(jīng)常產(chǎn)生漏洞的httpd 組件開(kāi)始,以及比對(duì)更新的固件,使用bindiff 進(jìn)行更新后的固件的比對(duì),找出漏洞點(diǎn)。
有需要相關(guān)的資料可以關(guān)注私信我哦!!!
【資料詳細(xì)】
總結(jié)
以上是生活随笔為你收集整理的NetGear 夜鹰 RAX40V2 设备与固件分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【攻防】Kubelet访问控制机制与提权
- 下一篇: 【安全漏洞】Rocket.Chat 远程