[零基礎學IoT Pwn] 環境搭建

VxerLee暱稱已被使用發表於2022-06-30

[零基礎學IoT Pwn] 環境搭建

0x00 前言

image-20220629131640789

這裡指的零基礎其實是我們在實戰中遇到一些基礎問題,再相應的去補充學習理論知識,這樣起碼不會枯燥。

本系列主要是利用網上已知的IoT裝置(路由器)漏洞,然後收集文章學習並且復現。

0x01 裝置準備

我儘量會用真機(路由器)來複現漏洞,大家如果富裕的話也可以從閒魚淘一些二手的,再或者可以進群指不定我抽獎送二手路由器。

萬用表

需要準備一個萬用表,主要的功能是用來測試UART(TLL)中的幾個介面,比如RXTXGND

image-20220629141614989

CH340G裝置(USB轉TTL)

這個裝置主要的將電腦與IoT裝置用TTL線連線,方便進入IoT裝置的終端(Shell)。

image-20220629141854606

如果淘寶買的線壞了或者沒了,可以搜杜邦線母對母進行購買。

image-20220629142302790

電烙鐵

這裡買電烙鐵的主要用途是焊接UART介面的針腳,大部分IoT裝置雖然有UART介面但是他出廠並不會給你焊好,當然我也見過比較人性化的。像小米的裝置他會把你焊好針腳,並且還詳細的標註RX、TX、GND。

電烙鐵我選的是這款,小巧好用。

image-20220629142552577

焊錫絲一般買電烙鐵可能會送,如果不送的話可以自行去知乎或者嗶哩嗶哩搜下哪款焊錫絲好用,推薦無鉛的比較環保。

松香我用的是鹿仙子的,有比較好用的牌子話可以推薦推薦。

image-20220629143114849

針腳

針腳主要用來焊接UART介面,這個倒是挺便宜的。

image-20220629144310572

程式設計器

程式設計器這玩意是幹嘛的?能程式設計嗎?

程式設計器主要是用來幫助我們dump IoT裝置上例如快閃記憶體晶片裡面的資料,一般都為韌體包。

也就是我們可以利用程式設計器來進行對IoT裝置的刷機。

CH341A

程式設計器的話一般買CH341A夠用了,基本上8腳的晶片都支援。

image-20220629143754546

RT809H

如果富裕的話程式設計器可以買個愛修的RT80H程式設計器

image-20220629144116178

或者RT809F也不錯。

image-20220629144200850

熱風槍

這個其實可有可無,相對於技術比較高的人用,因為熱風槍主要是吹出晶片然後放到程式設計器上面用來dump估計,但是一般來說用夾子就可以把韌體dump出來。

image-20220629144643844

對應的買助焊膏,方便用熱風槍吹出晶片。

image-20220629145507733

測試夾、探針

這個的主要用途是省的我們去焊接UART介面的針腳了,直接用這夾子加上去用CH340G裝置連線即可,不過UART介面要規則才行,要一排的那種。

image-20220629150225205 image-20220629150439019

免拆晶片通用測試夾

這裝置主要也是幫助用來dump晶片韌體的,我們買的程式設計器夾子一般只能用來夾8腳,當超過8腳就不好用了,所以可以用這種通用測試夾來夾住晶片然後dump估計。

image-20220629150556811

0x02 環境搭建

環境的話推薦用Linux系統就行,你熟悉哪個發行版本就用哪個,推薦的話還是Debian系的Ubuntu或Kali為主。

系統安裝的話無論你是虛擬機器、WSL、物理機都行沒啥限制,你想怎麼來就怎麼來,自由。

Binwalk(韌體解包工具)

binwalk是一個韌體解包的工具,當我們用程式設計器dump出一個韌體用,需要用binwalk來解壓。

這工具一般kali上會自帶,不過還是建議從原始碼自己編譯最新的比較好,binwalk原始碼連結

sudo apt install binwalk

image-20220629152508639

韌體解包命令

binwalk -Me 你的韌體.bin

image-20220629152713657

image-20220629152859167

Firmadyne(韌體模擬)

這工具主要是用來模擬,將韌體用qemu模擬啟動起來,不過不是百分百模擬成功的,經常會仿失敗,常見就是環境等問題。(建議還是買真機好)

安裝可參考github上的文章:https://github.com/firmadyne/firmadyne#introduction

依賴安裝

sudo apt-get install busybox-static fakeroot git dmsetup kpartx netcat-openbsd nmap python-psycopg2 python3-psycopg2 snmp uml-utilities util-linux vlan

image-20220629172302551

下載firmadyne

這裡下載的時候記得加--recursive,因為他裡面有些其他git上的子專案,不加的話下過來是空的。

git clone --recursive https://github.com/firmadyne/firmadyne.git

image-20220629172643743

從原始碼構建binwalk

如果你想裝最新binwalk,並且你要裝firmadyne的話需要自己從原始碼構建一個binwalk。

git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk
sudo apt install python3-pip
sudo ./deps.sh
sudo apt install python-lzma
sudo python ./setup.py install
sudo -H pip3 install git+https://github.com/ahupp/python-magic
sudo -H pip3 install git+https://github.com/sviehb/jefferson

成功編譯出來後的版本是V2.3.3,比sudo apt install binwalk版本要高,apt包裡的binwalk版本是2.1.1

安裝postgresql資料庫

