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


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


    __EOF__

  • 本文作者: VxerLee
  • 本文链接: https://www.cnblogs.com/VxerLee/p/16427304.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Servlet学习(八):Session
    SwiftUI 动态岛开发教程之 07 Live Activities实时活动的要求和限制
    大模型引领未来:探索其在多个领域的深度应用与无限可能【第三章、医疗领域:大模型助力医疗健康创新】
    Python读取NC格式数据绘制风场和涡度图
    【Python笔记-设计模式】装饰器模式
    【sdx62】WCN685X将bdwlan.bin和bdwlan.txt相互转化操作方法
    Part2_扩展MATSIM_Subpart4_除个人车外的其他模式_第23章 动态运输服务
    Python中的map()、apply()、applymap()的区别
    Apache Atlas 是什么?
    Qt第二十六章:Nuitka打包教程
  • 原文地址:https://www.cnblogs.com/VxerLee/p/16427304.html