高清无码男男同同性,久久久久日韩AV无码一区,自拍 另类 综合 欧美小说,尤物网址在线观看

0371-63319761
您的當前位置:主頁 > 安全研究 > 安全研究 >

IoT設(shè)備獲取本地shell權(quán)限并進行軟件調(diào)試

時間:2022-05-07

IoT設(shè)備獲取本地shell權(quán)限并進行軟件調(diào)試

1、簡介
 
筆者近期研究了一些智能家居設(shè)備,這些設(shè)備開放端口較少,網(wǎng)絡(luò)側(cè)基本無法獲取調(diào)試權(quán)限。本地獲取設(shè)備的調(diào)試權(quán)限,在當前的攻防形態(tài)下,就變成了一個重要步驟。本文主要記錄通過串口、固件篡改獲取本地權(quán)限的過程。
 
如下圖所示的設(shè)備,位置1為flash芯片,位置2為串口調(diào)試接口。使用串口線進行串口探測,將主板上的接口一一引出,再使用萬用表測試電平,最后判定其串口線序,這一步許多道友都分享了,這里不再贅述。接下來主要介紹記錄獲取本地shell權(quán)限和調(diào)試環(huán)境的過程。
 
圖 1 設(shè)備主板flash和串口位置
 
2、本地權(quán)限獲取
 
本節(jié)主要介紹3個步驟,分別是串口探測、讀取固件、更改固件。這三個步驟的實驗可使設(shè)備運行更改后的固件,并成功執(zhí)行本地shell和telnetd服務(wù)。
 
2.1 串口探測
 
使用串口線連接到設(shè)備后,顯示(none)login,需要進行登錄。因為不知道密碼,暫時無法獲取本地root權(quán)限。
 
圖 2 本地提示登錄
 
嘗試更改uboot啟動參數(shù)時,uboot設(shè)置了密碼。
 
圖 3 進圖uboot命令行之前提示輸入密碼
 
嘗試把uboot提取出來后,發(fā)現(xiàn)一個密碼,但是輸入到uboot中,無法登錄,暫時沒辦法短時間內(nèi)通過uboot啟動我們指定的固件。
 
圖 4 uboot逆向后硬編碼的某字符串
 
綜上,在串口上直接獲取本地權(quán)限比較困難,逆向完uboot需要的時間成本較大,決定改flash上的固件獲取權(quán)限。
 
2.2 讀取固件
 
硬件上使用Norflash,硬件上處理固件相對容易。本次使用工具如下:
Ø  Xgpro T56編程器
Ø  Putty
Ø  USB轉(zhuǎn)TTL線
Ø  拆焊臺
 
使用編程器將固件讀取后,可直接使用binwalk解壓到文件系統(tǒng),進而進行固件的靜態(tài)分析。
 
圖 5 binwalk輸出的固件結(jié)構(gòu)
 
Binwalk的結(jié)構(gòu)看起來有些識別誤差,我們查看F40000附近后,可確定0x440000-0xF40000處為JFFS2文件系統(tǒng)分區(qū)(而非0xF400D4)。
 
圖 6 固件0xF40000位置
 
使用dd命令分割固件,將該區(qū)域的文件系統(tǒng)文件使用binwalk解壓后,可得到以下文件系統(tǒng)內(nèi)容。
 
圖 7 JFFS文件系統(tǒng)內(nèi)容
 
使用binwalk解壓整個固件,可得到根文件系統(tǒng)目錄,如下所示:
 
圖 8 根文件系統(tǒng)結(jié)構(gòu)
 
在根文件系統(tǒng)下搜索”boot.sh”,確定boot.sh會在開機啟動。
 
圖 9 開機啟動boot.sh
 
也就是說,JFFS2文件系統(tǒng)作為一個MTD分區(qū)被加載到內(nèi)存后,進行了掛載,并在啟動腳本”S90init”中啟動。我們只需要更改該腳本,并啟動telnetd和串口shell即可。
 
2.3 更改固件
 
由以上實驗可知,更改boot.sh即可執(zhí)行本地命令。在boot.sh中增加如下所示內(nèi)容。
 

圖 10 固件更改內(nèi)容
 
下面重新打包固件。主要步驟如下:
 
Ø  將被更改的固件目錄重新打包為相同格式的文件系統(tǒng)rootfs.jffs2。
 
Ø  制作全“ff”的文件系統(tǒng)out1024.bin。
 
Ø  將rootfs.jffs2填充到out1024.img中。
 
Ø  將out1024.img填充到原固件中。
 
分別對應(yīng)下列命令:
 
圖 11 更改固件對應(yīng)的命令
 
