拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

2023-10-28

工作准备

•一台SQLSERVER 2005/SQLSERVER 2008服务

•SQLSERVER jdbc驱动程序

•Java开发环境eclipse + jdk1.8

•java反编译工具JD-Core

反编译JDBC分析SQLSERVER客户端与服务器通信原理

SQLServerConnection.class

1、经过反编译分析SQLServerConnection.class文件我们可以看到登录时所执行的算法,代码如下图所示:

由此可见sqlserver在用户名密码传输过程中使用了SSL加密,从上图中我们可以看到在启用SSL加密前执行了Prelogin(String param,int param2)函数,该函数算法大致如下图所示:

2、经过一些列分析得知,在启用SSL加密前客户端向服务器发送了客户端驱动信息之后立即读取服务返回的版本内容以作判断当前所使用的驱动是否支持。

3、在反编译分析代码过程中可以看到用户名密码加密算法分别所示:

由此可以通过逆向推算得出用户名密码解密算法如下所示:

TDSChannel.class

1、经过反编译分析SQLServerConnection.class 文件得知通过调用TDSChannel.class 中的函数enableSSL(String param,int param2),那么经过反编译TDSChannel.class文件分析得知该函数主要代码段如下所示:

2、由此可见SQLSERVER客户端仅在传输用户名密码时启用了ssl加密,登录认证前后数据传输均采取明文传输。

SSL通道拦截设计

1、SQLSERVER原始SSL通信如下:

2、拦截后通信如下:

程序设计

1、认证服务伪代码如下:

2、读取客户端驱动版本等信息并模拟sqlserver返回的版本信息,伪代码如下所示:

3、完成以上两步操作后立即开启SSL通道等待客户端开启SSL并握手,伪代码如下:

4、若SSL握手成功则接收客户端发送的用户名密码信息,并立即连接目标服务伪代码如下:

5、若连接成功则模拟客户端发送驱动版本信息并读取目标服务返回的信息反馈给真正的用户,紧接着开始SSL握手,若握手成功则立即发送真实的用户名密码,伪代码如下所示:

SSL通道用户名密码替换以及实时监控

1、使用SQLSERVER标准客户端工具填写堡垒主机地址和端口号用户名密码以及目标主机信息,如下所示:

2、点击“连接”登录实现转发连接功能,登录成功如下所示:

3、通过实时监控窗口查看SQLSERVER客户端执行的命令,如下图所示:

4、新建查询执行命令,如下所示:

5、通过实时监控查看执行的命令信息,如下所示:

到此为止已完成所有工作。

