Linux下快速确定目标服务器支持哪些协议和密码套件

news2024/9/25 7:15:22

实现原理是利用TLS协议的特点和握手过程来进行测试和解析响应来确定目标服务器支持哪些TLS协议和密码套件。

在TLS握手过程中,客户端和服务器会协商并使用相同的TLS协议版本和密码套件来进行通信。通过发送特定的握手请求并分析响应,可以确定目标服务器所支持的TLS协议和密码套件等信息。

使用namp工具快速确定目标服务器支持哪些协议和密码套件

在Linux下,可以使用nmap工具来快速确定目标服务器支持哪些TLS协议和密码套件。具体实现如下:

  1. 安装nmap工具:首先需要在Linux系统上安装nmap工具。可以通过包管理器(如apt、yum等)进行安装,或者从官方网站下载并编译安装。

  2. 运行nmap扫描:使用以下命令运行nmap扫描,以获取目标服务器支持的TLS协议和密码套件信息:

nmap --script ssl-enum-ciphers -p 443 <目标IP地址>

其中,--script ssl-enum-ciphers表示使用ssl-enum-ciphers脚本,该脚本可以列出目标服务器支持的TLS协议和密码套件;-p 443表示只扫描目标服务器的443端口(HTTPS默认端口);<目标IP地址>是目标服务器的IP地址。

nmap扫描完成后,会输出目标服务器支持的TLS协议和密码套件信息。可以根据需要对结果进行分析和处理。

sslcan工具快速定位目标服务器支持哪些协议和密码套件

sslscan工具的主要工作原理是:通过创建多个HTTPS连接来试探服务器支持的加密方式。当使用HTTPS连接到服务器时,会交换双方所支持的加密方式,之后选择双方都能够支持的方式进行通信。

在这个过程中,如果https服务器配置不当,就会存在MITM(中间人)攻击的风险,攻击者可能利用客户端支持的较弱加密算法来欺骗服务器。例如,如果使用的是SSLV2的56位DES加密方式,那么一旦攻击者成功拦截并使用了这种加密流量,他们可能在很短的时间内就能够破解加密密钥。

此外,值得注意的是,sslscan还具有检测heartbleed漏洞的功能。Heartbleed是一个出现在OpenSSL TSL中的安全漏洞,它源于一个缓冲区的错误处理,这个错误处理允许从内存中读取数据。所以,除了探测服务器支持的协议和密码套件外,sslscan还能帮助发现并防备一些潜在的安全风险。

运行sslcan扫描:使用以下命令运行sslcan扫描,以获取目标服务器支持的协议和密码套件信息:

sslscan -h <目标IP地址>

其中,-h表示使用HTTP方式进行扫描;<目标IP地址>是目标服务器的IP地址。sslcan扫描完成后,会输出目标服务器支持的协议和密码套件信息。可以根据需要对结果进行分析和处理。

openssl ciphers密码套件

可以使用OpenSSL工具来查看Linux系统支持的TLS密码套件列表:

openssl ciphers -V | column -t

将显示您的Linux系统支持的所有TLS密码套件的列表

运行openssl扫描:使用以下命令运行openssl扫描,以获取目标服务器支持的协议和密码套件信息:

openssl s_client -connect <目标IP地址>:443 -cipher <密码套件>

其中,-connect <目标IP地址>:443表示连接到目标服务器的443端口;-cipher <密码套件>表示指定要测试的密码套件。

客户端和服务器不支持SSL协议或密码套件,会怎么样?

如果客户端和服务器不支持SSL协议或密码套件,可能会导致通信过程中数据的安全性受到威胁。在这种情况下,应该考虑以下解决方案:

  1. 升级客户端和服务器端的软件版本,以确保它们支持最新的SSL协议和密码套件。

  2. 如果无法立即升级软件版本,可以考虑使用其他加密协议,如TLS(传输层安全性)来替代SSL协议。

  3. 对于服务器端,可以考虑配置SSL证书和相应的密码套件,以确保通信过程中的数据安全。

  4. 对于客户端,可以考虑配置相应的安全选项,确保能够与服务器端建立安全的连接。

  5. 如果以上方法都无法解决问题,建议寻求专业的网络安全团队或厂商的帮助,以确保客户端和服务器的通信安全。

Linux下快速确定目标服务器支持哪些协议和密码套件(shell脚本实现)

#!/bin/bash

...
TLS_VERSIONS_WITH_CIPHER=(ssl2 ssl3 tls1 tls1_1 tls1_2)
TLS_VERSIONS_WITH_CIPHERSUITES=(tls1_3)