使用編程器進行固件燒錄,這里不再贅述編程器的使用過程。再次啟動設(shè)備后,發(fā)現(xiàn)設(shè)備啟動了更改后的腳本:
 
圖 12 更改后的固件生效
 
telnet也連接shell成功:
 
圖 13 連接telnet shell成功
 
3、調(diào)試環(huán)境
 
本節(jié)介紹兩個方面的內(nèi)容,分別是NFS服務(wù)的搭建流程和交叉編譯環(huán)境的搭建流程,通過這兩個流程,我們實現(xiàn)了拓展本地運行存儲空間,并建立了軟件進程的調(diào)試環(huán)境。
 
3.1 NFS服務(wù)
 
本地拿了權(quán)限,但是設(shè)備沒有太多的空間供我們使用,具體如下所示。
 
圖 14 設(shè)備自身空間使用情況
 
查看/proc/filesystems確認設(shè)備具備NFS服務(wù)掛載的模塊,使用NFS服務(wù)外部硬盤到本地執(zhí)行g(shù)dbserver或者tcpdump是一個比較好的選擇。
 
圖 15 filesystems文件內(nèi)容
 
本地搭建好NFS服務(wù)后,讓服務(wù)主機與設(shè)備在一個子網(wǎng)中,可遠程掛載NFS服務(wù)到本地,解決了本地空間不足的問題。具體如下。
 
圖 16 掛載遠程硬盤成功
 
圖 17 掛載遠程硬盤拓展容量
 
3.2 交叉編譯環(huán)境
 
3.2.1 確定交叉編譯器
 
全盤搜索“arm-”可得到以下信息,確定交叉編譯工具為arm-none-linux-gnueabi-4.4.0_ARMv5TE,具體如下圖所示。在網(wǎng)上可找到其下載地址。
 

圖 18 確定交叉編譯器
 
圖 19 網(wǎng)上搜索到交叉編譯器鏈接
 
構(gòu)建交叉編譯環(huán)境的過程就是解壓、添加PATH到系統(tǒng)中的過程,這里不再贅述,接下來嘗試編譯gdbserver。
 
3.2.2 交叉編譯gdbserver
 
由圖 網(wǎng)上搜索到交叉編譯器鏈接 可知,交叉編譯器的版本可追溯到2012年8月份。這里選定2013年左右的gdb-7.6.1進行編譯,出錯的概率會小些。
 
Gdb依賴的termcap庫不在交叉編譯環(huán)境中,下載termcap-1.3.1.tar.gz并交叉編譯后,將編譯生成的libtermcap.a復(fù)制到交叉編譯環(huán)境的lib目錄下即可編譯gdbserver成功。編譯gdbserver的命令如下:
./configure --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi CC=arm-none-linux-gnueabi-gcc
 
這一條命令分別在gdb根目錄下和gdb/gdbserver目錄下運行,即可生成交叉編譯后的gdb和gdbserver。將編譯后的文件復(fù)制到nfs共享目錄下:
 
圖 20 復(fù)制gdb和gdbserver到共享目錄下
 
圖 21 在設(shè)備上執(zhí)行g(shù)dbserver和gdb成功
 
圖 22 gdbserver attach進程成功
 

圖 23 建立調(diào)試連接
 
最后建立連接的時候暫時出現(xiàn)了一些問題??撮T狗給把進程關(guān)掉了,后面的調(diào)試還要繞過看門狗,這里不再贅述。
 
圖 24 看門狗kill了調(diào)試進程
 
4、總結(jié)
 
本文通過記錄智能家居設(shè)備的部分研究過程,向讀者分享了嵌入式產(chǎn)品簡單的固件分析、固件篡改、調(diào)試環(huán)境的建立流程。希望對各位讀者的安全研究有幫助。
 
由于現(xiàn)有設(shè)備的特殊性,這些方法只是達到階段目標的可行方式之一。比如燒錄固件,也可以通過uboot的tftp功能燒錄,還可以通過uboot加載DIY的固件等等,這些功能比較簡單,但歸根結(jié)底還是向flash中寫入數(shù)據(jù),并將flash區(qū)域中的數(shù)據(jù)讀取到內(nèi)存空間后進行啟動的過程,單獨成文的必要性不大,有興趣的同學(xué)可以單獨溝通。
 
*本文由看雪論壇 fengzhidian 原創(chuàng),轉(zhuǎn)載請注明來自看雪社區(qū)
來源:看雪學(xué)苑

 

Copyright © 2017-2024 河南中瀚安全技術(shù)有限公司 版權(quán)所有 豫ICP備18011434號-1 豫公網(wǎng)安備 41019702002746號