CVE-2020-7982 OpenWrt 远程命令执行漏洞学习(更新中)

news2024/9/21 18:45:27

OpenWrt是一款应用于嵌入式设备如路由器等的Linux操作系统。类似于kali等linux系统中的apt-get等,该系统中下载应用使用的是opgk工具,其通过非加密的HTTP连接来下载应用。但是其下载的应用使用了SHA256sum哈希值来进行检验,所以将下载到的数据包进行哈希值的比对即可知道是否下载的数据包被修改,所以理论上来说是没有安全隐患的。

学习参考:

OPENWRT中的远程命令执行漏洞(CVE-2020-7982)-安全客 - 安全资讯平台

Uncovering OpenWRT Remote Code Execution (CVE-2020-7982) | Mayhem

我们对于这个漏洞将进行几个步骤,具体的目录如下:

目录

分析学习漏洞以及利用条件

搭建OpenWrt环境并启动

模拟漏洞利用和攻击

漏洞的相关修复


分析学习漏洞以及利用条件

分析漏需要相应的源代码,参考源代码的地址为:

https://git.openwrt.org/?p=project/opkg-lede.git;a=blob;f=libopkg/pkg_parse.c;h=0baa4db396569be816386b50568c57e12d1cd98c;hb=80d161eb5b95ceb51db989196405eaa00950e03b#l312

也可以直接clone到本地学习代码:

git clone https://git.openwrt.org/project/opkg-lede.git

首先对于源代码中这个位置

针对哈希值采用了SHA256sum的情况,会调用函数pkg_set_sha256来进行处理。传递给该函数的字符串是字符串SHA256sum后面的字符串。该函数为:

https://git.openwrt.org/?p=project/opkg-lede.git;a=blob;f=libopkg/pkg.c;h=e5bfe6f61b67583c00e528fb381162ace308dc13;hb=80d161eb5b95ceb51db989196405eaa00950e03b#l244

其会继续使用函数checksum_hex2bin来进行校验处理。如果最终检验的结果是0或者文件的长度不为32,就会出现相应的错误,返回值为NULL,从而不会保存相应的哈希值。继续进入函数checksum_hex2bin:

https://git.openwrt.org/?p=project/opkg-lede.git;a=blob;f=libopkg/file_util.c;h=61ff736cd2c82a224cb10f48d14532b8224bd792;hb=80d161eb5b95ceb51db989196405eaa00950e03b#l234

其中函数isxdigit是检查其是否为十六进制数字字符,而isspace是检查是否是空格。在这个函数中,最开始指针s和指针src是指向同一个位置的,而如果src所指向的内容出现空格,其会循环直到把空格去掉。也就是说,如果存在空格字符,也就是字符串SHA256sum后面的字符串的开头是一个空格,src和s所指向的地址就不同了。但是在256行开始的循环中,判断用到的字符是isxdigit(s[0]),依然用的是指针s所指向的内容。所以如果存在空格,此时循环会直接终止,指针len的长度为0,然后函数执行完毕。

也就是说,通过上面这样的操作,我们就可以使checksum_hex2bin函数最终处理的len值长度为0,所以pkg_set_sha256函数也会返回NULL,最终其哈希值就没有被成功设置。

接下来包列表解析就算完成了,下一步会开始HTTP下载包,然后会进入相应的验证步骤。

首先要求下载的软件包必须等于列表中指定好的大小,如下:

https://git.openwrt.org/?p=project/opkg-lede.git;a=blob;f=libopkg/opkg_install.c;h=27c9484cfb8189e42cbc073eaa14a67c71c3507a;hb=80d161eb5b95ceb51db989196405eaa00950e03b#l1379

检查相应的文件大小。且还要求如果指定了软件的哈希值,则其也需要匹配:

但是由于刚才checksum_hex2bin没有对其进行hash编码,所以这里1416行的if语句被直接跳过,不进行哈希验证。这就是相应的漏洞存在的位置。

漏洞利用

