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

0x00 前言

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

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

0x01 设备准备

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

万用表

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

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地方处的终端,随便输入什么然后回车,之后会让你输入用户名和密码,分别是rootpassword

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] 环境搭建的更多相关文章

  1. [零基础学IoT Pwn] 复现Netgear WNAP320 RCE

    [零基础学IoT Pwn] 复现Netgear WNAP320 RCE 0x00 前言: 这是[零基础学IoT Pwn]的第二篇,上篇我们搭好了仿真环境后,模拟运行了Netgear WNAP320固件 ...

  2. 【视频】零基础学Android开发:蓝牙聊天室APP(一)

    零基础学Android开发:蓝牙聊天室APP第一讲 1. Android介绍与环境搭建:史上最高效Android入门学习 1.1 Google的大小战略 1.2 物联网与云计算 1.3 智能XX设备 ...

  3. 零基础学Java第四节(字符串相关类)

    本篇文章是<零基础学Java>专栏的第四篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! String 本文章首发于公众号[编程攻略] 在Java中,我们经 ...

  4. 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)运行的是 ...

  5. 《Windows编程零基础学》第零节

    首先很开心申请到了这一个专栏<Windows编程零基础学> 这是第一篇文章,在这里,我将讲述一些基础的知识. 什么是Windows编程 所谓Windows编程就是在Windows平台上开发 ...

  6. 【视频】零基础学Android开发:蓝牙聊天室APP(四)

    零基础学Android开发:蓝牙聊天室APP第四讲 4.1 ListView控件的使用 4.2 BaseAdapter具体解释 4.3 ListView分布与滚动事件 4.4 ListView事件监听 ...

  7. 【视频】零基础学Android开发:蓝牙聊天室APP(二)

    零基础学Android开发:蓝牙聊天室APP第二讲 2.1 课程内容应用场景 2.2 Android UI设计 2.3 组件布局:LinearLayout和RelativeLayout 2.4 Tex ...

  8. [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念

    上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...

  9. [Python] 文科生零基础学编程系列三——数据运算符的基本类别

    上一篇:[Python] 文科生零基础学编程系列二--数据类型.变量.常量的基础概念 下一篇: ※ 程序的执行过程,就是对数据进行运算的过程. 不同的数据类型,可以进行不同的运算, 按照数据运算类型的 ...

随机推荐

  1. 1903021116-吉琛-Java第四周作业-程序编写

    项目 内容 课程班级博客链接 19级信计班 这个作业要求链接 Java分支语句学习 https://edu.cnblogs.com/campus/pexy/19xj/homework/12563 我的 ...

  2. 面试突击39:synchronized底层是如何实现的?

    想了解 synchronized 是如何运行的?就要先搞清楚 synchronized 是如何实现? synchronized 同步锁是通过 JVM 内置的 Monitor 监视器实现的,而监视器又是 ...

  3. cookie和localstorge、sessionStorge的区别

    一.背景由来 cookie原来是用来网络请求携带用户信息的,只不过在HTML5出现之前,前端没有本地存储的方法,只能使用cookie代替 localstorge.sessionStorge是html5 ...

  4. 将python脚本打包为exe可执行文件

    技术背景 在很多情况下,编程人员是在Linux环境下完成的编程任务,但是更多的使用人员是在Windows环境下的,比方说,在参考链接1的文章中提到: 那么我们就不得不考虑一个环境转化的问题.pytho ...

  5. 5个容易忽视的PostgreSQL查询性能瓶颈

    PostgreSQL 查询计划器充满了惊喜,因此编写高性能查询的常识性方法有时会产生误导.在这篇博文中,我将描述借助 EXPLAIN ANALYZE 和 Postgres 元数据分析优化看似显而易见的 ...

  6. CS基础课不完全自学指南

    本文讲的是计算机学生怎么自学专业课,说长点就是该如何借助网络上已有的高质量学习资源(主要是公开课)来系统性的来点亮自己的CS技能树.这篇文章完全就是一篇自学性质的指南,需要对编程充满热情,起码觉得编程 ...

  7. Linux网卡绑定bond0-实验

    虚拟机添加网卡 ip addr 查看新增的网卡是否读取 添加bonding接口 [root@centos8~]$nmcli con add type bond con-name mybond0 ifn ...

  8. 服务器 CPU 100% 异常排查实践与总结

    一个执着于技术的公众号 问题背景 昨天下午突然收到运维邮件报警,显示数据平台服务器cpu利用率达到了98.94%,而且最近一段时间一直持续在70%以上,看起来像是硬件资源到瓶颈需要扩容了,但仔细思考就 ...

  9. 流量录制回放工具jvm-sandbox-repeater入门篇——录制和回放

    在上一篇文章中,把repeater服务部署介绍清楚了,详细可见:流量录制回放工具jvm-sandbox-repeater入门篇--服务部署 今天在基于上篇内容基础上,再来分享下流量录制和回放的相关内容 ...

  10. 【java并发编程】ReentrantLock 可重入读写锁

    目录 一.ReentrantLock可重入锁 二.ReentrantReadWriteLock读写锁 三.读锁之间不互斥 欢迎关注我的博客,更多精品知识合集 一.ReentrantLock可重入锁 可 ...