postgresql数据库登录代理解析(包含登录协议包解析)

news2024/9/27 12:18:19

文章目录

  • postgresql数据库登录代理解析(包含登录协议包解析)
    • 背景描述
    • 版本不同对应的账号密码加密
    • 目标
    • 解析方法
      • 相关代码位置
      • 断点关键位置及相关重要变量
    • 登录通信流程(SCRAM-SHA-256方式)
    • 代码实现
    • 相关参考资料

postgresql数据库登录代理解析(包含登录协议包解析)

背景描述

需求:
在工作中需要实现一个对pgsql数据库进行代理的程序,能够通过自定义的用户名和密码登录pgsql。
实现:
代理程序已经实现,现在通过在客户端与数据库之间的代理程序,对客户端传输过来的自定义用户名密码进行解密或比对,再将真实数据库密码进行加密发送到服务器。

版本不同对应的账号密码加密

在这里插入图片描述

目标

由于md5加密方式过于简单,这里就不研究低版本的。如下流程都是分析的SCRAM-SHA-256方式,也就是PG14+(含14)版本

解析方法

利用jdbc连接pgsql,通过断点追踪用户名和密码,找到将用户名和密码发送连接地方。

相关代码位置

客户端发送到服务器的包
第一个包:
org.postgresql.core.v3.ConnectionFactoryImpl#enableSSL
第二个包:
org.postgresql.core.v3.ConnectionFactoryImpl#sendStartupPacket
第三个包:
org.postgresql.jre8.sasl.ScramAuthenticator#sendScramClientFirstMessage
org.postgresql.core.v3.ConnectionFactoryImpl#doAuthentication
第四个包:
org.postgresql.jre8.sasl.ScramAuthenticator#sendAuthenticationMessage
org.postgresql.jre8.sasl.ScramAuthenticator#processServerFirstMessage

断点关键位置及相关重要变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
经过如上协议包的交互过程及断点追踪,得到如下步骤及流程图。

登录通信流程(SCRAM-SHA-256方式)

.认证流程
1.客户端发送一个确认SSL是否开启的包
2.客户端发送一些参数(如用户名,数据库,客户端编码方式,数据风格,时区等)
3.服务器回一个SASL的认证机制,当前版本是SCRAM-SHA-256。
4.客户端根据服务器反的认证机制,创建ScramAuthenticator,初始化并构建SASL,包含认证方式和client_nonce认证数据发送给服务器。
5.服务器回应SASL continue(11)信号,发送s:盐、r: nonce、i: iteration,客户端根据它们生成serverFirstMessage对象。
6.客户端根据serverFirstMessage生成serverFirstProcessor,并获取clientFinalProcessor(这里面处理密码加密逻辑),然后根据clientFinalProcessor生成一个clientFinalMessage字符串。将其发送给服务器(类型为SASLResponse message)以及认证数据clientFinalMessage。
7.服务器返回SASL complete(12)标识,以及SASL authentication data数据,认证结束。
在这里插入图片描述

代码实现

略…

相关参考资料

https://www.postgresql.org/docs/current/sasl-authentication.html

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

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

相关文章

Python count()函数详解

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 count 1、指定搜索位置2、参数为负数3、列表的coun…

以太网OSI参考模型(四)

目录 OSI模型 一、物理层 二、数据链路层 三、网络层 四、传输层 五、会话层 六、表示层 七、应用层 OSI模型 OSI七层模型,是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)1984年联合制定的开放系统互联参考模型,为开放式互联信息系统提供…

06-C++学习笔记-指针的定义与使用

指针是C中非常重要的概念,它允许直接访问内存地址,并通过地址操作变量。本篇笔记将介绍指针的定义与使用方法,以及指针与数组的关系。 1️⃣ 指针的引入 指针的引入是为了解决需要直接访问内存地址的情况。通过指针,可以间接访问…

Android TextView 展示特殊字符高度变高问题解决

背景 #在我们的项目中,展示文字是很常见的需求,但是在线上展示中发现,有些信息是特殊字符展示的,而且这些字符的高度会导致TextView的高度变高(与正常字符比)。 效果如下: 很明显&#xff0…

森云+优控配置摄像头进行录像和拍照测试

森云和优控配置摄像头进行录像和拍照测试 现在其实已经基本上明确自己的环境了,就是在ubuntu下的pycharm和vscode,然后下载conda(但是不要默认的base环境,只要conda create -n xxx 这样的基本功能就好了) 显示opencv…

AI绘画StableDiffusion:云端在线版使用笔记分享(Kaggle版)

