2

[零基础学IoT Pwn] 环境搭建 - VxerLee昵称已被使用

 1 year ago
source link: https://www.cnblogs.com/VxerLee/p/16427304.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

[零基础学IoT Pwn] 环境搭建

0x00 前言

2080041-20220629131639667-524627778.png

这里指的零基础其实是我们在实战中遇到一些基础问题,再相应的去补充学习理论知识,这样起码不会枯燥。

本系列主要是利用网上已知的IoT设备(路由器)漏洞,然后收集文章学习并且复现。

0x01 设备准备

我尽量会用真机(路由器)来复现漏洞,大家如果富裕的话也可以从闲鱼淘一些二手的,再或者可以进群指不定我抽奖送二手路由器。

需要准备一个万用表,主要的功能是用来测试UART(TLL)中的几个接口,比如RXTXGND

2080041-20220629141613464-744569208.png

CH340G设备(USB转TTL)

这个设备主要的将电脑与IoT设备用TTL线连接,方便进入IoT设备的终端(Shell)。

2080041-20220629141852945-1070075844.png

如果淘宝买的线坏了或者没了,可以搜杜邦线母对母进行购买。

2080041-20220629142301114-319310809.png

这里买电烙铁的主要用途是焊接UART接口的针脚,大部分IoT设备虽然有UART接口但是他出厂并不会给你焊好,当然我也见过比较人性化的。像小米的设备他会把你焊好针脚,并且还详细的标注RX、TX、GND。

电烙铁我选的是这款,小巧好用。

2080041-20220629142550886-1446326744.png

焊锡丝一般买电烙铁可能会送,如果不送的话可以自行去知乎或者哔哩哔哩搜下哪款焊锡丝好用,推荐无铅的比较环保。

松香我用的是鹿仙子的,有比较好用的牌子话可以推荐推荐。

2080041-20220629143113221-315346760.png

针脚主要用来焊接UART接口,这个倒是挺便宜的。

2080041-20220629144308870-291804334.png

编程器这玩意是干嘛的?能编程吗?

编程器主要是用来帮助我们dump IoT设备上例如闪存芯片里面的数据,一般都为固件包。

也就是我们可以利用编程器来进行对IoT设备的刷机。

CH341A

编程器的话一般买CH341A够用了,基本上8脚的芯片都支持。

2080041-20220629143753015-5712455.png

RT809H

如果富裕的话编程器可以买个爱修的RT80H编程器

2080041-20220629144114594-1815650222.png

或者RT809F也不错。

2080041-20220629144159105-528900678.png

这个其实可有可无,相对于技术比较高的人用,因为热风枪主要是吹出芯片然后放到编程器上面用来dump估计,但是一般来说用夹子就可以把固件dump出来。

2080041-20220629144642092-1235498001.png

对应的买助焊膏,方便用热风枪吹出芯片。

2080041-20220629145508267-680423273.png

测试夹、探针

这个的主要用途是省的我们去焊接UART接口的针脚了,直接用这夹子加上去用CH340G设备连接即可,不过UART接口要规则才行,要一排的那种。

2080041-20220629150224333-1815418800.png

2080041-20220629150437677-366076778.png

免拆芯片通用测试夹

这设备主要也是帮助用来dump芯片固件的,我们买的编程器夹子一般只能用来夹8脚,当超过8脚就不好用了,所以可以用这种通用测试夹来夹住芯片然后dump估计。

2080041-20220629150555032-1280401779.png

0x02 环境搭建

环境的话推荐用Linux系统就行,你熟悉哪个发行版本就用哪个,推荐的话还是Debian系的Ubuntu或Kali为主。

系统安装的话无论你是虚拟机、WSL、物理机都行没啥限制,你想怎么来就怎么来,自由。

Binwalk(固件解包工具)

binwalk是一个固件解包的工具,当我们用编程器dump出一个固件用,需要用binwalk来解压。

这工具一般kali上会自带,不过还是建议从源码自己编译最新的比较好,binwalk源码链接

bash
sudo apt install binwalk

2080041-20220629152507202-1025839438.png

固件解包命令

bash
binwalk -Me 你的固件.bin

2080041-20220629152712581-333144789.png

2080041-20220629152857466-503081647.png

Firmadyne(固件仿真)

