DDDD
近期准备西湖论剑的比赛,之前对IOT
安全这方面有着一丢丢的研究,这篇来主要讲一下qemu
模拟,以及我遇到的槽点,特别是针对于使用WSL
的
为什么要用qemu
模拟
笔者之前在复现路由器等漏洞的时候,都是用qemu
的用户模拟,我们需要去patch
一些东西才可以完成模拟,并且在qemu
的用户模拟下,我们不能完完全全的模拟真实的环境
因此我们可能会用到工具类似于FirmAE
等等,但是这类工具模拟出来的系统有时候并不能完全可以使用,我们可以进入系统内解决,但有时候系统都进不去还是蛮搞的,因此研究qemu
的系统模拟就显得尤为重要了
网上常见的qemu
模拟
基本上是直接用安装好系统的磁盘占大多,主要是图个方便,可以参考这个文章
但是抱着如果以后的固件系统的glibc
版本会越来越高,最好是学习一下怎么安装一个qemu
系统
安装系统
这里是参考这个大佬的文章
首先我们肯定是要安装qemu
的
1 | sudo apt-get install qemu-system-mipsel qemu-utils |
下载系统必要文件
我们可以通过这个网址去看现在的debian
的系统,我们主要也是下载最重要的安装&启动文件,这里我们用wget
下载下来
1 | wget http://ftp.debian.org/debian/dists/stable/main/installer-mipsel/current/images/malta/netboot/initrd.gz |
1 | wget http://ftp.debian.org/debian/dists/stable/main/installer-mipsel/current/images/malta/netboot/vmlinuz-6.1.0-18-4kc-malta |
创建磁盘
这里这个磁盘也就是我们安装系统的系统盘
1 | qemu-img create -f qcow2 debian.qcow2 8g |
安装 Debian
MIPSEL
这里我们需要将上述的三个文件放到通过文件夹下,以便我们启动安装
1 | qemu-system-mipsel -M malta \ |
安装过程基本上也跟参考文章一致,可以自己去对照操作,这里不重复搬运
安装 bootloader
这里实际上就是提取我们启动系统磁盘的文件,在我们创建的磁盘的/boot
文件下
提取文件
因为这里qemu
用qcow2
的格式的磁盘,我们如果要挂在磁盘还需要其他的操作
这里参考文章有点小小错误就是把磁盘以
img
结尾,导致我以为我一直没有安装成功
挂载磁盘
1 | sudo modprobe nbd mac_part=16 |
提取
1 | cp -r /tmp/temp/boot/initrd.img-5.10.0-18-4kc-malta . |
取消挂载
1 | sudo umount /tmp/temp |
正式启动虚拟机
start.sh
脚本
1 | sudo qemu-system-mipsel -M malta \ |
配置网络
由于也是接触不久
qemu
,不算是最佳方案去联网,参考文章
安装工具
1 | sudo apt-get install uml-utilities |
创建一张虚拟TUN网卡
1 | sudo tunctl -t tap0 -u root # 这里可以是你自己的用户名 |
将网卡设置为任何人都有权限使用:
1 | sudo chmod 0666 /dev/net/tun |
设置ip
地址
不能跟自己本地的任何ip
有冲突
1 | sudo ifconfig tap0 192.168.2.1 up |
为虚拟机开启IP
数据包转发
1 | echo 1 > /proc/sys/net/ipv4/ip_forward #只能在root环境下执行 |
这里我们可以直接修改系统配置,以后就不用进入root去执行了
1 | vim /etc/sysctl.conf |
现在我们的启动脚本
1 | sudo qemu-system-mipsel -M malta \ |
槽点
我们还需要进入到qemu
系统里面去配置IP
,而且容易掉ip
1 | ip addr add 192.168.2.2/24 dev <虚拟的内部自己网卡> |
然后我们还需要设置网关
1 | ip route add default via 192.168.2.1 |
这样应该可以联网了 (butWSL
不行)
不愧是之前学网络的,研究了半天发现,qemu
出去的包是没有问题的,但是一旦出去了WSL
网络,就回不来,那么真相只有一个!
windows
没有对应的路由!!!!!!!
1 | route add 192.168.2.0 mask 255.255.255.0 172.20.96.1 |
这里自己需要对应修改qemu
的网段,以及wsl
的网关,就是windows
连wsl
的ip
地址
最后
可以直接在qemu
的启动脚本上配置网络
1 | vim /etc/qemu-ifup |
1 | tunctl -u root -t $1 |