[零基础学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上的文章: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 万物互联
[零基础学IoT Pwn] 环境搭建的更多相关文章
- [零基础学IoT Pwn] 复现Netgear WNAP320 RCE
[零基础学IoT Pwn] 复现Netgear WNAP320 RCE 0x00 前言: 这是[零基础学IoT Pwn]的第二篇,上篇我们搭好了仿真环境后,模拟运行了Netgear WNAP320固件 ...
- 【视频】零基础学Android开发:蓝牙聊天室APP(一)
零基础学Android开发:蓝牙聊天室APP第一讲 1. Android介绍与环境搭建:史上最高效Android入门学习 1.1 Google的大小战略 1.2 物联网与云计算 1.3 智能XX设备 ...
- 零基础学Java第四节(字符串相关类)
本篇文章是<零基础学Java>专栏的第四篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! String 本文章首发于公众号[编程攻略] 在Java中,我们经 ...
- Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建
目前,微软针对Windows IoT计划支持的硬件包括树莓派2,Minnow Board MAX 和Galileo (Gen 1和Gen 2).其中,Galileo (Gen 1和Gen 2)运行的是 ...
- 《Windows编程零基础学》第零节
首先很开心申请到了这一个专栏<Windows编程零基础学> 这是第一篇文章,在这里,我将讲述一些基础的知识. 什么是Windows编程 所谓Windows编程就是在Windows平台上开发 ...
- 【视频】零基础学Android开发:蓝牙聊天室APP(四)
零基础学Android开发:蓝牙聊天室APP第四讲 4.1 ListView控件的使用 4.2 BaseAdapter具体解释 4.3 ListView分布与滚动事件 4.4 ListView事件监听 ...
- 【视频】零基础学Android开发:蓝牙聊天室APP(二)
零基础学Android开发:蓝牙聊天室APP第二讲 2.1 课程内容应用场景 2.2 Android UI设计 2.3 组件布局:LinearLayout和RelativeLayout 2.4 Tex ...
- [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念
上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...
- [Python] 文科生零基础学编程系列三——数据运算符的基本类别
上一篇:[Python] 文科生零基础学编程系列二--数据类型.变量.常量的基础概念 下一篇: ※ 程序的执行过程,就是对数据进行运算的过程. 不同的数据类型,可以进行不同的运算, 按照数据运算类型的 ...
随机推荐
- 新手小白入门C语言第三章:关于数据类型
C 语言包含的数据类型 1.整型 整型分为整形常量和整形变量,常量就是我们平时所看到的准确的数字,例如:1.20.333等等,变量则按我的理解是我像内存去申请一个存储空间,告诉内存空间我申请了这个地方 ...
- javaWeb代码整理01-mysql
jar包: maven坐标: <dependency> <groupId>mysql</groupId> <artifactId>mysql-conne ...
- ArcGIS使用技巧(三)——关于投影
新手,若有错误还请指正! 简单记录一下自己所理解的ArcGIS中的有关投影的知识点. 在数据处理过程中,基本都是需要将相关数据放在同一投影坐标系下,需要用到投影转换工具,但若有的数据没有坐标信息,则首 ...
- Postman 正确使用姿势
前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介: Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将 ...
- Python学习笔记: 装饰器Decorator
介绍 装饰器是对功能函数的加强. 在原来的功能函数之外,另外定义一个装饰器函数,对原来的功能函数进行封装(wrapper)并在wrapper的过程中增加一些辅助功能. 应用场景 如下场景: 业务函数f ...
- Go学习-基本语法(一)
前言 一直对Service Mesh相关内容比较感兴趣,后面一路学习了Dcoker.Kubernetes等相关内容,可以说是对基本概念和使用有一定了解,随着开始学习一些相关的组件的时候,发现基本上全部 ...
- 题解0011:图书管理(哈希、vector)
信奥一本通--哈希 里的例题2 题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1456 题目描述:两个命令,一个是进一本名字为s的图书,一个是 ...
- Shell 脚本编程最佳实践
前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这个东 ...
- flask配置文件、路由设置、模板语法、请求与响应、session使用、闪现功能(flash)
今日内容概要 flask 配置文件 flask 路由系统 flask模板语法 请求与相应 session 闪现(flash翻译过来的) 内容详细 1.flask 配置文件 # django ---&g ...
- redis 基础1
1.redis是什么? redis是非关系型数据库key-value数据库,开源免费.是当下NoSQL技术之一 2.redis能干吗? (1)内存存储,可以持久化,redis存储在内存中,内存的话是断 ...