# 删除`openssl的本地副本不支持的旧TLS版本`
for (( i=${#TLS_VERSIONS_WITH_CIPHER[@]}-1; i>=0; i-- )); do
  if ! grep -qxF -- "-${TLS_VERSIONS_WITH_CIPHER[$i]}" <(openssl s_client -help 2>&1 | awk '{print $1}'); then
    unset "TLS_VERSIONS_WITH_CIPHER[$i]"
  fi
done

# TLS_VERSIONS_WITH_CIPHERSUITES创建反向查找数组
...

# 查找任何密码{,suite}名称的最大长度
MAX_NAME_LEN=$(openssl ciphers ALL:COMPLEMENTOFALL | tr ':' '\n' | wc -L)

printf "%*s" $((MAX_NAME_LEN - 2)) ""
for tlsv in "${TLS_VERSIONS_WITH_CIPHER[@]}" "${TLS_VERSIONS_WITH_CIPHERSUITES[@]}"; do
  printf "%10s" "$tlsv"
done
echo
for cipher in $(openssl ciphers 'ALL:COMPLEMENTOFALL' | sed 's/:/ /g'); do
#for cipher in $(openssl ciphers 'RSA-PSK-AES256-GCM-SHA384' | sed 's/:/ /g'); do
  tput sc
  found=0
  printf "%*s" "$MAX_NAME_LEN" "$cipher"
  if ! openssl ciphers "$cipher" >/dev/null 2>/dev/null; then
...
  else
    cipherarg=("-cipher" "$cipher")
    APPLICABLE_TLS_VERSIONS=("${TLS_VERSIONS_WITH_CIPHER[@]}")
  fi
  for tlsv in "${APPLICABLE_TLS_VERSIONS[@]}"; do
    if [ "${TLS_VERSIONS_WITHOUT_CIPHERS+0}" = 1 ]; then
      rv=-1
    else
      ...
      rv=$?
    fi
    printf "%5s%1s%4s" "" "$([ $rv -eq 0 ] && echo "√" || :)" ""
    [ $rv -eq 0 ] && found=1
  done
  if [ $found -eq 0 ]
    then tput rc
    else echo
  fi
done
printf "%78s" " "
tput rc

编译运行:

If you need the complete source code, please add the WeChat number (c17865354792)

总结

对目标服务器开放的端口进行详细扫描,以确定使用的协议。例如,通过连接到80端口可以确定使用HTTP协议,通过连接到443端口可以确定使用HTTPS协议。对HTTPS协议的端口进行进一步扫描,以确定服务器支持的密码套件。可以使用工具如sslscan或openssl s_client,通过连接到目标服务器的443端口,并通过协商SSL/TLS握手过程来获取支持的密码套件列表。

主要通过发送网络请求并解析服务器响应来获取目标服务器开放的端口和服务信息,再通过SSL/TLS握手获取服务器支持的密码套件列表。

Welcome to follow WeChat official account【程序猿编码

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

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

相关文章

Linux 零拷贝splice函数

Linux splice 函数简介 splice 是 Linux 系统中用于在两个文件描述符之间移动数据的系统调用。它的主要作用是在两个文件描述符之间传输数据&#xff0c;而无需在用户空间进行数据拷贝。也是零拷贝操作. 函数原型 #include <fcntl.h> ssize_t splice(int fd_in, loff_…

git常用命令和参数有哪些?【git看这一篇就够了】

文章目录 前言常用命令有哪些git速查表奉上常用参数后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;git操作相关 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出…

数电实验-----实现74LS139芯片扩展为3-8译码器以及应用(Quartus II )

目录 一、74LS139芯片介绍 芯片管脚 芯片功能表 二、2-4译码器扩展为3-8译码器 1.扩展原理 2.电路图连接 3.仿真结果 三、3-8译码器的应用&#xff08;基于74ls139芯片&#xff09; 1.三变量表决器 2.奇偶校验电路 一、74LS139芯片介绍 74LS139芯片是属于2-4译码器…

设计模式-组合模式-笔记

“数据结构”模式 常常有一些组件在内部具有特定的数据结构&#xff0c;如果让客户程序依赖这些特定数据结构&#xff0c;将极大地破坏组件的复用。这时候&#xff0c;将这些特定数据结构封装在内部&#xff0c;在外部提供统一的接口&#xff0c;来实现与特定数据结构无关的访…

【libGDX】使用ShapeRenderer绘制几何图形

1 ShapeRenderer 简介 ShapeRenderer 是 libGDX 中用于绘制基本形状的工具之一。它可以绘制点、线、矩形、多边形、圆形、椭圆形、扇形、立方体、圆锥体等几何图形。这对于在游戏或图形应用程序中绘制简单的形状是很有用的。 ShapeRenderer 的主要方法如下&#xff1a; 1&…

10_6 input输入子系统,流程解析

简单分层 应用层 内核层 --------------------------- input handler 数据处理层 driver/input/evdev.c1.和用户空间交互,实现fops2.不知道数据怎么得到的,但是可以把数据上传给用户--------------------------- input core层1.维护上面和下面的两个链表2.为上下两层提供接口--…

深度学习:欠拟合与过拟合

1 定义 1.1 模型欠拟合 AI模型的欠拟合&#xff08;Underfitting&#xff09;发生在模型未能充分学习训练数据中的模式和结构时&#xff0c;导致它在训练集和验证集上都表现不佳。欠拟合通常是由于模型太过简单&#xff0c;没有足够的能力捕捉到数据的复杂性和细节。 1.2 模型…

Python 自动化(十七)ORM操作

ORM-查询操作 查询简介 数据库的查询需要使用管理器对象 objects 进行 通过 自定义模型类.objects 管理器调用查询方法 查询方法 all()方法 概念与理解 用法&#xff1a;自定义模型类.objects.all()作用&#xff1a;查询自定义模型实体中所有的数据等同于 select * fr…

第八部分:JSP

目录 JSP概述 8.1&#xff1a;什么是JSP&#xff0c;它有什么作用&#xff1f; 8.2&#xff1a;JSP的本质是什么&#xff1f; 8.3&#xff1a;JSP的三种语法 8.3.1&#xff1a;jsp头部的page指令 8.3.2&#xff1a;jsp中的常用脚本 ①声明脚本&#xff08;极少使用&#xf…

【Python仿真】基于EKF的传感器融合定位

基于EKF的传感器融合定位&#xff08;Python仿真&#xff09; 简述1. 背景介绍1.1. EKF扩展卡尔曼滤波1.1.1.概念1.1.2. 扩展卡尔曼滤波的主要步骤如下&#xff1a;1.1.3. 优、缺点 1.2. 航位推算1.3. 目前航位算法的使用通常与卡尔曼滤波相结合使用2. 分段代码 2.1. 导入需要的…

【Go入门】 Go如何使得Web工作

【Go入门】 Go如何使得Web工作 前面小节介绍了如何通过Go搭建一个Web服务&#xff0c;我们可以看到简单应用一个net/http包就方便的搭建起来了。那么Go在底层到底是怎么做的呢&#xff1f;万变不离其宗&#xff0c;Go的Web服务工作也离不开我们第一小节介绍的Web工作方式。 w…

Java --- JVM之垃圾回收相关算法

目录 一、垃圾标记算法 1.1、垃圾标记阶段&#xff1a;对象存活判断 1.2、引用计数算法 1.3、可达性分析算法 1.4、GC Roots 二、对象的finalization机制 2.1、生存还是死亡&#xff1f; 三、查看GC Roots 3.1、使用MAT查看 四、使用JProfiler分析OOM 五、清除阶段算…

系列五、怎么查看默认的垃圾收集器是哪个?

一、怎么查看默认的垃圾收集器是哪个 java -XX:PrintCommandLineFlags -version

SpringBoot项目连接linux服务器数据库两种解决方法(linux直接开放端口访问本机通过SSH协议访问,以mysql为例)

最近找个springboot脚手架重新熟悉一下springboot相关框架的东西&#xff0c;结果发现好像项目还不能直接像数据库GUI工具一样填几个SSH参数就可以了&#xff0c;于是就给他再整一下看看如何解决 linux开放3306&#xff08;可修改&#xff09;端口直接访问 此方法较为方便&am…

【数据结构&C++】二叉平衡搜索树-AVL树(25)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.AVL树的概念二.AVL树节点的定义(代码…

【嵌入式 – GD32开发实战指南(ARM版本)】第2部分 外设篇 - 第3章 温度传感器DS18B20

1 理论分析 1.1 DS18B20概述 DS18B20 是 DALLAS 最新单线数字温度传感器,新的"一线器件"体积更小、适用电压更宽、更经济。Dallas 半导体公司的数字化温度传感器 DS1820 是世界上第一片支持 "一线总线"接口的温度传感器。 DS18B20采用的单总线协议,也…

23.11.19日总结

经过昨天的中期答辩&#xff0c;其实可以看出来项目进度太慢了&#xff0c;现在是第十周&#xff0c;预计第十四周是终级答辩&#xff0c;在这段时间要把项目写完。 前端要加上一个未登录的拦截器&#xff0c;后端加上全局的异常处理。对于饿了么项目的商品建表&#xff0c;之前…

mybatis使用xml形式配置

以这个注解形式的查询代码为例 Select("select * from emp where name like concat(%,#{name},%) and gender #{gender} and entrydate between #{begin} and #{end} order by update_time desc ")public List<Emp> list(String name, Short gender, LocalDat…

SDUT OJ《算法分析与设计》搜索算法

A - 子集和问题 Description 子集和问题的一个实例为〈S,t〉。其中&#xff0c;S{ x1 &#xff0c; x2 &#xff0c;…&#xff0c;xn }是一个正整数的集合&#xff0c;c是一个正整数。子集和问题判定是否存在S的一个子集S1&#xff0c;使得&#xff1a; 。 试设计一个解子…

【Web】Ctfshow SSTI刷题记录1

目录 ①web361 362-无过滤 ②web363-过滤单双引号 ③web364-过滤单双引号和args ④web365-过滤中括号[]、单双引号、args ⑤web366-过滤单双引号、args、中括号[]、下划线 ⑦web367-过滤单双引号、args、中括号[]、下划线、os ⑧web368-过滤单双引号、args、中括号[]、下…