从零开始复现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系列路由器模拟环境

固件获取与处理

  1. 下载固件:

  2. 固件分离:

    • 使用binwalk工具分离固件
    • 安装必要依赖:
      sudo apt install lzop
      
    • 解压命令:
      binwalk -Me <固件文件名>
      
    • 解压成功后,文件系统通常在rootfs目录中

QEMU环境搭建

  1. 确定架构:

    • 检查bin/busybox文件架构:
      file bin/busybox
      
    • 确认是32位小端序(LSB)ARM架构
  2. 下载QEMU镜像:

    • 从以下地址下载必要的QEMU组件:
    • 需要下载的三个文件:
      • debian_wheezy_armhf_standard.qcow2
      • initrd.img-3.2.0-4-vexpress
      • vmlinuz-3.2.0-4-vexpress
  3. 启动脚本:

    #!/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
    

网络配置

  1. 创建网桥和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
    
  2. QEMU网络问题排查:

    • 检查/etc/network/interfaces配置,确保网卡名正确
    • 确保宿主机br0tap0配置正确
    • 如无DHCP服务,可手动分配IP:
      ifconfig eth0 192.168.1.100 netmask 255.255.255.0
      route add default gw 192.168.1.1
      

文件系统传输与准备

  1. 压缩并传输文件系统:

    tar czvf rootfs.tar.gz rootfs/
    scp rootfs.tar.gz root@<qemu-ip>:/root/
    
  2. 设置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
    

服务启动

  1. 启动必要服务:

    /etc/init.d/nginx start
    /etc/init.d/uwsgi start
    
  2. 服务启动问题解决:

  3. 防火墙配置:

    sudo iptables -A FORWARD -i br0 -j ACCEPT
    

漏洞分析

  1. Nginx配置分析:

    • 检查/etc/nginx/conf.d目录
    • 发现/api/operations/ciscosb-file:form-file-upload接口允许未授权文件上传
    • 前提是http_authorization字段不为空
  2. 文件上传流程:

    • 文件上传到/tmp/upload目录
    • 通过web.upload.conf配置转发到uwsgi处理
    • 最终调用/www/cgi-bin/upload.cgi
  3. 二进制逆向分析:

    • upload.cgi的main函数会调用授权检查函数
    • 存在system("mv -f a2 v8/a3")命令执行
    • 参数a2(文件路径)和a3(目标文件名)可控
    • /tmp/www/login.html是软链接,可被篡改

漏洞利用

  1. 动态调试准备:

    • 下载ARM架构的gdbserver: gdb-static-cross
    • 修改upload.cgi二进制文件,使其在第一个跳转处循环
    • 设置权限:
      chmod 777 /www/cgi-bin/upload.cgi
      
  2. 构造恶意请求:

    • 确保Authorization头部不为空
    • 上传文件到/tmp/upload目录
    • 通过调试确定上传后的文件名(如/tmp/upload/0000000001)
  3. 执行文件移动:

    • 触发mv -f /tmp/upload/0000000001 /tmp/www/login.html
    • 篡改后的登录页面将显示上传的内容
  4. 调试过程:

    • 启动gdbserver:
      gdbserver :1234 /www/cgi-bin/upload.cgi
      
    • 宿主机连接调试:
      gdb-multiarch -q
      target remote <qemu-ip>:1234
      

修复与恢复

  • 重启服务可恢复原始登录页面
  • 思科官方已发布补丁,建议用户及时更新固件

总结

通过本教程,我们完整复现了CVE-2023-20073漏洞的利用过程,从环境搭建到漏洞分析,再到最终的漏洞利用。此漏洞的关键在于未授权文件上传和不当的文件移动操作,导致攻击者可以篡改登录页面。

从零开始复现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 工具分离固件 安装必要依赖: 解压命令: 解压成功后,文件系统通常在 rootfs 目录中 QEMU环境搭建 确定架构 : 检查 bin/busybox 文件架构: 确认是32位小端序(LSB)ARM架构 下载QEMU镜像 : 从以下地址下载必要的QEMU组件: Index of /~aurel32/qemu/armhf 需要下载的三个文件: debian_wheezy_armhf_standard.qcow2 initrd.img-3.2.0-4-vexpress vmlinuz-3.2.0-4-vexpress 启动脚本 : 网络配置 创建网桥和tap设备 : QEMU网络问题排查 : 检查 /etc/network/interfaces 配置,确保网卡名正确 确保宿主机 br0 和 tap0 配置正确 如无DHCP服务,可手动分配IP: 文件系统传输与准备 压缩并传输文件系统 : 设置chroot环境 : 服务启动 启动必要服务 : 服务启动问题解决 : 参考ZIKH26师傅的解决方案: 从零开始复现CVE-2023-20073 | ZIKH26's Blog 防火墙配置 : 漏洞分析 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 二进制文件,使其在第一个跳转处循环 设置权限: 构造恶意请求 : 确保 Authorization 头部不为空 上传文件到 /tmp/upload 目录 通过调试确定上传后的文件名(如 /tmp/upload/0000000001 ) 执行文件移动 : 触发 mv -f /tmp/upload/0000000001 /tmp/www/login.html 篡改后的登录页面将显示上传的内容 调试过程 : 启动gdbserver: 宿主机连接调试: 修复与恢复 重启服务可恢复原始登录页面 思科官方已发布补丁,建议用户及时更新固件 总结 通过本教程,我们完整复现了CVE-2023-20073漏洞的利用过程,从环境搭建到漏洞分析,再到最终的漏洞利用。此漏洞的关键在于未授权文件上传和不当的文件移动操作,导致攻击者可以篡改登录页面。