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

[零基础学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 万物互联

posted @ 2022-06-30 16:02  VxerLee昵称已被使用  阅读(1930)  评论(2编辑  收藏  举报