【漏洞复现】CVE-2004-2761:使用弱哈希算法签名的 SSL 证书(SSL Certificate Signed Using Weak Hashing Algorithm)

news2024/9/22 4:17:32

概要:本次复现是针对编号为CVE-2004-2761的漏洞,由于条件有限,本次复现通过创建自签名证书进行操作。

问题描述:证书链中的 SSL 证书使用弱哈希算法进行签名。

1 环境搭建

本次复现环境在Linux平台下使用Nginx进行环境的搭建,通过Openssl组件生成自签名证书,并在Nginx配置文件中进行加载,最后使用Nussus社区版进行漏洞扫描测试。

类型名称版本
平台Ubuntu20.04.6 LTS
中间件Nginx1.18.0-0ubuntu1.4
证书工具Openssl1.1.1f-1ubuntu2.19
漏扫工具Nessus社区版10.5.4 (#13) LINUX
主机IP172.30.103.52/

1. 安装Nginx

sudo apt install nginx

安装好后访问地址:http://172.30.103.52,弹出Nginx欢迎页(如下图)即安装成功。
在这里插入图片描述
2. 安装openssl

sudo apt isntall opensll

安装完成后执行openssl version,弹出版本好即安装成功。
注意:这里我用的是1.1.1版本,在3.0.0以上的高版本并没有进行测试。高版本可能存在将一些弱密码配置的参数给删除的情况。

2 创建 SSL 证书

创建使用 sha1 散列的SSL证书
命令如下:

sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt -sha1 -days 365

以下是此命令每个部分的作用的细分:

  • -openssl:这是用于创建和管理 OpenSSL 证书、密钥和其他文件的基本命令行工具。

  • -req:此子命令指定我们要使用X.509证书签名请求 (CSR) 管理。“X.509”是 SSL 和 TLS对其密钥和证书管理所遵循的公钥基础设施标准。我们想创建一个新的 X.509 证书,所以我们使用这个子命令。

  • -x509:这通过告诉实用程序我们要制作自签名证书而不是像通常发生的那样生成证书签名请求来进一步修改前一个子命令。

  • -nodes:这告诉 OpenSSL 跳过使用密码保护我们的证书的选项。当服务器启动时,我们需要 Nginx 能够在没有用户干预的情况下读取文件。密码可以防止这种情况发生,因为我们必须在每次重新启动后输入它。

  • -days 365:此选项设置证书被视为有效的时间长度。我们在这里设置了一年。

  • -newkey rsa:2048:这指定我们要同时生成新证书和新密钥。我们没有在上一步中创建签署证书所需的密钥,因此我们需要将其与证书一起创建。该rsa:2048部分告诉它制作一个2048
    位长的 RSA 密钥。

  • -keyout:这一行告诉 OpenSSL 在哪里放置我们正在创建的生成的私钥文件。

  • -out:这告诉 OpenSSL 在哪里放置我们正在创建的证书。

  • -sha1:指定一种单向加密算法,这里选的是sha1.

命令执行后,系统会询问您一些有关服务器的问题,以便将信息正确嵌入到证书中。

最重要的一行是请求Common Name (e.g. server FQDN or YOUR name). 需要输入与您的服务器相关联的域名。

由于我们是自签名证书做漏洞复现测试,这里为了方便我是直接回车。并没有详细填写。

整个提示将如下所示:

#这是表示组织所在国家的两个字母的代码。
Country Name (2 letter code) [AU]:US

#这是组织所在州或省的全名。
State or Province Name (full name) [Some-State]:New York

#这是组织所在的城市。
Locality Name (eg, city) []:New York City

#这是颁发证书的组织或公司的法律名称。
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Bouncy Castles, Inc.

#此字段允许您指定组织内的特定部门或单元。
Organizational Unit Name (eg, section) []:Ministry of Water Slides

#这是将使用证书的服务器的完全限定域名(FQDN
Common Name (e.g. server FQDN or YOUR name) []:server_IP_address

#这是与负责服务器或证书的组织或个人相关的电子邮件地址。
Email Address []:admin@your_domain.com

输入完成后,创建的证书文件和私钥文件都将放置在该/etc/ssl目录的相应子目录中。
证书:/etc/ssl/certs/nginx-selfsigned.crt
私钥:/etc/ssl/private/nginx-selfsigned.key

3 配置 Nginx 以使用 SSL

1. 打开Nginx的默认配置文件。

sudo vim /etc/nginx/nginx.conf

嵌入以下内容

 server {
                listen 443 ssl;
                server_name localhost;
                ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
                ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
}

如图所示:
在这里插入图片描述
2. 检查配置文件是否正确。

sudo nginx -t 

输出如下则表示正确。

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test issuccessful

3. 重新加载nginx配置文件,使其生效。

sudo nginx -s reload

4 使用漏扫工具测试

  1. 打开浏览器,输入本机Nginx服务地址 https://172.30.103.52
    由于是自签名证书会收到警告,因为您创建的证书不是由您浏览器的受信任证书颁发机构之一签署的。直接点高级,然后访问即可。

在这里查看证书所使用的签名算法,可以看出正是我们之前创建的sha1.
在这里插入图片描述
在这里插入图片描述

2. 使用Nessus对172.30.103.52这个IP进行扫描。发现漏洞问题如下:
在这里插入图片描述在这里插入图片描述
到这里我们就算复现成功。

5 漏洞修复

1. 重新制作强密码哈希算法的证SSL证书,还是使用之前的命令。

sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt -sha256 -days 365

对比之前的命令主要是将-sha1替换为-sha256

2. 再次加载nginx配置。

nginx -s reload

3. 再次查看证书签名算法,已经变为sha256.
在这里插入图片描述
4. 再次使用nessus进行扫描。结果如下,可以看见弱密码的漏洞已经被修复。只剩下了自签名证书的漏洞问题。
在这里插入图片描述

本次复现漏洞已经全部结束,对您有帮助的可以点个关注。

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

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

相关文章

ModbusTCP转Profinet网关高低字节交换切换

背景:在现场设备与设备通迅之间通常涉及到从一种字节序(大端或小端)转换到另一种字节序。大端字节序是指高位字节存储在高地址处,而小端字节序是指低位字节存储在低地址处。在不动原有程序而又不想或不能添加程序下可选用ModbusTC…

Java安装及环境配置详细教程

1.1 下载 Java 安装包 官网下载链接[点击跳转] 建议下载202版本,因为202版本之后的 Oracle JDK 是商用收费的(个人使用不收费) 1.2 勾选红框中内容,然后点击下方下载 1.3 如果没有登录 Oracle 则会跳转到该页面,因为…

爬虫 Day2

resp.close()#关掉resp 一requests入门 (一) 用到的网页:豆瓣电影分类排行榜 - 喜剧片 import requestsurl "https://movie.douban.com/j/chart/top_list" #参数太长,重新封装参数 param {"type": "…

Python环境下基于机器学习(决策树,随机森林,KNN和SVM)的轴承故障诊断

故障特征提取就是从振动信号中提取时、频域统计特征,并利用能量值、谱峭度、幅值等指标,提取出故障特征集。对故障特征值进行全面准确地提取,是提高诊断精度的关键,也是整个滚动轴承故障诊断过程中较困难的部分。 一些常见的时域…

Redis 过期删除策略和内存淘汰策略有什么区别?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) Redis 的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然都是做删除的操作,但是触发的条件和使用的策略都是不同的。 今天就跟大家理一理&…

