CVE-2023-20073

前言

​ 开始学习iot的漏洞挖掘,第一次复现cve漏洞
[原创]从零开始复现 CVE-2023-20073-智能设备-看雪-安全社区|安全招聘|kanxue.com

固件获取

Software Download - Cisco Systems

从官网获取RV340 的固件

固件下载

binwalk 解压

binwalk -Me xxx.img

binwalk解压

解压成功

解压

但是和文章一样出现了warnning

warning

配置起来有点麻烦,因为binwalk 现在很难搞,~~所以我决定直接手动修改这个链接

1
ln -sf /tmp var

事实证明这样做是不行的,后续仿真时会失败。可能是因为还有其他的软连接被破坏了,所以只能去修改binwalk 的文件内容。因为我是用apt-get install 安装的binwalk ,所以我只能通过找到已经安装的binwalk 的文件位置来修改。
binwalk

我这里是1008行,把这里修改为if 0 and not

修改

问题解决

结果

qume 与 主机连接

先下载后面的 东西,在运行这个脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash

# 使用 iproute2 替代 brctl
PHY_IFACE="ens33"
BRIDGE="br0"
TAP_IFACE="tap0"

# 创建网桥
sudo ip link add name $BRIDGE type bridge
sudo ip link set $BRIDGE up

# 配置物理接口
sudo ip link set $PHY_IFACE promisc on
sudo ip link set $PHY_IFACE master $BRIDGE

# 创建 TAP 设备
sudo ip tuntap add mode tap user root name $TAP_IFACE
sudo ip link set $TAP_IFACE promisc on
sudo ip link set $TAP_IFACE master $BRIDGE
sudo ip link set $TAP_IFACE up

# 获取 DHCP
sudo dhclient -v $BRIDGE

# 验证配置
echo -e "\n=== 网络配置验证 ==="
bridge link show $BRIDGE
ip addr show $BRIDGE

busybox

在解压出来的文件系统下,查看busybox的信息

busybox

下载需要的文件

1
2
3
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

启动qemu

先执行

qemu-img resize debian_wheezy_armhf_standard.qcow2 32G

boot.sh

1
2
3
4
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 -smp 4

然后sudo ./boot.sh

启动

用户密码都是root

往虚拟机中传刚才的文件,先打包在传送

tar -czvf rootfs.tar.gz rootfs

sudo scp -r rootfs.tar.gz root@192.168.225.134:/root/rootfs.tar.gz

tar -xzvf rootfs.tar.gz

仿真隔离

1
2
3
4
5
chmod -R 777 rootfs
cd rootfs/
mount --bind /proc proc
mount --bind /dev dev
chroot . /bin/sh

启动Nginx

1
2
3
4
/etc/init.d/boot boot
generate_default_cert
/etc/init.d/confd start
/etc/init.d/nginx start

访问

网页

漏洞分析

rest.url.conf

rest.url.conf
upload_pass ,后台会用/form-file-upload 继续处理
upload_store,文件会上传到/tmp/upload
upload_store_access,设置了文件的权限
upload_set_form_field xxx 设置了文件的相关字段,文件名、文件类型、文件路径、md5值、文件大小

web.upload.conf

web.upload.conf
这里通过uwsgi_pass,将请求转发,最后会执行 upload.cgi

upload.cgi

sub_115EC

sub_115ec
这里最终会执行system函数,而sprintf中的三个参数都是可以控制的,只要我们把s_1设置为刚才上传的文件路径,_tmp_firmware控制为/tmp/www(要把s1控制为Portal) , s_2控制位login.html就可以篡改登录界面

main

main

根据上面的分析,也就是v17要控制为Portal,V16要控制为刚上传的文件路径,v18要是login.html

main

v17对应v30,v16对应v29,v18对应v31