为了利用这个漏洞,我们需要实现两件事。首先让被攻击的电脑下载时重定向到我们有恶意软件包的服务器,而不是直接与downloads.openwrt.org服务器进行通信,这个需要我们能够做到更改本地的DNS或者基于ARP欺骗等策略。其次,两重检查中,哈希检查已经被绕过了,就还剩一个数据包大小的检查需要应对。那么参考文章中提供了一种很有效的方法:

1.创建一个受损的软件包,但是其大小要小于原软件包

2.计算两者之间的大小差异

3.最受损包的末尾用0字节进行填充,使其相同大小

搭建OpenWrt环境并启动

模拟漏洞利用和攻击

漏洞的相关修复

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何将短信从 iPhone 传输到计算机 - 5 种灵活的方式

概括 与他人交流的多种方式之一是发送短信。对于那些包含珍贵回忆或重要信息的消息,您需要将它们发送到另一台设备(例如计算机)进行备份。将短信文件发送到计算机是保存宝贵数据的最佳方法之一。继续阅读本文,了解如何将短信从 i…

深度学习 | 复杂注意力神经网络 —— 大模型

前面讲解了注意力神经网络 一、BERT模型 1、什么是BERT 它是由谷歌在2018年提出的 双向Transformer 编码器模型。 Bidirectional Encoder Representations from Transformers. 主要使用了Transformer的编码器 Transformer 编码器堆叠; 预训练 精调两步结构。 BERT…

FreeBSD/Linux下的系统资源监视器排队队

bpytop bpytop 是一个基于 Python 的资源监视器,可以在 FreeBSD 上使用。它提供了对文件写入磁盘、网络、CPU 和内存占用的监视功能。 pkg install bpytop 或者用ports安装 cd /usr/ports/sysutils/bpytop/ make install clean bashtop bashtop 也是一个基于 P…

微服务如何做好监控

大家好,我是苍何。 在脉脉上看到这条帖子,说阿里 P8 因为上面 P9 斗争失败走人,以超龄 35 被裁,Boss 上找工作半年,到现在还处于失业中。 看了下沟通记录, 沟通了 1000 多次,但没有一个邀请投递…

AI网络爬虫:批量爬取电视猫上面的《庆余年》分集剧情

电视猫上面有《庆余年》分集剧情&#xff0c;如何批量爬取下来呢&#xff1f; 先找到每集的链接地址&#xff0c;都在这个class"epipage clear"的div标签里面的li标签下面的a标签里面&#xff1a; <a href"/drama/Yy0wHDA/episode">1</a> 这个…

Redis篇 浅谈分布式系统

分布式系统 一. 单机架构二.分布式系统引入三.引入更多的应用服务器四.读写分离五.引入缓存服务器六. 将数据库服务器拆分七.微服务架构 一. 单机架构 单机架构,就是用一台服务器,完成所有的工作. 这时候就需要我们引入分布式系统了. 分布式系统是什么含义呢?就是由一台主机服…

Webpack源码泄露到Vue快速入门

前言 1.webpack 源码泄露 1.1漏洞简介 1.2存在泄露的站点 1.3 如何判断是否存在漏洞 方法1: 方法2: 1.4.如何将js.map文件还原为项目文件 1. 4.1查看npm版本 1.4.2 安装reverse-sourcemap 1. 4.3.检查是否安装 ​1. 4.4 使用reverse-sourcemap进行js.map文件还原操作…

二、信号连接槽函数

需求&#xff1a;点击Button按钮&#xff08;下班&#xff09;&#xff0c;label显示淦饭 信号发出者&#xff1a;Button 发送的信号&#xff08;signals&#xff09;&#xff1a;被点击 信号接收者&#xff1a;label 信号的处理&#xff08;slots&#xff09;&#xff1a;显示…

Rocketmq集群再搭建

注意上面这个官方架构是 主从模式&#xff0c;还无法做到高可用&#xff0c;因为master节点宕机&#xff0c;从节点没法变成主节点&#xff0c;需要人工重启&#xff0c;够用了。 1. 先准备1台虚拟机&#xff0c;装好1台再克隆2台 根据上面的图&#xff0c;3台机器中有一台…

【再探】Java—泛型

