从零开始复现CVE-2023-20073
字数 1597 2025-08-29 22:41:32
从零开始复现CVE-2023-20073漏洞教学文档
漏洞概述
CVE-2023-20073是思科(Cisco)多款路由器(RV340、RV340W、RV345和RV345P)中存在的未授权文件上传漏洞。攻击者可以通过上传文件到/tmp/upload目录并配合upload.cgi实现存储型XSS攻击,最终可篡改设备登录页面。
复现环境准备
- 物理机: Windows 11
- 宿主机: Ubuntu 22.04
- 目标设备: 思科RV系列路由器模拟环境
固件获取与处理
-
下载固件:
- 从思科官网下载对应型号的固件: Software Download - Cisco Systems
-
固件分离:
- 使用
binwalk工具分离固件 - 安装必要依赖:
sudo apt install lzop - 解压命令:
binwalk -Me <固件文件名> - 解压成功后,文件系统通常在
rootfs目录中
- 使用
QEMU环境搭建
-
确定架构:
- 检查
bin/busybox文件架构:file bin/busybox - 确认是32位小端序(LSB)ARM架构
- 检查
-
下载QEMU镜像:
- 从以下地址下载必要的QEMU组件:
- 需要下载的三个文件:
debian_wheezy_armhf_standard.qcow2initrd.img-3.2.0-4-vexpressvmlinuz-3.2.0-4-vexpress
-
启动脚本:
#!/bin/bash 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 console=ttyAMA0" -net nic -net tap,ifname=tap0,script=no,downscript=no -nographic
网络配置
-
创建网桥和tap设备:
sudo brctl addbr br0 sudo ip tuntap add tap0 mode tap sudo brctl addif br0 tap0 sudo ip link set br0 up sudo ip link set tap0 up sudo dhclient br0 -
QEMU网络问题排查:
- 检查
/etc/network/interfaces配置,确保网卡名正确 - 确保宿主机
br0和tap0配置正确 - 如无DHCP服务,可手动分配IP:
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 route add default gw 192.168.1.1
- 检查
文件系统传输与准备
-
压缩并传输文件系统:
tar czvf rootfs.tar.gz rootfs/ scp rootfs.tar.gz root@<qemu-ip>:/root/ -
设置chroot环境:
mkdir /root/rootfs tar xzvf rootfs.tar.gz -C /root/rootfs mount -t proc proc /root/rootfs/proc mount -t devtmpfs dev /root/rootfs/dev chroot /root/rootfs /bin/sh
服务启动
-
启动必要服务:
/etc/init.d/nginx start /etc/init.d/uwsgi start -
服务启动问题解决:
- 参考ZIKH26师傅的解决方案: 从零开始复现CVE-2023-20073 | ZIKH26's Blog
-
防火墙配置:
sudo iptables -A FORWARD -i br0 -j ACCEPT
漏洞分析
-
Nginx配置分析:
- 检查
/etc/nginx/conf.d目录 - 发现
/api/operations/ciscosb-file:form-file-upload接口允许未授权文件上传 - 前提是
http_authorization字段不为空
- 检查
-
文件上传流程:
- 文件上传到
/tmp/upload目录 - 通过
web.upload.conf配置转发到uwsgi处理 - 最终调用
/www/cgi-bin/upload.cgi
- 文件上传到
-
二进制逆向分析:
upload.cgi的main函数会调用授权检查函数- 存在
system("mv -f a2 v8/a3")命令执行 - 参数
a2(文件路径)和a3(目标文件名)可控 /tmp/www/login.html是软链接,可被篡改
漏洞利用
-
动态调试准备:
- 下载ARM架构的gdbserver: gdb-static-cross
- 修改
upload.cgi二进制文件,使其在第一个跳转处循环 - 设置权限:
chmod 777 /www/cgi-bin/upload.cgi
-
构造恶意请求:
- 确保
Authorization头部不为空 - 上传文件到
/tmp/upload目录 - 通过调试确定上传后的文件名(如
/tmp/upload/0000000001)
- 确保
-
执行文件移动:
- 触发
mv -f /tmp/upload/0000000001 /tmp/www/login.html - 篡改后的登录页面将显示上传的内容
- 触发
-
调试过程:
- 启动gdbserver:
gdbserver :1234 /www/cgi-bin/upload.cgi - 宿主机连接调试:
gdb-multiarch -q target remote <qemu-ip>:1234
- 启动gdbserver:
修复与恢复
- 重启服务可恢复原始登录页面
- 思科官方已发布补丁,建议用户及时更新固件
总结
通过本教程,我们完整复现了CVE-2023-20073漏洞的利用过程,从环境搭建到漏洞分析,再到最终的漏洞利用。此漏洞的关键在于未授权文件上传和不当的文件移动操作,导致攻击者可以篡改登录页面。