这工具主要是用来仿真,将固件用qemu模拟启动起来,不过不是百分百模拟成功的,经常会仿失败,常见就是环境等问题。(建议还是买真机好)

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

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

2080041-20220629172304301-1208298783.png

下载firmadyne

这里下载的时候记得加--recursive,因为他里面有些其他git上的子项目,不加的话下过来是空的。

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

2080041-20220629172644601-325941839.png

从源码构建binwalk

如果你想装最新binwalk,并且你要装firmadyne的话需要自己从源码构建一个binwalk。

bash
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数据库

bash
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

将这个替换成自己的绝对路径。

2080041-20220630114512805-1123383786.png

运行sudo ./download.sh下载需要的二进制文件。

2080041-20220630114545016-358836912.png

安装Firmadyne所需的其他依赖项:

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

2080041-20220630115602248-1208098708.png

仿真Netgear(网件路由器) WNAP320测试

[1]先下载固件包

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

2080041-20220630132411439-1547946846.png

2080041-20220630132630196-1217879102.png

[2]解压固件包

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

#参数解释
-b   "brand 品牌"
-sql "连接本地数据库"
-np  "代表没有并行操作"
-nk  "代表不提取内核"

2080041-20220630133558391-915117934.png

[3]识别CPU架构

接着是执行./script/getArch.sh脚本来获取路由器固件的CPU架构。

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

2080041-20220630134024865-1058934186.png

[4]存储数据库

用脚本./scripts/tar2db.py将固件镜像的信息保存到数据库

bash
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虚拟机的镜像。

bash
sudo ./scripts/makeImage.sh 1

#参数解释
"id这里为1"

运行时候报错了数值太大不可为算术进制的基MINIMUM_IMAGE_SIZE: 未绑定的变量

2080041-20220630134855253-81093081.png

测试下来发现是因为系统是中文的缘故,导致脚本里面这命令运行有问题。

2080041-20220630142950600-776691483.png

2080041-20220630143206795-1301984728.png

2080041-20220630143154038-1080476898.png

解决办法是在终端里面把local默认改成英文,或者你也可以把脚本改改让他获取到真实的tar包总数字也行,不过我怕可能会有其他中文引起问题。

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

改了之后成功获取到数字

2080041-20220630144515641-203812963.png

之后继续运行./scripts/makeImages.sh脚本来创建镜像。

2080041-20220630144651537-913706035.png

2080041-20220630144718996-1247135796.png

[6]设置网络接口

因为很多路由器固件他的后台地址ip都是固定的,比如tp-link大部分都是192.168.1.1,所以这一步主要的过程是从固件中获取到这些配置信息,然后设置网络接口。

bash
sudo ./scripts/inferNetwork.sh 1

2080041-20220630145435490-1261022159.png

日志会被记录到./scratch/1/qemu.final.serial.log下。

2080041-20220630145642731-1185594083.png

[7]运行仿真环境

最后在执行完上一步后,会在./scratch/1目录下多出一个run.sh,其中run.sh会创建一个新的虚拟网卡,并且将ip设置为提取到的固定ip网段。

bash
sudo ./scratch/1/run.sh

2080041-20220630150053310-858501827.png

2080041-20220630150109057-1859447804.png

[8]测试是否仿真成功

最后在在浏览器里面输入固定的ip,看看是否仿真成功。

2080041-20220630150421440-1242745121.png

2080041-20220630150604724-1773091345.png

用自带的./analyses/webAccess.py脚本进行目录扫描测试。

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

2080041-20220630151526576-2040063477.png

runExploits.py脚本自动进行metasploit的漏斗库进行测试。

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

2080041-20220630152625907-2080812982.png

用nmap进行端口扫描测试

bash
sudo nmap -O -sV 192.168.0.100

2080041-20220630153459067-1583735778.png

还有仿真路由器的一个好处是,我们不需要像真机那样,焊接UART接口连接TTL才能进入终端SHELL。

直接在之前运行sudo ./scratch/1/run.sh地方处的终端,随便输入什么然后回车,之后会让你输入用户名和密码,分别是rootpassword

2080041-20220630155614402-1530414269.png

2080041-20220630155706987-674322463.png

OK环境搭建差不多就先到这,感觉大家观看,欢迎来群里骂我菜鸡哈哈哈哈。

PWN菜鸡小分队

2080041-20220630155816244-951872424.png

参考链接:

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 万物互联

__EOF__


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK