[零基礎學IoT Pwn] 環境搭建
0x00 前言
這裡指的零基礎其實是我們在實戰中遇到一些基礎問題,再相應的去補充學習理論知識,這樣起碼不會枯燥。
本系列主要是利用網上已知的IoT裝置(路由器)漏洞,然後收集文章學習並且復現。
0x01 裝置準備
我儘量會用真機(路由器)來複現漏洞,大家如果富裕的話也可以從閒魚淘一些二手的,再或者可以進群指不定我抽獎送二手路由器。
萬用表
需要準備一個萬用表,主要的功能是用來測試UART(TLL)中的幾個介面,比如RX
、TX
、GND
。
CH340G裝置(USB轉TTL)
這個裝置主要的將電腦與IoT裝置用TTL線連線,方便進入IoT裝置的終端(Shell)。
如果淘寶買的線壞了或者沒了,可以搜杜邦線母對母
進行購買。
電烙鐵
這裡買電烙鐵的主要用途是焊接UART介面的針腳,大部分IoT裝置雖然有UART介面但是他出廠並不會給你焊好,當然我也見過比較人性化的。像小米的裝置他會把你焊好針腳,並且還詳細的標註RX、TX、GND。
電烙鐵我選的是這款,小巧好用。
焊錫絲一般買電烙鐵可能會送,如果不送的話可以自行去知乎或者嗶哩嗶哩搜下哪款焊錫絲好用,推薦無鉛的比較環保。
松香我用的是鹿仙子的,有比較好用的牌子話可以推薦推薦。
針腳
針腳主要用來焊接UART介面,這個倒是挺便宜的。
程式設計器
程式設計器這玩意是幹嘛的?能程式設計嗎?
程式設計器主要是用來幫助我們dump IoT裝置上例如快閃記憶體晶片
裡面的資料,一般都為韌體包。
也就是我們可以利用程式設計器來進行對IoT裝置的刷機。
CH341A
程式設計器的話一般買CH341A夠用了,基本上8腳的晶片都支援。
RT809H
如果富裕的話程式設計器可以買個愛修的RT80H程式設計器
或者RT809F也不錯。
熱風槍
這個其實可有可無,相對於技術比較高的人用,因為熱風槍主要是吹出晶片然後放到程式設計器上面用來dump估計,但是一般來說用夾子就可以把韌體dump出來。
對應的買助焊膏,方便用熱風槍吹出晶片。
測試夾、探針
這個的主要用途是省的我們去焊接UART介面的針腳了,直接用這夾子加上去用CH340G裝置連線即可,不過UART介面要規則才行,要一排的那種。
免拆晶片通用測試夾
這裝置主要也是幫助用來dump晶片韌體的,我們買的程式設計器夾子一般只能用來夾8腳,當超過8腳就不好用了,所以可以用這種通用測試夾來夾住晶片然後dump估計。
0x02 環境搭建
環境的話推薦用Linux系統就行,你熟悉哪個發行版本就用哪個,推薦的話還是Debian系的Ubuntu或Kali為主。
系統安裝的話無論你是虛擬機器、WSL、物理機都行沒啥限制,你想怎麼來就怎麼來,自由。
Binwalk(韌體解包工具)
binwalk是一個韌體解包的工具,當我們用程式設計器dump出一個韌體用,需要用binwalk來解壓。
這工具一般kali上會自帶,不過還是建議從原始碼自己編譯最新的比較好,binwalk原始碼連結
sudo apt install binwalk
韌體解包命令
binwalk -Me 你的韌體.bin
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
下載firmadyne
這裡下載的時候記得加--recursive
,因為他裡面有些其他git上的子專案,不加的話下過來是空的。
git clone --recursive https://github.com/firmadyne/firmadyne.git
從原始碼構建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
將這個替換成自己的絕對路徑。
執行sudo ./download.sh
下載需要的二進位制檔案。
安裝Firmadyne
所需的其他依賴項:
sudo apt-get install qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
模擬Netgear(網件路由器) WNAP320測試
[1]先下載韌體包
wget http://www.downloads.netgear.com/files/GDC/WNAP320/WNAP320%20Firmware%20Version%202.0.3.zip
[2]解壓韌體包
sudo python3 ./sources/extractor/extractor.py -b Netgear -sql 127.0.0.1 -np -nk "WNAP320.zip" images
#引數解釋
-b "brand 品牌"
-sql "連線本地資料庫"
-np "代表沒有並行操作"
-nk "代表不提取核心"
[3]識別CPU架構
接著是執行./script/getArch.sh
指令碼來獲取路由器韌體的CPU架構。
sudo ./scripts/getArch.sh ./images/1.tar.gz
[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: 未繫結的變數
。
測試下來發現是因為系統是中文的緣故,導致指令碼里面這命令執行有問題。
解決辦法是在終端裡面把local預設改成英文,或者你也可以把指令碼改改讓他獲取到真實的tar包總數字也行,不過我怕可能會有其他中文引起問題。
#修改語言
sudo vim /etc/default/locale
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
LC_ALL="en_US.UTF-8"
#重啟
sudo reboot
改了之後成功獲取到數字
之後繼續執行./scripts/makeImages.sh
指令碼來建立映象。
[6]設定網路介面
因為很多路由器韌體他的後臺地址ip都是固定的,比如tp-link大部分都是192.168.1.1,所以這一步主要的過程是從韌體中獲取到這些配置資訊,然後設定網路介面。
sudo ./scripts/inferNetwork.sh 1
日誌會被記錄到./scratch/1/qemu.final.serial.log
下。
[7]執行模擬環境
最後在執行完上一步後,會在./scratch/1
目錄下多出一個run.sh
,其中run.sh會建立一個新的虛擬網路卡,並且將ip設定為提取到的固定ip網段。
sudo ./scratch/1/run.sh
[8]測試是否模擬成功
最後在在瀏覽器裡面輸入固定的ip,看看是否模擬成功。
用自帶的./analyses/webAccess.py
指令碼進行目錄掃描測試。
sudo python3 ./analysec/webAccess.py 1 192.168.0.100 log.txt
用runExploits.py
指令碼自動進行metasploit的漏斗庫進行測試。
sudo python3 ./analyses/runExploits.py -t 192.168.0.100 -o exploits/exploit -e x
用nmap進行埠掃描測試
sudo nmap -O -sV 192.168.0.100
還有模擬路由器的一個好處是,我們不需要像真機那樣,焊接UART介面連線TTL才能進入終端SHELL。
直接在之前執行sudo ./scratch/1/run.sh
地方處的終端,隨便輸入什麼然後回車,之後會讓你輸入使用者名稱和密碼,分別是root
、password
。
OK環境搭建差不多就先到這,感覺大家觀看,歡迎來群裡罵我菜雞哈哈哈哈。
PWN菜雞小分隊
參考連結:
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 萬物互聯