IOT环境搭建

一、固件处理

1.获取

要么提取,要么从官网下载

2.解包

一般常用binwalk,有时候可能涉及加密、获取组件相关问题

参考:D-Link DIR-815 路由器多次溢出漏洞分析 | Lantern’s 小站

二、环境搭建

1.简单启动

IOT相关的基本都是涉及嵌入式,不同架构,常见有arm、mips等,以mips为例子

参考:[原创] 从零开始复现 DIR-815 栈溢出漏洞-二进制漏洞-看雪论坛-安全社区|安全招聘|bbs.pediy.com

一般用qemu加上对应架构的**linux内核文件系统**来启动,比如如下脚本

1
2
3
4
5
qemu-system-mipsel \
-M malta -kernel vmlinux-3.2.0-4-4kc-malta \
-hda debian_squeeze_mipsel_standard.qcow2 \
-append "root=/dev/sda1 console=tty0" \
-nographic

就可以启动一个系统

2.网络配置

最好的肯定是模拟真实的环境,那模拟真实环境肯定就需要涉及到相关网络问题,这里就需要用到qemu一些网络的配置,参考:(46条消息) Linux 内核调试 七:qemu网络配置_lqonlylove的博客-CSDN博客_qemu 网络配置

结合一下,大概如下

  • 宿主机新建tap网络

    1
    2
    3
    sudo ip tuntap add dev tap0 mode tap
    sudo ip link set dev tap0 up
    sudo ip address add dev tap0 192.168.2.128/24

    这样就会出现如下网络后端

    image-20221202190656170

  • 然后如下启动脚本,加入网络配置

    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    qemu-system-mipsel \
    -M malta -kernel vmlinux-3.2.0-4-4kc-malta \
    -hda debian_squeeze_mipsel_standard.qcow2 \
    -append "root=/dev/sda1 console=tty0" \
    -net nic -net tap,ifname=tap0,script=no,downscript=no \
    -nographic
  • 启动之后,在qemu中设置相关IP地址,然后启用

    1
    2
    ip addr add 192.168.2.129/24 dev eth0
    ip link set eth0 up

    这样就可以有IP地址了,当然这些IP地址都是自己设置的

    image-20221202191218116

    这样就宿主机和qemu虚拟机就可以连通了,之后就是相关的服务启动了

    image-20221202191300164

3.常见配置

很多的IOT都是squashfs这个文件系统,binwalk解包出来会有一个squashfs-root文件夹,然后我们可以将该文件系统通过scp拷贝进启动的qemu虚拟机,之后进行简单的设置即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
scp -r ./squashfs-root root@ip:/root/

#进入qemu虚拟机,挂载系统的proc固件目录下的proc,防止程序在访问内核信息时找不到相关的而运行错误
mount --bind /proc squashfs-root/proc

#更换一下root目录,为文件系统的相关链接库做准备
chroot . bin/sh

#然后还需要改一下软连接、软路由啥的,比如DIR-645的漏洞,就需要创建一些软连接,如下
ln -s /htdocs/cgibin /htdocs/web/hedwig.cgi
ln -s /htdocs/cgibin /usr/sbin/phpcgi
ln -s /htdocs/cgibin /usr/sbin/hnap

#启动服务就行
/usr/bin/httpd -f http_conf

三、CGI配置

很多时候的嵌入式Web页面都是用CGI的,所以可以稍微学习一下相关CGI

1.环境搭建

这里就选择ubuntu自带的mini-httpd服务

1
sudo apt install mini-httpd

然后相关的配置在/etc/mini-httpd.conf,主要关注如下

image-20221207103833732

相关端口也是设置好

image-20221207103738798

然后需要在数据目录,即/var/www/html下新建cgi-bin目录,然后把相关CGI程序放到该cgi-bin目录下即可。

2.启动服务

如下,设置一下启动配置文件即可运行了

1
sudo mini_httpd -C /etc/mini-httpd.conf

然后即可访问到默认界面

image-20221207104046784

3.编写CGI

CGI和正常C程序是一样的,直接编译之后放到对应cgi-bin目录下即可,比如如下程序

image-20221207104240311

编译如下

1
gcc ./test.c -static -o test.cgi

访问效果如下

image-20221207104257725

这里需要注意要直接printf显示出来的话,需要设置相关的html格式,这里即可先进行了

1
printf( "Content-Type: text/plain\r\n\r\n" );

之后即可自己写一些CGI来玩耍了。

感觉CGI的很多的不安全性就是在于直接运行了一个可执行程序,而该可执行程序大多都是用C语言编写的,安全性可想而知。