01 引言
本篇文章主要是对Cisco RV340命令执行漏洞(CVE-2022-20707)进行的研究分析,尽管利用此漏洞需要身份验证,但可以通过CVE-2022-20705绕过现有的身份验证机制实现无条件的命令执行。历史相关的漏洞还包括:CVE-2020-3451、CVE-2021-1473、CVE-2021-1472,我们会逐一进行分析。
02 环境搭建
2.1 固件下载
可在Cisco官网下载到固件:
https://software.cisco.com/download/home/286287791/type/282465789/release/1.0.03.26?catid=268437899
2.2 固件解压
推荐使用7z-zip软件提取openwrt-comcerto2000-hgw-rootfs-ubi_nand.img
\RV34X-v1.0.03.22-2021-06-14-02-33-28-AM.img\RV34X-v1.0.03.22-2021-06-14-02-33-28-AM\fw.gz\fw\openwrt-comcerto2000-hgw-rootfs-ubi_nand.img

将得到的ubi格式img用binwalk进行解压,但这里有点小坑,binwalk会把软链接给重置为/dev/null。

笔者这里是通过修改binwalk代码的方式强行绕过了此逻辑:
binwalk/modules/extractor.py

2.3 qemu系统模拟
修改Ubuntu 主机的网络配置,修改系统的网络接口配置文件/etc/network/interfaces。

编辑/etc/qemu-ifup

具体网络配置可以参考:
https://blog.csdn.net/QQ1084283172/article/details/69378333
重启一下虚拟机,因为我Ubuntu 主机的网卡是nat的,桥接就是桥接到nat网络里边去。
下载对应的debian qemu镜像
https://people.debian.org/~aurel32/qemu/armhf/

启动qemu虚拟机:
1 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 console=tty0" -net nic -net tap -nographic
将解出来的固件传到qemu虚拟机:
1 scp -r 1.tar root@192.168.250.173:/root/
解压并切入chroot环境:
1 tar zxvf 1.tarchmod -R 777 rootfs2 cd rootfs3 sudo mount --bind /proc proc4 sudo mount --bind /dev dev5 chroot . /bin/sh
逐步启动ngix服务:
1 /etc/init.d/boot boot2 generate_default_cert3 /etc/init.d/confd start4 /etc/init.d/nginx start
尝试访问web页面:

至此,模拟环境搭建完成,可以开始进行漏洞测试。
2.4 调试技巧
因为cgi是以uwsgi子进程的形式启动来处理请求,一次请求一个进程,使用gdbserver并不好attach。故直接修改upload.cgi二进制文件,在main函数入口位置修改汇编为自己跳自己,弄个死循环:

这样进程就会一直卡住,等到gdbserver attach上,再通过修改内存方式,修改代码为原程序逻辑:



03 CVE-2022-20705
此漏洞是因nginx配置不当导致的授权绕过漏洞,是命令执行漏洞(CVE-2022-20707)利用的前置条件。
命令执行漏洞需要用户能访问upload页面,这本是一个需要鉴权的页面。查看nginx配置文件以及配置引用关系,定位到/upload路径的访问是由/var/nginx/conf.d/web.upload.conf控制
1 location / form - file - upload {2 include uwsgi_params;3 proxy_buffering off;4 uwsgi_modifier1 9;5 uwsgi_pass 127.0.0.1 : 9003;6 uwsgi_read_timeout 3600;7 uwsgi_send_timeout 3600;8 }9 location / upload { set $deny 1;10 if ( - f / tmp / websession / token /

及关联历史漏洞分析&spm=1001.2101.3001.5002&articleId=124840789&d=1&t=3&u=787100f55033477eab391280d27ae303)
1054

被折叠的 条评论
为什么被折叠?



