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

工作准备

•一台SQLSERVER 2005/SQLSERVER 2008服务

•SQLSERVER jdbc驱动程序

•Java开发环境eclipse + jdk1.8

•java反编译工具JD-Core

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

SQLServerConnection.class

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

7d9b0a002039af2e1384a67b8a731cfa.png

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

11c58ce807b9f09d5b635a63673271e0.png

6b812dd304b6ce4c56ab246ab0c2b613.png

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

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

88a02ecf25555e43393b69fe40ca71b7.png

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

baa4d2a03174bad72b50dc86edb6fd7f.png

b811368e2ec83cf415140fac664f394e.png

TDSChannel.class

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

ee506ca2190de3701abc8233a393ef93.png

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

SSL通道拦截设计

1、SQLSERVER原始SSL通信如下:

ad3dc5ac38990d5c9f874413d9881d2a.png

2、拦截后通信如下:

b3f90479bbcb0ccd68fdf5aa31eb4a43.png

程序设计

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

f1e886b7afcfd5ddb308b7f3b519b97f.png

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

31afb0578c8343edff21dd84031efb11.png

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

3d3f1c3a2cf9904d065def5c5e20ce37.png

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

73577a9e147d7ca80a87262a82fd6e45.png

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

026c1c53cac013698da3975e4d83be00.png

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

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

3267d0b9f9a615155fec8bbb29ed9ffe.png

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

fbf7e43e05bcdfbaa6ae327228f0524a.png

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

4e349d8df71437c4c6712b21620dc3a3.png

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

32478dc3c932513e699417f0fb83b297.png

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

837e6eb1af5f4c6fd6589ad1800e29e5.png

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

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

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

相关文章

1-9其他数据库注入

文章目录 数据库注入access数据库判断access数据库常用函数查询语句构造联合查询布尔型盲注 mssql数据库mssql数据库判断环境---靶机-2k3_sp2常用函数查询语句构造联合查询报错注入布尔型盲注 数据库注入 access数据库 判断access数据库 根据url的后缀。ASP为后缀名…

tp框架 db::name_玩! 框架:为什么我会爱上它

tp框架 db::name前一段时间,我是房地美,房地美,Foreclosure.com和HUD等公司在房地产市场上进行一些大型部署的技术负责人。 我们运行的是您可能熟悉的传统企业Java堆栈-Spring , Hibernate ,Solr等。花了几年时间&…

自动化专业向往硬件方面靠,有什么好的建议?

我的建议是: 有能力考研就先考研,考不上可以选择就业,学历还是很重要的,门槛。自动化可以找一些相关的知名企业,按照他们的招聘要求要求自己,往这个方法发展,垂直领域研究很深,你就是大佬和专家。 有个帖子讲的挺全的,虽然是文章:自动化人生 下面是理论内容,我直接…

java 内存数据库 sql_ssm+redis +Maven用于内存数据库 (No Sql)入门demo

最近一直是以自学的状态,想把自己学习到的知识分享给大家 ,也是好久没有写博客了。废话不多说 ,直接上代码。本次项目是 用maven 管理的.开发工具 eclipse在pom.xml文件中,中关于redis的配置:org.springframework.data…

Fitness - 05.23

倒计时222天 运动40分钟,共计8组,4.2公里。拉伸10分钟。 每组跑步3分钟(6.5KM/h),走路2分钟(5.5KM/h)。 终于赶在姨妈前完成第3周的跑步训练了,可喜可贺~~ 下周预计要休息了orz... 祈…

Linux下编译安装以及配置PHP环境

安装准备 依次执行下面命令,不存在的就搜差不多的就行,下面安装的都是后面安装环境可能需要用上的依赖,不管37是不是21,复制粘贴就是了 Ubuntu安装: sudo apt-get update sudo apt-get install gcc autoconf openssl libssl-dev curl libcurl4-gnutls-de…

开发SPI时不要犯这个错误

