網絡故障(network failure)是指由于硬件的問題、軟件的漏洞、病毒的侵入等引起網絡無法提供正常服務或降低服務質量的狀態。 報價 在第一部分中,我通過UART進行了調試,最后,我使用命令行頁面使用Shell命令來獲取root特權。至此,我已經可以訪問路由器,然后可以像測試儀一樣調試路由器了。剛開始時,感覺該路由器相對容易訪問,不需要昂貴的工具,并且經常產生非常有趣的結果。如果要在硬件方向上倒退,但是沒有時間。這通常無法達到更高的級別,例如網絡漏洞,ISP協議等。 本文僅代表原始作者的意圖,并且本文介紹的工具和技術具有冒犯性,因此請合理合法地使用它們。 評論 下面的圖片是先前分析的結果 按Enter鍵,您將看到消息“歡迎使用ATP Cli”和登錄提示。嘗試之后,我們可以使用默認密碼admin:admin成功登錄,然后獲得BusyBox。 ------------------------------- -----Welcome to ATP Cli------ ------------------------------- Login: admin Password: #Password is ‘admin' ATP>shell BusyBox vv1.9.1 (2013-08-29 11:15:00 CST) built-in shell (ash) Enter 'help' for a list of built-in commands. # ls var usr tmp sbin proc mnt lib init etc dev bin 在這里我們可以分析固件的三個級別(Ralink IC) U-boot:設備啟動程序?梢苑治鲈O備的內存映射,可以啟動固件程序,并可以執行一些相對較低級別的任務。 ATP:可以控制裸機,并行處理等;旧希梢钥醋魇荓inux內核。 Busybox:集成了一些最常用的Linux命令和工具的工具箱,它還為我們提供了一些Shell命令。 如果在整個過程中獲得低級訪問權限,則肯定不會訪問所有數據。但是這是合理使用BusyBox的好機會,F在,我重點介紹啟動順序,并且在重新啟動過程中顯示的一些數據也非常重要。讓我們看看哪些可以被我使用。 啟動順序 引導順序中有很多隨機項,當然還有一些其他信息,例如壓縮算法(閃存段) 英特爾的閃存非常有用,我可以在這里進行分析。 更多信息 訪問閃存數據時,我們需要處理壓縮算法,以便更好地了解使用了哪些壓縮算法。 ATP和BusyBox 路由器中的Ralink IC主要與固件(ATP)一起使用,以并行控制存儲單元和處理數據,同時確保硬件的工作狀態。也就是說,它(ATP)可以被視為Linux內核,即以前所知道的ATP的CLI,但是它非常有限。 ATP>help Welcome to ATP command line tool. If any question, please input "?" at the end of command. ATP>? cls debug help save ? exit ATP> 此處的shell命令中未提及help命令,但通常出現在sh和shell中。 ATP CLI中的命令少于10個。當然,沒有控制文件和文件導航的復雜方法,這就是為什么出現BusyBox的原因。 BusyBox包含二進制文件和常見的Unix命令,這對開發非常方便。值得注意的是,它可以節省內存。從ls和cd命令到頂部,系統開始啟動腳本程序,所有這些程序都允許我將Ralink IC用作Linux機器。 輸入BusyBox以查看shell命令并運行這些命令 ATP>shell BusyBox vv1.9.1 (2013-08-29 11:15:00 CST) built-in shell (ash) Enter 'help' for a list of built-in commands. # ls var usr tmp sbin proc mnt lib init etc dev bin # # ls /bin zebra swapdev printserver ln ebtables cat wpsd startbsp pppc klog dns busybox wlancmd sntp ping kill dms brctl web smbpasswd ntfs-3g iwpriv dhcps atserver usbserver smbd nmbd iwconfig dhcpc atmcmd usbmount sleep netstat iptables ddnsc atcmd upnp siproxd mount ipp date at upg sh mldproxy ipcheck cwmp ash umount scanner mknod ip cp adslcmd tr111 rm mkdir igmpproxy console acl tr064 ripd mii_mgr hw_nat cms ac telnetd reg mic ethcmd cli tc radvdump ls equipcmd chown switch ps log echo chmod # 您會注意到BusyBox的區別,并且分析文件系統(例如busybox的鏈接文件/ bin /)不是一個好的開始。敏感數據將不會存儲在此處(BusyBox二進制文件)。 分析文件系統 現在,我已經弄清楚了哪些命令可用,然后我會看到那里有有用的數據,因此,在對系統有一個大致的了解之后,我不想在每個地方都顯示詳細的數據。這里也需要top命令。 top命令用于顯示程序正在執行的過程,該權限適用于所有用戶。盡管路由器當前處于空閑狀態,但不會顯示更多信息。 有一個過程顯示usbmount正在運行,在這里路由器的USB接口也起作用,插入USB閃存驅動器。 usb 1-1: new high speed USB device using rt3xxx-ehci and address 2 [...] ++++++sambacms.c 2374 renice=renice -n +10 -p 1423 插入后,安裝位置為/ mnt / usb1_1 /,然后啟動samba服務器。這些相關文件都在/ etc / samba / 中 # ls -l /etc/samba/ -rw-r--r-- 1 0 0 103 smbpasswd -rw-r--r-- 1 0 0 0 smbusers -rw-r--r-- 1 0 0 480 smb.conf -rw------- 1 0 0 8192 secrets.tdb # cat /etc/samba/smbpasswd nobody:0:XXXXXXXXXXXXXXXXXXX:564E923F5AF30J373F7C8_______4D2A:[U ]:LCT-1ED36884: 更多數據 netstat -a:檢查哪些端口已打開 iptables –list:我們可以設置遠程登錄并繼續連接到網絡,但是我更喜歡保持裸機狀態。 wlancmd幫助:遠程控制無線信號。 / etc / profile / etc / inetd / etc / services / var /:系統運行時使用的文件位置 / etc /:系統配置文件等。 / var /和/ etc /包含很多文件,/ etc / serverkey.pem是什么情況? 在嵌入式設備中找到TLS證書(私鑰)是正常的?梢栽趩蝹型號的設備上獲取私鑰,這也可以幫助您檢測相同型號的設備。私鑰可以從服務提供商處獲得。另一方面,獲得用于遠程服務器通信的公共證書也是很常見的。我在這里找到了兩個,都來自“同一個人的簽名”。 /etc/servercert.pem:最有可能是服務器密鑰 /etc/root.pem:是否可以連接到服務器(不確定) 更多數據位于/ etc / ppp256 / config和/ etc / ppp258 / config: 用于驗證身份憑證的信息也將通過HTTP接口傳遞,這就是我提出此概念的原因,稍后將對此進行介紹。信息太多,可能需要更多時間進行分析。在這里,您需要使用以前的磁盤來復制數據以進行分析。 收集信息 將收集的數據復制到計算機后,您可以搜索一些文件以查找。 -name * .pem,但不會顯示其他TLS證書。您要在文件中搜索密碼嗎? grep -i -r密碼。 在這里我可以看到證書信息,該信息主要提供給TR-069、本地服務和STUN協議。 STUN是一種網絡協議,它允許位于NAT(或多個NAT)后面的客戶端從您自己的公用網絡地址中找出您所支持的NAT類型以及將NAT綁定到某個本地端口的Internet端口。當然,這些可以通過HTTP接口來實現,但是這些通常是隱藏的。如果您想信任和理解,可以閱讀本文。這里有很多TR-069協議和其他內容。我還可以獲得BASE64格式的證書信息,但是數據加密稍差一些。 $ echo “QUJCNFVCTU4=” | base64 -D
ABB4UBMN 這是路由器中設置的WiFi密碼。它向我們展示了兩個有趣的文件,它們不僅涉及內容,而且是路由器工作時的重要組成部分 /var/curcfg.xml:當前的配置文件,主要包括當時設置的WiFi密碼(base64格式)。 /etc/defaultcfg.xml:默認配置文件用于恢復出廠設置,但不包括路由器的默認密碼信息。 ATP(CLI) ATP(CLI)僅提供一些命令。最有趣的一個是-shell-debug,但它看起來并不像真正的調試(調試顯示),而只是為我提供了一些命令igmpproxy,cwmp,sysuptime和atpversion,但是這些并不是很有用。我在考慮cwmp命令是否可以發揮作用。它與路由器的遠程配置有關嗎? 值得注意的是,CWMP(TR-069)也與路由器遠程相關,甚至可能沒有編碼時間。這時,其他(ATP)命令無效。清除屏幕和幫助菜單,保存并退出,這些似乎對這一步驟幾乎沒有影響。 bootloader命令行界面 bootloader命令行界面可以訪問某些內存區域,但是不幸的是,它沒有授予我直接訪問閃存芯片的權限。您可以在下面查看相關信息 Please choose operation: 3: Boot system code via Flash (default). 4: Entr boot command line interface. You choosed 4 Stopped Uboot WatchDog Timer. 4: System Enter Boot Command Line Interface. U-Boot 1.1.3 (Aug 29 2013 - 11:16:19) RT3352 # help ? - alias for 'help' bootm - boot application image from memory cp - memory copy erase - erase SPI FLASH memory go - start application at address 'addr' help - print online help md - memory display mdio - Ralink PHY register R/W command !! mm - memory modify (auto-incrementing) mw - memory write (fill) nm - memory modify (constant address) printenv- print environment variables reset - Perform RESET of the CPU rf - read/write rf register saveenv - save environment variables to persistent storage setenv - set environment variables uip - uip command version - print monitor version RT3352 # 在這里需要注意的是,除非需要使用它們,否則不要啟用這些命令,mm,mw和nm。當然,這些與這一步驟無關。在某些情況下,它將導致設備重新啟動,然后使設備變成磚頭。在這種情況下,md(內存顯示)和printenv命令引起了我的注意。 RT3352 # printenv bootcmd=tftp bootdelay=2 baudrate=57600 ethaddr="00:AA:BB:CC:DD:10" ipaddr=192.168.1.1 serverip=192.168.1.2 ramargs=setenv bootargs root=/dev/ram rw addip=setenv bootargs $(bootargs) ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname):$(netdev):off addmisc=setenv bootargs $(bootargs) console=ttyS0,$(baudrate) ethaddr=$(ethaddr) panic=1 flash_self=run ramargs addip addmisc;bootm $(kernel_addr) $(ramdisk_addr) kernel_addr=BF0000 u-boot=u-boot.bin load=tftp 8A100000 $(u-boot) u_b=protect off 1:0-1;era 1:0-1;cp.b 8A100000 B00000 $(filesize) loadfs=tftp 8A100000 root.cramfs u_fs=era bc540000 bc83ffff;cp.b 8A100000 BC540000 $(filesize) test_tftp=tftp 8A100000 root.cramfs;run test_tftp stdin=serial stdout=serial stderr=serial ethact=Eth0 (10/100-M) Environment size: 765/4092 bytes 我可以看到類似于UART的波特率設置信息,以及一些有趣的存儲單元地址。這些地址信息不應是閃存,盡管其內存只需要三個字節即可獲取它:[0x00000000,0x00FFFFFF]。 讓我們看一下其中有什么樣的有用信息,例如訪問接口,該kernel_addr = BF0000呢? 有關于badd的信息,這意味著地址無效。 md命令之前已經過硬編碼,可以讓您知道您正在嘗試訪問無效的內存地址。這不是一個好的解決方案,但是它無法訪問以前的啟動信息。 值得注意的是,我之前已經停止了通過bootloader命令行界面將linux內核加載到內存中的過程,因此通過該界面訪問的信息相對有限。 我可以使用此方法(SPI Flash圖像字符串編碼)在內存中查找隨機數據,但這沒有特殊含義。我只是用它來熟悉存儲結構,例如,在0x000d0000處有一個重大更改。 使用md命令后,您可以看到0x000d0000的更改。 未來的文章將結合固件信息來分析詳細數據,并從系統方向開始獲取更多數據。
當今,越來越多的業務應用運行于網絡架構之上,保障網絡的持續、高效、安全的運行,成為網絡管理者面臨的巨大挑戰。 |
溫馨提示:喜歡本站的話,請收藏一下本站!