转载于:https://my.oschina.net/zhangzhigong/blog/1859788

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一) 的相关文章

  • 使用 Hibernate 用瞬态对象更新持久对象

    每天 数据都是通过网络服务导入的 我创建一个新的 暂时的 实例我通过 JPA 注释在 hibernate 中映射的 pojo 的 我将数据从 Web 服务填充到瞬态实例中 我从数据库加载持久对象 我想用瞬态实例中的数据更新该持久对象 我以某
  • 在 Gradle 中运行自定义测试任务而无需重新编译

    我有一个 Gradle 自定义测试任务来运行我的集成测试 我希望能够在 Gradle 不自动完成之前的所有阶段并仅运行测试的情况下运行它 有没有办法在每个构建步骤不使用 x 的情况下执行此操作 None
  • 如何创建仅接受字母数字字符的正则表达式? [复制]

    这个问题在这里已经有答案了 可能的重复 字母数字和下划线的正则表达式 https stackoverflow com questions 336210 regular expression for alphanumeric and unde
  • 将更改(永久)保存在数组列表中?

    那可能吗 例如 用户将新的项目 元素添加到数组列表 缓冲读取器进程 中 并且肯定会发生更改 我的问题是 即使用户多次更改数组列表 它也可能会永久存在 即使他们关闭程序并再次打开它 它也会一直存在 注意 不使用 txt 很抱歉问这样的问题 但
  • 带嵌入式 tomcat 的 spring-boot 不会将请求分派到控制器

    我有一个使用 spring boot 和嵌入式 Tomcat 容器的应用程序 据我所知 我的代码与 spring boot 相同示例项目 https github com spring projects spring boot tree m
  • 在 alpine / Jprofile 10 中运行 jpenable 时出现 UnsatisfiedLinkError

    当运行 jpenable 以允许在运行 JDK 8 的 alpine 3 3 容器中对 Jprofiler10 进行分析时 我收到 UnsatisfiedLinkError 异常 有任何想法吗 ERROR The agent could n
  • 简单的Java程序插入USB热点后速度慢100倍

    我有以下Java程序 class Main public static void main String args throws java io IOException long start System nanoTime java io
  • 竞争条件和 Clojure Atoms

    clojure atom 的文档指出 Changes to atoms are always free of race conditions 然而 竞争条件不仅是根据更改定义的 而且是在不同线程中并行逻辑操作的上下文中定义的 我想知道 保证
  • 如何防止我的 servlet 被其他网站调用

    好的 我有一个像这样的简单的 servlet public class SimpleServlet extends HttpServlet public void doPost HttpServletRequest req HttpServ
  • 字符串 a == 字符串 b 的规则 [重复]

    这个问题在这里已经有答案了 我试图了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是什么 例如这个片段 public static void main String hi String s1 lol String s2 lol S
  • 错误包括 bouncycastle 提供商

    我需要使用bouncycastle provider我的项目中的库 我已将其包含在 gradle 项目中 apply plugin application sourceCompatibility 1 6 version 1 0 0 main
  • org.apache.poi 中的异常

    我试图编写一个可以读取和写入的程序 xlsx文件中 下面提供的代码旨在能够编写其第一个 Excel 程序 package excel reader import java io FileOutputStream import java io
  • Java 日期和 MySQL 时间戳时区

    我正在编辑一段代码 其基本功能是 timestamp new Date 然后坚持下去timestamp中的变量TIMESTAMPMySQL 表列 然而 通过调试我看到Date显示在正确时区的对象 GMT 1 当持久化在数据库上时 它是GMT
  • java.lang.IllegalStateException:FragmentManager 已被销毁

    活动中onResume我称之为 volley request 的方法 它获取项目列表 然后将它们加载到此活动内的 ListFragment 中 当我第一次进入活动时 一切正常 但当我重新进入活动时 ListFragment 为空 并且控制台
  • 如何预先填充 JFileChooser 将“文件名”?

    我打算用数据库中的名称填充 JFileChooser 但使用标准 JFileChooser 对话框进行加载 删除 保存和另存为 我想给用户留下这样的印象 他们正在处理文件系统 而在后端使用数据库来保存更改 用户不应该能够浏览到不同的目录进行
  • 为什么找不到 getservletcontext?

    我正在尝试使用getServletContext getRealPath 但我不断收到此错误 cannot find symbol symbol method getServletContext location interface jav
  • 原子整数的compareandexchange()与compareandset()

    在研究 AtomicInteger 时 我发现这个 API 提供了两种方法 比较和交换 如果当前值被引用 则自动将该值设置为 newValue to 作为见证值 预期值 记忆效应为 由指定VarHandle compareAndExchan
  • CreateProcess error=206,运行 gwtCompile 时文件名或扩展名太长

    我的应用程序是一个 springboot gradle 应用程序 我的应用程序的一部分涉及使用 gradle 进行遗留 gwt 编译 它工作正常 但今天当我运行下面的 gradle 任务时 它显示 CreateProcess error 2
  • SWT StyledText 有高度限制吗?

    我正在尝试创建一个应用程序 其中包含在 ScrolledComposite 中显示的 StyledText 框 我在 StyledText 框中显示大量行时遇到困难 超过 2 550 行似乎会导致问题 StyledText 框本身不能有滚动
  • Spring Boot 2 中的 401 代替 403

    With 春季启动 https projects spring io spring boot 1 5 6 发布我能够发送 HTTP 状态代码401代替403如中所述如果请求未经身份验证的uri 如何让Spring Security响应未经授