您的大多数代码都是私有的,内部的,专有的,并且永远不会公开。 在这种情况下,您可以放轻松–您可以重构所有错误,包括那些可能导致API更改中断的错误。 但是,如果要维护公共API,则不是这种情况。…

有什么好一点的方法读jdk源码吗?

建议是: 1:找相关的书在看相关源码时应该对程序有整体了解,比如看虚拟机时至少要知道:垃圾回收算法,Java内存布局,class文件格式,加载连接的过程...很多人看源码一点头绪都没有,就是因为不了解对应的模块是干嘛的(比如Ja

给女朋友道歉的java代码_跟女朋友道歉的话,高情商的哄人句子

女朋友生气了,而且很严重。在这种情况下,不知道做什么挽回她。第一诚实的道歉可以缓和彼此紧张的气氛。重要的是,道歉完就需要说一些话语去哄她,至于怎么哄又是一个技术性的问题了,下面一起来看看跟女朋友道歉的话,高情…

使用Myeclipse完成Hibernate的逆向工程

Hibernate的开发流程一般有两种: 1、由Domain object > mapping > db 2、由db开始,用工具生成生成mapping 和Domain object。 在实际的开发过程中,涉及的表太多了,一个一个的写java实体类很费事费时的。Myeclipse提供了一个…

面试用涉及到的jvm常见的面试题(一)

什么是jvm? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机…

kali安装docker(有效详细的教程)

前记: 博主有着多次安装docker的丰富经验,曾经为了在kali成功安装docker花费不少时间。在kali2016.3一直到最新的kali2019.4都通吃!所以跟着下面的步骤走,绝对不会出错。(该机子此前没装过docker,并且配置好…

java中 下列不合法的语句_在Java中,下列( )是不合法的赋值语句。_学小易找答案...

【多选题】一个国家一定时期的商品销售额属于?【单选题】某厂2007年完成产值200万元,2008年计划增长10%,实际完成231万元,超额完成计划?【多选题】我国GDP每增长1%,相当于人均增加收入70多元;全国将增加60—80万个就业岗位。这里用到的指标有?【单选题】轴的最小实体尺寸为(…

最大流EK和Dinic算法

最大流EK和Dinic算法 EK算法 最朴素的求最大流的算法。 做法&#xff1a;不停的寻找增广路&#xff0c;直到找不到为止 代码如下&#xff1a; Frosero #include <cstdio> #include <iostream> #include <cstring> #include <queue> #define INF 0x3f3…

某大厂JVM常见面试题(二)吐血整理

什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机…

_stat64获取错误_Log4j,Stat4j,SMTPAppender集成–汇总错误日志以发送过多电子邮件...

_stat64获取错误我们的开发团队希望在生产系统出现问题时尽快得到通知&#xff0c;这是一个每天为成千上万的客户提供服务的关键Java Web应用程序。 想法是让它在出现太多错误时向我们发送电子邮件&#xff0c;这些错误通常表示数据库&#xff0c;外部Web服务有问题&#xff0c…

Kali2021修改更新源

本次演示三种环境更换更新源 Xfce4版本 KDE版本 命令行版本 更新源 #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

java面试中jvm执行子系统详细分析(三)

什么是jvm? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机…

java中菜单分几级_JavaWeb三级菜单分类查询详解

废话不多说&#xff0c;直接贴代码&#xff1a;dao层代码&#xff1a;mapper&#xff1a;ListselectByParentId(Integer id);mapper.xmlselectfrom easybuy_product_categorywhere parentId #{parentId,jdbcTypeINTEGER}Test:import cn.hd.entity.ProductCategory;import cn.h…

使用Javaslang进行Java 8中的函数式编程

我们非常高兴地在jOOQ博客上宣布一个客座帖子&#xff0c;该帖子由HSH Nordbank的高级软件工程师&#xff0c;三个孩子的父亲&#xff0c; Daniel Dietrich撰写。 他目前作为项目负责人和首席开发人员为金融产品创建定价框架。 除工作外&#xff0c;他还对编程语言&#xff0c…