使用qemu模拟仿真Cisco RV路由器

    Cisco RV系列路由器是Cisco公司开发的小型家用路由器,但是其相关模拟资料非常有限,因为其具有较多的依赖,于是利用时间,对Cisco RV系列路由器模拟进行了研究。模拟平台为qemu平台,用户级别和系统级别均进行了模拟实现。

一)固件解包

固件型号:RV34X-v1.0.03.18-2020-06-11-11-55-25-AM.img
解包方式:和传统的.bin固件不相同,通过binwalk解压img文件,会得到7z压缩格式的压缩包,继续对压缩包进行连续的解压,即可得到最后包含openwrt-rootfs.img的文件,利用binwalk解压该文件,即可获得文件系统。根据观察,也可知道该路由器固件基于openwrt开发。

binwalk -e openwrt-comcerto2000-hgw-rootfs-ubi_nand.img

二)qemu模拟api级别系统

chmod a+x bin/sh
chmod a+x bin/busybox
mount --bind /dev dev
mount --bind /proc proc
sudo chroot . ./qemu-arm-static bin/sh

10-1634875269.png

为了分析路由器的启动流程,我们进入etc/init.d文件夹下分析相关启动脚本, init.d目录包含许多系统各种服务的启动和停止脚本,里面的shell脚本能够响应start,stop,restart,reload命令来管理某个具体的应用。我们查看init.d文件夹下的各个脚本文件:

1-1634875270.png

我们发现init.d文件夹下有nginx服务,因此可以推测路由器的web服务框架为nginx框架,因此为了模拟路由器的web服务,我们利用脚本启动nginx服务。

cd etc/init.d/
./nginx start

发现nginx服务没有正常启动,其中报错信息如下,有多个依赖错误,需要我们依次解决。首先是缺少confd相关服务。

0-1634875270.png

我们利用全局搜索“confd”字符串:

grep -r "confd"

8-1634875270.png

发现在init.d的confd执行文件中进行了confd服务的启动,因此我们尝试启动confd服务:

./confd start

但是启动confd时发现错误:

1-1634875271.png

根据错误提示我们知道是ssl相关配置证书出现问题,因此我们继续查询ssl相关配置证书的文件,发现生成默认证书:generate_default_cert脚本。

1-1634875271-1.png

执行该脚本:

generate_default_cert

执行后发现提示缺少相关的uci文件:

9-1634875271.png

查找uci相关文件,定位到boot文件:

3-1634875271.png

因此我们知道,需要先进行boot启动:

./etc/init.d/boot

因此我们可以知道整体的模拟流程:

chmod -R 777 rootfs
cd rootfs
sudo mount --bind /proc proc
sudo mount --bind /dev dev
chroot . ./qemu-arm-static /bin/sh
/etc/init.d/boot boot
generate_default_cert
/etc/init.d/confd start
/etc/init.d/nginx start

当再次启动nginx服务时,发现端口被占用:

3-1634875272.png

怀疑是之前nginx服务关闭时出现问题,相关端口没有完全关闭。因此我们重启nginx服务。

./nginx stop
./nginx start

现在访问127.0.0.1,即可进入cisco登录界面。

0-1634875272.png

三)qeumu架构级模拟

查看架构,得知路由器为ARM小端架构,因此进行系统模拟,系统模拟启用脚本如下:

wget https://people.debian.org/~aurel32/qemu/armhf/debian_wheezy_armhf_standard.qcow2
wget https://people.debian.org/~aurel32/qemu/armhf/vmlinuz-3.2.0-4-vexpress
wget https://people.debian.org/~aurel32/qemu/armhf/initrd.img-3.2.0-4-vexpress
sudo apt-get install bridge-utils
sudo brctl addbr Virbr0
sudo ifconfig Virbr0 192.168.153.1/24 up
sudo tunctl -t tap0
sudo ifconfig tap0 192.168.153.11/24 up
sudo brctl addif Virbr0 tap0
#qemu启动
sudo qemu-system-arm -M vexpress-a9 -kernel vmlinuz-3.2.0-4-vexpress -initrd initrd.img-3.2.0-4-vexpress -drive if=sd,file=debian_wheezy_armhf_standard.qcow2 -append "root=/dev/mmcblk0p2" -net nic -net tap,ifname=tap0,script=no,downscript=no -nographic -s
#qemu网卡配置
ifconfig eth0 192.168.153.2/24 up
#上传根目录文件
scp -r rootfs/ root@192.168.153.2:~/
sudo mount --bind /proc proc
sudo mount --bind /dev dev
chroot . /bin/sh

文章来源:ChaMd5安全团队

本文章由作者:佐须之男 整理编辑,原文地址: 使用qemu模拟仿真Cisco RV路由器
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