Java 泛型本质是参数化类型&#xff0c;可以用在类、接口和方法的创建中。 1 “擦除式”泛型 Java的“擦除式”的泛型实现一直受到开发者的诟病。 “擦除式”的实现几乎只需要在Javac编译器上做出改进即可&#xff0c;不要改动字节码、虚拟机&#xff0c;也保证了以前没有使…

MVVM_MVVMLight架构

介绍 MVVMLight是一个实现MVVM模式的轻量级框架&#xff08;相对于Prism&#xff09;&#xff0c;能够更好的帮助我们开发WPF Windows Phone、Windows 8、SilverLight相关项目。 安装 在NuGet 工具箱上搜索MVVMLight进行下载 下载后它帮你生成ViewModel文件夹&#xff0c;里面…

深度学习之基于Tensorflow卷积神经网络脑肿瘤分类识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 脑肿瘤是医学领域的一个重要问题&#xff0c;对人类的健康构成了严重威胁。传统的脑肿瘤分类识别方法…

老的 IIS + MSSQL 网站迁移实例

因为公司需要从云上迁移回本地&#xff0c;但云平台不愿意导出虚拟机文件&#xff0c;所以公司需要手工迁移。 查看了一下云主机&#xff0c;安装了IIS&#xff0c;还有MSSQL数据库&#xff0c;于是在本地搭建好相同的OSIISMSSQL 环境&#xff0c;在把数据库导入完成、 IIS 搭建…

AcWing 217:绿豆蛙的归宿 ← 搜索算法

【题目来源】https://www.acwing.com/problem/content/219/【题目描述】 给出一个有向无环的连通图&#xff0c;起点为 1&#xff0c;终点为 N&#xff0c;每条边都有一个长度。 数据保证从起点出发能够到达图中所有的点&#xff0c;图中所有的点也都能够到达终点。 绿豆蛙从起…

iptables防火墙【☆】

一、防火墙的基础 防火墙分为硬件防火墙和软件防火墙&#xff0c;硬件防火墙有专门的设备&#xff1a;如国产华为、绿盟等&#xff0c;作为网关层做地址转换等安全防护。很多公司基本都会使用硬件防火墙做第一道防御&#xff0c;在核心业务上再添加软件防火墙提高安全性能…

Tailwind CSS快速入门

文章目录 初识安装Tailwindcss试用安装快速书写技巧扩展好处Todo 初识 只需书写 HTML 代码&#xff0c;无需书写 CSS&#xff0c;即可快速构建美观的网站 Tailwind CSS 是一个功能类优先的 CSS 框架&#xff0c;它通过提供大量的原子类&#xff08;utility classes&#xff09;…

国产操作系统上使用SQLynx连接数据库 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统上使用SQLynx连接数据库 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天我们将探讨如何在国产操作系统上使用SQLynx。这是一款功能强大的数据库管理工具&#xff0c;可以帮助用户高效地管理和操作数据库。本文将详细介绍…

《网关微服务技术架构:构建高效可扩展的服务网关》

随着微服务架构的流行&#xff0c;网关微服务作为微服务架构中的重要组成部分&#xff0c;扮演着连接客户端与后端微服务的关键角色。本文将深入探讨网关微服务的技术架构设计与实现&#xff0c;以及如何构建高效可扩展的服务网关。 ### 1. 网关微服务的作用与意义 网关微服务…

【Power Compiler手册】2.Power Compiler设计流程

当创建设计时,它从高层次的抽象转移到门级最终实现。功耗编译器工具在整个设计周期中,从RTL到门级,提供分析和优化。 有关设计流程的信息,请参见以下主题: • 设计周期中的功耗 • 功耗优化和分析流程 设计周期中的功耗 在每个抽象层次上,使用仿真、分析和优化来完善…

GMSL图像采集卡,适用于无人车、自动驾驶、自主机器、数据采集等场景,支持定制

基于各种 系列二代 G MS L 图像采集卡&#xff08;以下简称 二代图像采集卡&#xff09;是一款自主研发的一款基于 F P G A 的高速图像产品&#xff0c;二代图像采集卡相比一代卡&#xff0c;由于采用PCIe G en 3 技术&#xff0c;速度和带宽都相应的有了成 倍的提高。该图像…