[零基礎學IoT Pwn] 環境搭建
[零基礎學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上的文章://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 //github.com/firmadyne/firmadyne.git
從源碼構建binwalk
如果你想裝最新binwalk,並且你要裝firmadyne的話需要自己從源碼構建一個binwalk。
git clone //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+//github.com/ahupp/python-magic
sudo -H pip3 install git+//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 //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菜雞小分隊
參考鏈接:
//zhuanlan.zhihu.com/p/110806057 Firmadyne的韌體模擬環境搭建(超詳細)
//github.com/firmadyne FIRMADYNE github
//www.freebuf.com/sectool/169425.html 物聯網設備韌體模擬入門
//github.com/adi0x90/attifyos/ AttifyOS v3.0 github
//www.cnblogs.com/CoBrAMG/p/9221199.html
//iot-security.wiki/hardware-security/ 物聯網百科安全
//github.com/euphrat1ca/Security-List/blob/master/wiki_IoT&ICS.md 萬物互聯