[零基础学IoT Pwn] 环境搭建 - VxerLee昵称已被使用
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 前言
这里指的零基础其实是我们在实战中遇到一些基础问题,再相应的去补充学习理论知识,这样起码不会枯燥。
本系列主要是利用网上已知的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 万物互联
__EOF__
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK