5分鐘教程 如何通過UART獲得root許可權

2022-06-23 06:03:10 字數 2402 閱讀 6673

你知道物聯網裝置以及其他硬體製造商是如何除錯和測試自家裝置的嗎?沒錯,絕大多數情況下,他們都會留下乙個序列介面,這樣就可以利用這個介面並通過shell來讀取實時的除錯日誌或與硬體進行互動。現在主要有兩種不同的序列介面,但最常見的一種是通用非同步收發器(uart)。

在這篇文章中,我們將討論如何通過uart來與tp-link wr841n (v9.0)進行連線,整個實際動手操作時間大約在五分鐘左右。

在開始之前,我想先跟大家簡單介紹一下uart的工作機制,如果你已經了解了的話,可以直接跳過這個部分。

uart指的是通用非同步收發器,跟其他序列介面不同的是,它是一種不依賴於時鐘的序列通訊介面,它可以適用於單向通訊、半雙工通訊或全雙工等場景下,通訊本身主要是通過資料報實現的:

uart介面在物理裝置的電路板上,一般是乙個擁有3/4個針腳的面板。在我們的分析場景中(tp-link wr841n v9.0),埠情況如下圖所示:

當你找到uart埠之後,我們還需要區分每乙個針腳的功能(gnd, vcc, tx, rx)。此時我們需要按照以下步驟進行操作:

1. 識別gnd:關掉裝置,把你的萬用表調到『連續模式『,把黑色探針接地(或接其他金屬),然後把紅色探針依次與上述四個針腳進行接觸,如果發出了「嗶嗶」聲,則說明這個針腳為gnd。

2. 識別vcc:把萬用表調到「dc voltage(v-)」,把黑色探頭接到gnd,然後用紅色探頭去檢查uart針腳。然後接點,如果哪個針腳能夠出現恆定的高電壓(約3.3v或5v),則說明這個針腳就是vcc。

3. 識別tx:在啟動過程中的10-15秒時間裡,tx針腳會引起非常大的電壓波動,因為啟動過程中有很多資料需要傳輸,方法跟尋找vcc針腳的方法相同。

4. 識別rx:rx針腳在整個過程中電壓是最低的,相比不用解釋太多了。

識別出了所有針腳之後,你就可以焊接一些聯結器上去了(attify badge):

在我們真正與uart介面進行通訊之前,我們需要先弄清楚波特率(baud rate)。所謂波特率,指的是資料在裝置之間的傳輸頻率。換句話來說,就是每秒傳輸幾位元的資料。常見的波特率為9600, 38400, 19200, 57600和115200,但是理論上來說,製造商是可以隨意設定的。

我們可以使用devttys0的python指令碼來快速尋找到適當的波特率:

$ git clone 

$ cd baudrate

$ sudo python baudrate.py
之後,你就可以用上下鍵來掃瞄不同的波特率了,這個過程其實跟你調整無線電台頻率是一樣的。

在我們的測試場景下,tp-link路由器使用的波特率為115200。

為了通過uart來與裝置進行互動,我們需要執行下列命令:

boom!!我們成功拿到了shell的root訪問權!沒錯,就是這麼簡單!接下來,你可以隨意檢視或修改裝置的檔案系統了。

下面是我在測試過程中所遇到的一些有意思的情況。

近期我還對tp-link wr841n v.9和v.20進行了測試,而我發現當我通過uart嘗試訪問v.9路由器的shell時,它會要求我輸入使用者名稱和密碼。但是v.20路由器卻直接給我訪問裝置shell了。

如果你連線好uart後首次啟動裝置失敗的話,你可以拔掉tx和rx接頭,然後再重啟裝置時重新連線。此時你將會看到dropbear rsa/dss金鑰的建立資訊:

我現在的主要目標是通過uart在這些路由器中建立後門,建立惡意韌體,或修改目標裝置上的特定檔案。除此之外,我還會分析這兩個版本路由器之間的區別。希望本文能夠給各位同學的hacking帶來一些思路。

《轉》C語言指標5分鐘教程

什麼是指標?什麼是記憶體位址?什麼叫做指標的取值?指標是乙個儲存計算機記憶體位址的變數。在這份教程裡 引用 表示計算機記憶體位址。從指標指向的記憶體讀取資料稱作指標的取值。指標可以指向某些具體型別的變數位址,例如int long和double。指標也可以是void型別 null指標和未初始化指標。本...

2分鐘獲得HTTPS證書

我們將利用certbot來獲取let s encrypt的免費https證書。這裡是使用的是centos 6 ngibx,更多的系統的安裝方法可以到certbot官網查詢,這裡就不一一贅述。因為centos 6沒有certbot的打包版本,所以我們需要用certbot auto指令碼來獲取。wget...

Git五分鐘教程

使用git前,需要先建立乙個倉庫 repository 您可以使用乙個已經存在的目錄作為git倉庫或建立乙個空目錄。git initgit init newrepo從現在開始,我們將假設您在git倉庫根目錄下,除非另有說明。我們有乙個倉庫,但什麼也沒有,可以使用add命令新增檔案。git add f...