sudo apt-get install postgresql
sudo -u postgres createuser -P firmadyne  [預設密碼是:firmadyne]
sudo -u postgres createdb -O firmadyne firmware
sudo -u postgres psql -d firmware < ./firmadyne/database/schema

設定Firmadyne

將這個替換成自己的絕對路徑。

image-20220630114502641

執行sudo ./download.sh下載需要的二進位制檔案。

image-20220630114545069

安裝Firmadyne所需的其他依賴項:

sudo apt-get install qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils

image-20220630115600805

模擬Netgear(網件路由器) WNAP320測試

[1]先下載韌體包

wget http://www.downloads.netgear.com/files/GDC/WNAP320/WNAP320%20Firmware%20Version%202.0.3.zip

image-20220630132408996

image-20220630132628678

[2]解壓韌體包

sudo python3 ./sources/extractor/extractor.py -b Netgear -sql 127.0.0.1 -np -nk "WNAP320.zip" images

#引數解釋
-b   "brand 品牌"
-sql "連線本地資料庫"
-np  "代表沒有並行操作"
-nk  "代表不提取核心"

image-20220630133545014

[3]識別CPU架構

接著是執行./script/getArch.sh指令碼來獲取路由器韌體的CPU架構。

sudo ./scripts/getArch.sh ./images/1.tar.gz

image-20220630134021838

[4]儲存資料庫

用指令碼./scripts/tar2db.py將韌體映象的資訊儲存到資料庫

sudo python3 ./scripts/tar2db.py -i 1 -f ./images/1.tar.gz

#引數解釋
-i 1 "這裡的1代表的資料庫中的id,當你有多個韌體映象時候會有多個id,我這裡就一個所以就是1"
-f   "這裡就是解包後估計的tar包路徑,一般解壓後的韌體都在./images下面"

[5]建立QEMU映象

利用指令碼./scripts/makeImage.sh建立一個QEMU虛擬機器的映象。

sudo ./scripts/makeImage.sh 1

#引數解釋
"id這裡為1"
報錯

執行時候報錯了數值太大不可為算術進位制的基MINIMUM_IMAGE_SIZE: 未繫結的變數

image-20220630134852532

測試下來發現是因為系統是中文的緣故,導致指令碼里面這命令執行有問題。

image-20220630142950019

image-20220630143206716

image-20220630143154240

解決辦法是在終端裡面把local預設改成英文,或者你也可以把指令碼改改讓他獲取到真實的tar包總數字也行,不過我怕可能會有其他中文引起問題。

#修改語言
sudo vim /etc/default/locale
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
LC_ALL="en_US.UTF-8"
#重啟
sudo reboot

改了之後成功獲取到數字

image-20220630144515754

之後繼續執行./scripts/makeImages.sh指令碼來建立映象。

image-20220630144651540

image-20220630144719012

[6]設定網路介面

因為很多路由器韌體他的後臺地址ip都是固定的,比如tp-link大部分都是192.168.1.1,所以這一步主要的過程是從韌體中獲取到這些配置資訊,然後設定網路介面。

sudo ./scripts/inferNetwork.sh 1

image-20220630145435539

日誌會被記錄到./scratch/1/qemu.final.serial.log下。

image-20220630145642432

[7]執行模擬環境

最後在執行完上一步後,會在./scratch/1目錄下多出一個run.sh,其中run.sh會建立一個新的虛擬網路卡,並且將ip設定為提取到的固定ip網段。

sudo ./scratch/1/run.sh

image-20220630150053226

image-20220630150108609

[8]測試是否模擬成功

最後在在瀏覽器裡面輸入固定的ip,看看是否模擬成功。

image-20220630150421636

image-20220630150604968

用自帶的./analyses/webAccess.py指令碼進行目錄掃描測試。

sudo python3 ./analysec/webAccess.py 1 192.168.0.100 log.txt

image-20220630151525473

runExploits.py指令碼自動進行metasploit的漏斗庫進行測試。

sudo python3 ./analyses/runExploits.py -t 192.168.0.100 -o exploits/exploit -e x

image-20220630152625817

用nmap進行埠掃描測試

sudo nmap -O -sV 192.168.0.100

image-20220630153458978

還有模擬路由器的一個好處是,我們不需要像真機那樣,焊接UART介面連線TTL才能進入終端SHELL。

直接在之前執行sudo ./scratch/1/run.sh地方處的終端,隨便輸入什麼然後回車,之後會讓你輸入使用者名稱和密碼,分別是rootpassword

image-20220630155613645

image-20220630155706932

OK環境搭建差不多就先到這,感覺大家觀看,歡迎來群裡罵我菜雞哈哈哈哈。

PWN菜雞小分隊

image-20220630155816501

參考連結:

https://zhuanlan.zhihu.com/p/110806057 Firmadyne的韌體模擬環境搭建(超詳細)

https://github.com/firmadyne FIRMADYNE github

https://www.freebuf.com/sectool/169425.html 物聯網裝置韌體模擬入門

https://github.com/adi0x90/attifyos/ AttifyOS v3.0 github

https://www.cnblogs.com/CoBrAMG/p/9221199.html

https://iot-security.wiki/hardware-security/ 物聯網百科安全

https://github.com/euphrat1ca/Security-List/blob/master/wiki_IoT&ICS.md 萬物互聯

相關文章