当前位置: 首页 > news >正文

手机网站发布页电脑版平顶山 网站建设公司

手机网站发布页电脑版,平顶山 网站建设公司,永川做网站的公司,wordpress两个站点共用用户前提 开发小组在测试环境基于docker构建和迁移一个MySQL8.x实例#xff0c;过程中大意没有记录对应的用户密码#xff0c;然后发现某开发同事本地Navicat记录了根用户#xff0c;于是搜索是否能够反解析Navicat中的密码掩码#xff08;这里可以基本断定Navicat对密码是采用… 前提 开发小组在测试环境基于docker构建和迁移一个MySQL8.x实例过程中大意没有记录对应的用户密码然后发现某开发同事本地Navicat记录了根用户于是搜索是否能够反解析Navicat中的密码掩码这里可以基本断定Navicat对密码是采用了对称加密算法于是发现了这个仓库 how-does-navicat-encrypt-password 密码的解密算法显然是被泄露了那么就可以利用起来。加之笔者之前花了一点点时间入门了一下Go于是业余花了点时间编写了一个GUI工具。这个工具主要功能是在Windows系统下自动读取Navicat在注册列表中写入的所有数据库服务器连接数据作为列表展示对于每个服务器连接数据的密码尝试进行解密。效果如下 navicat-watcher-1.png 大致原理 参考how-does-navicat-encrypt-password仓库因为Navicat两种版本的对称加密算法的具体算法、秘钥和加密向量都被泄露了得知 版本一(Low)使用Blowfish/ECB/NoPadding模式版本二(High)使用AES/CBC/PKCS5Padding模式 其中AES/CBC/PKCS5Padding实现是比较简单的Blowfish/ECB/NoPadding在Go的原生类库中刚好缺少了ECB解码器只能仔细翻阅how-does-navicat-encrypt-password的Java版本代码并且强行转换为Go实现: func (l *LowVersionCipher) Decrypt(input string) (string, error) {ciphertext, err : hex.DecodeString(input)if err ! nil {return , err}if len(ciphertext)%8 ! 0 {return , errors.New(ciphertext length must be a multiple of 8)}plaintext : make([]byte, len(ciphertext))cv : make([]byte, len(l.iv))copy(cv, l.iv)blocksLen : len(ciphertext) / blowfish.BlockSizeleftLen : len(ciphertext) % blowfish.BlockSizedecrypter : NewECBDecrypter(l.cipher)for i : 0; i  blocksLen; i {temp : make([]byte, blowfish.BlockSize)copy(temp, ciphertext[i*blowfish.BlockSize:(i1)*blowfish.BlockSize])if err ! nil {panic(err)}decrypter.CryptBlocks(temp, temp)xorBytes(temp, cv)copy(plaintext[i*blowfish.BlockSize:(i1)*blowfish.BlockSize], temp)for j : 0; j  len(cv); j {cv[j] ^ ciphertext[i*blowfish.BlockSizej]}}if leftLen ! 0 {decrypter.CryptBlocks(cv, cv)temp : make([]byte, leftLen)copy(temp, ciphertext[blocksLen*blowfish.BlockSize:])xorBytes(temp, cv[:leftLen])copy(plaintext[blocksLen*blowfish.BlockSize:], temp)}return string(plaintext), nil }func xorBytes(a []byte, b []byte) {for i : 0; i  len(a); i {aVal : int(a[i])  0xff // convert byte to integerbVal : int(b[i])  0xffa[i]  byte(aVal ^ bVal) // xor aVal and bVal and typecast to byte} } 接着基于golang.org/x/sys/windows/registry加载Windows系统注册列表下的服务器连接数据列表Navicat多个版本测试发现服务器连接数保存在注册列表的Software\PremiumSoft\Navicat\Servers目录下只需要全量读取出来并且按照每个服务器连接数据的明细k-v一步一步解析即可。这个解析过程的伪代码如下 const NsPath  Software\PremiumSoft\Navicat\Servers nsp, _ : registry.OpenKey(registry.CURRENT_USER, NsPath, registry.READ) subKeys, _ : nsp.ReadSubKeyNames(999) var servers []*Server for _, subKey : range subKeys {serverPath : strings.Join([]string{NsPath, subKey}, \)sp, _ : registry.OpenKey(registry.CURRENT_USER, serverPath, registry.READ)// 数据库的版本serverVersion, _, _ : sp.GetIntegerValue(ServerVersion)// hosthost, _, _ : sp.GetStringValue(Host)// 用户名username, _, _ : sp.GetStringValue(UserName)// 密码密文pwd, _, _ : sp.GetStringValue(Pwd)// 端口一般是3306port, _, _ : sp.GetIntegerValue(Port)realPwd : pwdif (len(pwd)  0){// 解密得到密码明文realPwd, _  cipher.Decrypt(pwd)}servers  append(servers, Server{...}) } 小结 「提醒」 - 这个项目仅仅是提供参考和学习供个人本地开发时候使用切勿用于窃取他人的数据库密码。项目仓库 navicat-watcher 顺带一提使用fyne做GUI开发效果还可以不过目前这个库还存在比较多BUG性能高的同时占用的资源也比较高。 本文完 c-1-d e-a-20230802 很久没写文章了
http://www.dnsts.com.cn/news/23977.html

相关文章:

  • 深圳最好的网站建设公司哪家好p2p贷款网站建设
  • 绵阳做公司网站wordpress制作在线云课堂
  • 专门做优选的网站vps搭建网站是什么意思
  • 淘宝网站怎么做适配互联网推广运营
  • 建设一个普通网站需要多少钱西安建设局官方网站
  • 用python做的网站模板怎样注册网站做销售
  • 做最最优秀的视频网站有哪些php成品网站源码
  • 网站技术开发建筑论坛网
  • 中文网站建设入门百安居装修报价清单
  • 宝应网站设计买了域名后做网站该怎么弄
  • 永康住房城乡建设局网站杭州全案推广
  • 自己如何搭建网站wordpress修改阅读
  • 国内返利网站怎么做建筑网络学院
  • 新手网站建设企业网站制作免费
  • 电脑用虚拟机做网站北京专业建设网站价格
  • vps搭建网站是什么意思做网站可以不买域名和主机吗
  • 做阿里巴巴网站图片建站之星导出网站
  • 网站快速排名推荐免费网络验证
  • 中文网站建设中模板优质高职院校建设网站
  • 手机网站建设服务Tp5即做网站又提供api接口
  • 专业做学校网站的公司yanderedev.wordpress
  • 中国化学工程第六建设公司网站新建一个公司官网
  • 要做网站找谁帮忙做wordpress island
  • 泰州网站模板导购网站如何做
  • 中国十大小说网站排名产品网络推广方法
  • 做中学学中做网站免费网站建设免代码
  • 网站建设 中国联盟网用cn作网站行么
  • 烟台互网站建设公司名单芜湖做网站的邓健照片
  • 苏州做网站的公司排名杭州制作网站公司
  • 谷歌做英文网站招生网站怎么做