如何将OpenCV Java 与Eclipse结合使用

返回目录:OpenCV系列文章目录 上一篇:OpenCV-Java 开发简介 下一篇: 正文: 警告:本教程可以包含过时的信息。 从 2.4.4 版本开始,OpenCV 支持 Java。在本教程中,我将解释如何设置开发环境&a…

信息系统项目管理师019:存储和数据库(2信息技术发展—2.1信息技术及其发展—2.1.3存储和数据库)

文章目录 2.1.3 存储和数据库1.存储技术2.数据结构模型3.常用数据库类型4.数据仓库 记忆要点总结 2.1.3 存储和数据库 1.存储技术 存储分类根据服务器类型分为:封闭系统的存储和开放系统的存储。封闭系统主要指大型机等服务器。开放系统指基于包括麒麟、欧拉、UNIX…

使用 ONLYOFFICE API 构建 Java 转换器,在 Word 和 PDF 之间进行转换

文章作者:ajun 随着文档处理需求的增加,格式转换成为了一个重要的需求点。由于PDF格式具有跨平台、不易被篡改的特性,将Word格式(.docx)转换为PDF格式(.pdf)的需求尤为强烈。ONLYOFFICE作为一个强大的办公套件,提供了这样的转换功…

Verilog——信号类型

Verilog HDL 的信号类型有很多种,主要包括两种数据类型:线网类型 (net type) 和寄存器类型 ( reg type )。在进行工程设计的过程中也只会使用到这两个类型的信号。 4.1 信号位宽 定义信号类型的同时,必须定义好信号…