玩AI绘画(SD),自己电脑配置不够?今天给大家介绍一下如何baipiao在线版AI绘画StableDiffusion。 Kaggle 是世界上最大的数据科学社区,拥有强大的工具和资源,可帮助您实现数据科学目标。(每周可以…

【MySQL学习笔记】(六)MySQL基本查询

表的增删查改 1 create1.1 单行数据全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2 retrieve2.1 select列2.1.1 全列查询2.2.2 指定列查询2.2.3 查询字段为表达式2.2.4 为查询结果指定别名2.2.5 结果去重 2.2 where 条件2.2.1 null的查询 2.3 结果排序2.4 筛选分…

如何搭建一个实时对话转录应用(类似zoom中的文本转录功能)并部署到 Heroku

文章目录 应用搭建Assembly AI文件夹结构前端搭建HTMLindex.js 后端搭建server.jspackage.json Heroku 部署创建账号创建Heroku应用上传仓库 应用搭建 应用基于 html javascript使用的第三方 API 是 Assembly AI 提供的 Assembly AI 要使用 real-time transcript 功能&…

ChatGPT:为教育创新提供五大机遇

随着智能技术的不断发展,ChatGPT在教育场景中的创新价值可能比我们能够意识到的还要多。比如它可以自动处理作业、在线答疑,可以辅助语言学习、实时沟通,甚至还可以用于评估诊断、科学研究。国内外关于利用ChatGPT实现教育创新的场景描绘已经…

【Matplotlib】多级雷达图绘制

一、实例1:个人能力画像雷达图 # -*- coding: utf-8 -*- """ Created on Sat Jul 1 20:52:54 2023author: zcq """import numpy as np import matplotlib.pyplot as plt import matplotlibmatplotlib.rcParams[font.family]SimHei …

灯夹三角架

2个卡箍1个无头螺丝拼1个灯夹 还需要1个三脚架固定 difference(){union(){translate([18,-7,0])cube([14,14,1]);translate([-7,18,40])cube([14,14,1]);translate([-7,-32,40])cube([14,14,1]);points [[7,-32,40], //0[18,-7,0], //1[18,7,0], //2[7,-18,40], //3[7,…

【C++面向对象】足球比赛数据统计系统(面向对象练习)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 &#x…

【IoT】硬件产品经理:从入门到精通(卫朋)

目录 介绍 出版过程 CSDN学院 下单方式 个人介绍 介绍 2023 年已经过去了一半。 作为阶段小目标,这本书也如期发布了。 先来看看封面,这里也要感谢编辑们的辛苦付出。 ​ 出版过程 出版本身其实是一件比较严肃的事情。 过去的一年多时间&#…

进程的基本概念解读

目录 什么是进程 PCB OS中用于管理控制的数据结构 进程控制块PCB的作用 进程控制块中的信息 前趋图 背景 作用 表示 示例 程序的顺序执行 程序顺序执行的特征 程序的并发执行 程序的并发执行的特征 例题解读 进程的三种基本状态 进程的三种状态之间的转换 进…

linux下RabbitMQ的使用

文章目录 linux下RabbitMQ的使用首先docker启动网页打开网址:用户名和密码登录创建exchanges:创建Queues增加Queues的Bind linux下RabbitMQ的使用 首先docker启动 su rootsudo docker run -d --hostname rabbitsvr --name rabbit -p 5672:5672 -p 15672:15672 -p …

Uniform的理解

Uniform:一种从Cpu的应用,向Gpu中的着色器发送数据的方式,它是全局的,可以被任意着色器程序在任意阶段访问。 若声明了一个Uniform却没用过,编译器会默认移除这个变量,导致编译出的版本并不包含它&#xff…

配置本地的application-dev.yml读取nacos上面的配置

我想配置本地的application-dev.yml读取nacos上面的配置,我应该在配置文件里怎么写?并且在nacos里怎么建立 在本地的application-dev.yml文件中,您可以使用Spring Cloud Nacos来读取Nacos上的配置。以下是在配置文件和Nacos中设置的步骤&…

servlet+JSP与SpringBoot+Vue项目交互——servlet访问Vue页面

问题 servletJSP与SpringBootVue项目交互——servlet访问Vue页面 详细问题 笔者前一段时间开发一个项目,使用的技术框架是servletJSP,现阶段开发的项目技术框架为SpringBootVue,笔者现在需要输入servletJSP的路由地址(登录页面…

3DTiles Next研究

3DTiles Next是Cesium发布的下一代3DTiles规范。 元数据 在这一代规范中,更重视元数据(metadata,如建筑物ID或者类型等),通过这些元数据可以对3dtiles进行样式调整或者过滤显示。 关于详细的元数据规范介绍看这里。 …

Spark SQL生产优化经验--任务参数配置模版

大表扫描 特殊case说明:当任务存在扫event_log表时需注意,若对event_log表进行了过滤,且过滤比很高,如下图的case,input为74T,但shuffle write仅为3.5G,那么建议提高单partition的读取数据量&a…