随机推荐

  • [MySQL] Centos下的启动和关闭

    MySQL Centos下的启动和关闭 现在主流的Unix系统有两种风格 System V和BSD 他们的区别如下 Linux作为类Unix 同样也存在这两种风格 其中Centos属于System V 本文主要介绍在Centos下 即Sys
  • 如何让人际关系网助你一臂之力?

    如何让人际关系网助你一臂之力 编者按 本文来自First Round Review 他们准备的文章既讲故事 还同时向创业者提供可操作的建议 以助力打造优秀的公司 LinkedIn 早期项目经理Patrick Ewers现如今的工作就是帮助科
  • PCL 部分点云视点问题

    目录 一 问题概述 二 解决方案 1 软件实现 2 代码实现 三 调整之后 一 问题概述 针对CloudCompare软件处理过的pcd格式点云 在使用PCL进行特征点提取 配准等实验中最终显示结果出现点云位置偏差较大的问题 本博客给出解决
  • 基于pytorch神经网络的工业区域用电量预测 完整代码数据

    代码讲解 工业用电量预测 时间序列预测 基于pytorch神经网络的工业用电量预测 完整代码数据 哔哩哔哩 bilibili 本博客付完整代码数据 运行截图 pip install openpyxl i https pypi tuna ts
  • Maven内置了三大特性:属性、Profile和资源过滤来支持构建的灵活性。

    原文地址 http www cnblogs com woms p 5769680 html 内置属性 主要有两个常用内置属性 basedir 表示项目根目录 即包含pom xml文件的目录 version 表示项目版本 POM属性 pom中
  • 《Effective Java》第二版总结

    Effective Java 主要给了78条编码建议 指导 方便开发者开发出 高效 稳定 健壮 设计优良的程序 下面看一下这78条建议 创建和销毁对象 1 考虑用静态工厂方法代替构造器 为了让客户端获取他自身的一个实例 最常用的方法就是提供
  • UE4材质:纯数学算法实现水面水波扩散效果

    上面的做法有几个问题 1 用于地形时 显示不出来 原因是地形的UV是会超出1的 做如下修正 2 水波在UV边界被截断 暂不处理了 有几个办法 不让水波出现在UV边界上 或在世界空间指定水波位置 在二个相邻的水块中分别为半个水波指定发射位置
  • CTEX安装教程与注意事项

    一 CTEX Latex 下载 百度搜索ctex 进入下载中心 CTEX 2 下载中心中选择稳定版本CTeX 2 9 2 164 点击进入 初学者是使用basic CTeX 2 9 2 164 exe 已足够使用 二 安装 首先备份电脑的环
  • vs试用期延长期到期_VS2017试用期到期后登录微软账户出现错误解决方法

    关于使用VS2017试用期一个月到后 需要登录微软账户后进行认证后才能重新使用 但是登录成功后出现如下错误 We could not refresh the credentials for the account AADSTS50001 T
  • 【IDEA Sprintboot】简单入门:整合SpringSecurity依赖、整合Thymeleaf框架

    目录 1 IDEA 简单入门 请求数据库表数据 水w的博客 CSDN博客 目录 三 1 整合SpringSecurity依赖 2 整合Thymeleaf框架 解决css样式等静态资源访问不到的问题 三 1 整合SpringSecurity依
  • Linux shell脚本之函数 Function 详解

    Linux shell脚本之函数Function 函数详解 函数语法 函数的生命周期 函数返回值 函数参数 变量作用域 1 本地变量 2 局部变量 函数变量示例 函数递归 递归示例 函数示例 函数详解 在过程式编程中 代码会重用 过程式编程
  • IOS集成ctp,恒生,金仕达穿透式监管的一点坑

    官方文档有些问题遗漏 1 要将引入对应头文件的文件用 mm后缀支持c 语法 不然会出现Expected 报错 不支持int 2 在解析的时候存在一些差异 CTP GetSystemInfo返回的数据实际是用char 接收的纯byte数据 用
  • 用RCircos包来画圈圈图

    用RCircos包来画圈圈图 我先讲解了画图 再讲解了一些小知识 安装并加载必须的packages 如果你还没有安装 就运行下面的代码安装 install packages RCircos library RCircos 如果你安装好了 就
  • GCC详解

    开放 自由和灵活是Linux的魅力所在 而这一点在gcc上的体现就是程序员通过它能够更好地控制整个编译过程 在使用gcc编译程序时 编译过程可以细分为 个阶段 预处理 Pre Processing 编译 Compiling 汇编 Assem
  • Linux命令大全(手册)

    https www linuxcool com
  • Android OkHttp源码阅读详解一

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到教程 前言 源码阅读基于okhttp 3 10 0 Android中OkHttp源码阅读二 责任链模式 implementation com
  • 【100天精通python】Day42:python网络爬虫开发_HTTP请求库requests 常用语法与实战

    目录 1 HTTP协议 2 HTTP与HTTPS 3 HTTP请求过程 3 1 HTTP请求过程 3 2 GET请求与POST请求 3 3
  • 树莓派快速扩容

    当树莓派默认的系统空间已经被占满 无法再进行安装等操作 而 SD卡仍有空间未被使用 可以对树莓派进行扩容 假设一个镜像的大小为 4G 由于该镜像对内存卡的要求是大于或等于 4G 但对于 4G以上的内存卡来说 树莓派的系统只利用到 4G 因此
  • 2.机器学习之单变量线性回归(李宏毅)

    2 单变量线性回归 Linear Regression with One Variable 2 1 模型表示 Model Represention 以前面说的例子 房子的价格是个回归问题 回归一词指的是 我们根据之前的数据预测出一个准确的输
  • 拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 工作准备 一台SQLSERVER 2005 SQLSERVER 2008服务 SQLSERVER jdbc驱动程序 Java开发环境eclipse jdk1 8 java反