【C#语言入门】22. 接口、依赖反转、单元测试

【C#语言入门】22. 接口、依赖反转、单元测试 一、接口与单元测试 接口的产生:自底向上(重构),自顶向下(设计)C#中接口的实现(隐式,显式,多接口)语言对面向…

java的成员变量和局部变量

1、什么是成员变量和局部变量? 2、成员变量和局部变量区别 区别 成员变量 局部变量 类中位置不同 类中方法外 方法内或者方法声明上 内存中位置不同 堆内存 栈内存 生命周期不同 随着对象的存在而存在,随着对象的消失而消失 随着方法的调用而…

【目标检测】YOLOv2 网络结构(darknet-19 作为 backbone)

上一篇文章主要是写了一些 YOLOv1 的原版网络结构,这篇文章一样,目标是还原论文中原版的 YOLOv2 的网络结构,而不是后续各种魔改的版本。 YOLOv2 和 YOLOv1 不一样,开始使用 Darknet-19 来作为 backbone 了。论文中给出了 Darkne…

RK3568平台 多点触摸电容屏

一.input事件 对于所有的input设备,报告input事件时候都分这么几部分,首先在probe函数中设置设备发送的事件类型、按键类型,设置设备一些属性信息。然后在发送事件时候要根据probe的设置来发送事件,否则就会被判为无效忽略掉。  …

冒泡与二分法的爱恨纠葛

冒泡排序与二分法查找 前言一、冒泡排序?二分法查找?二、冒泡排序的原理及使用1.原理2.手写冒泡排序思路及实现代码讲解效果演示/运行结果 三、二分法查找的原理及使用1.原理2.二分法查找思路及实现运行结果 总结 前言 冒泡排序,编程中&…

怎么做好独立站的SEO优化

随着全球贸易的蓬勃发展,越来越多的企业开始关注外贸市场,并将目光投向了外贸网站。然而,在竞争激烈的外贸市场中,如何写出吸引人的文章,以及如何优化网站以在搜索引擎中脱颖而出,成为了外贸独立网站必须面…

基于spring boot的汽车4s店管理系统

摘 要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,汽车4s店管理系统当然不能排除在外。汽车4s店管理系统是在实际应用和软件工程的开发原理之上,运用java语言以及SpringBoot框架…

【Windows 常用工具系列 15 -- VMWARE ubuntu 安装教程】

文章目录 安装教程镜像下载 工具安装 安装教程 安装教程参考链接:https://blog.csdn.net/Python_0011/article/details/131619864 https://linux.cn/article-15472-1.html 激活码 VMware 激活码连接:https://www.haozhuangji.com/xtjc/180037874.html…

研究人员发现 OpenAI ChatGPT、Google Gemini 的漏洞

自 OpenAI 推出 ChatGPT 以来,生成式 AI 聊天机器人的数量及其在企业中的采用率在一年多时间里呈爆炸式增长,但网络安全专业人士的担忧也随之增加,他们不仅担心威胁组织对新兴技术的使用,还担心大型网络的安全性及模型&#xff08…

开设新量子计算中心!IonQ 全力加速量子商业化

内容来源:量子前哨(ID:Qforepost) 编辑丨慕一 编译/排版丨浪味仙 沛贤 深度好文:1000字丨8分钟阅读 近日,量子计算公司IonQ对外宣布,将在华盛顿开设一家新量子中心。公告里还提出&#xff0c…

【随笔】汇编(寄存器、内存模型、常用指令、语法)

文章目录 一、简介二、寄存器三、内存模型3.1 Heap3.2 Stack 四、指令4.1 示例4.2 语法4.3常用指令 一、简介 汇编语言(英语:assembly language)是任何一种用于电子计算机、微处理器、微控制器,或其他可编程器件的低级语言。在不…