python3读取sqlyog配置文件中的MySql密码
这个人有什么目的?:
我多多少少听过一些安全圈的大牛说到类似的思路,大意是可以通过扫描各种程序和服务的配置文件(比如SVN的文件,RSYNC的配置文件等),
从中发现敏感信息,从而找到入侵的突破口。沿着同样的思路扩展,管理员们用着各种各样的管理工具(SSH,FTP,mysql之类等等的管理工具),
这类工具通常都在本地存着密码,如果这些工具中配置信息被恶意扫描读取走,有可能会造成极其重大的损失。
所以我想尝试验证看看各种管理工具的敏感信息是不是容易读取并解码出来,二来这过程中有思考,也会有各种资料和动手实践,能很好地练习、复习编程技能。
基于总有刁民想害朕的想法,我比较希望操作系统或者安全软件能提供更加精细的权限控制,毕竟不管是百度还是360或者迅雷的全家桶,这些公司的软件底线比较低,
如果这些软件或者其它软件没有读取我们敏感数据的权限的话,我们会更放心一些。
sqlyog是一款商业开源的非常不错的mysql管理工具。
安装sqlyog后,会把配置文件存在用户目录下:
C:\Users%user%\AppData\Roaming\SQLyog\sqlyog.ini
取环境变量%AppData% +上 SQLyog\sqlyog.ini 就可以。
以下是 sqlyog.ini文件片段:
[UserInterface]
Language=zh-cn
Version=2
ThemeFile=963
ThemeType=1
[Themedetails]
ThemeFile=964
ThemeType=1
[SQLYOG]
Encoding=utf8
Left=0
Top=0
Right=600
Bottom=600
Maximize=0
Host=新连接
ChildMaximized=1
[Connection 1]
Name=新连接
Host=localhost
User=root
StorePassword=1
Password=sLBzS1h0309zR9IxMQ==
Port=3306
Database=
......
""号是base64编码最明显的特征,一般看到类似sLBzS1h0309zR9IxMQ这样的字符,就知道是base64。
sqlyog对密码的编码过程是对密码的字节分别进行位运算后,再进行base64编码存在配置文件中。
另一个需要注意的是python的bit左移是会进位的,所以需要与255。
举例:
>>> 2<<10
2048
>>> 2<<10&255
0
python3读取sqlyog.ini中的密码:
# -*- coding: utf-8 -*-
"""
Created on 2017-03-15 07:42:58
@author: codegay
"""
import os
import configparser
import base64
def decode(base64str):
tmp = base64.b64decode(base64str)
return bytearray([(b<<1&255)|(b>>7) for b in tmp]).decode("utf8")
sqlyogini = os.environ.get('APPDATA')+"\\SQLyog\\sqlyog.ini"
print("sqlyogini文件路径:",sqlyogini)
ini = configparser.ConfigParser()
ini.read(sqlyogini,encoding='utf8')
connections = [r for r in ini.sections() if 'name' in ini.options(r) and ini.get(r,'password')]
for c in connections:
name = ini.get(c,'name')
host = ini.get(c,'host')
user = ini.get(c,'user')
b64pass = ini.get(c,'password')
password = decode(b64pass)
print(name,host,user,sep='\n')
print('密码',password)
print('----------------------------------------------------------------------------------')
运行程序后输出:
sqlyogini文件路径: C:\Users\root\AppData\Roaming\SQLyog\sqlyog.ini
新连接
localhost
root
密码 aa新连接bb
2017-4-8 21:55:53 codegay
参考资料:
Retrieve passwords stored in SQLyog https://dd9e.blogspot.jp/2014/05/retrieve-passwords-stored-in-sqlyog.html
sqlyog-decode-pwd https://github.com/gkralik/sqlyog-decode-pwd/blob/master/decode.py
以下是 sqlyog源码中密码加密解密的函数:https://github.com/webyog/sqlyog-community/blob/dc5840df35705e8b38058de862b6409135293c53/src/CommonHelper.cpp
额外说一句,sqlyog的代码感觉是相当于好看的。
DecodePassword(wyString &text)
{
wyChar pwd[512]={0}, pwdutf8[512] = {0};
strcpy(pwdutf8, text.GetString());
DecodeBase64(pwdutf8, pwd);
RotateBitLeft((wyUChar*)pwd);
strncpy(pwdutf8, pwd, 511);
text.SetAs(pwdutf8);
return wyTrue;
}
/*rotates bit right */
void
RotateBitRight(wyUChar *str)
{
wyInt32 count;
for(count = 0; str[count]; count++)
str[count] = (((str[count])>>(1)) | ((str[count])<<(8 - (1))));
return;
}
// We keep the name in encrypted form.
// so we do a bit rotation of 1 on the left before writing it into the registry.
void
RotateBitLeft(wyUChar *str)
{
wyInt32 count;
for(count = 0; str[count]; count++)
str[count] = (((str[count])<<(1)) | ((str[count])>>(8 - (1))));
return;
}
wyBool
EncodePassword(wyString &text)
{
wyChar *encode = NULL, pwdutf8[512] = {0};
strcpy(pwdutf8, text.GetString());
RotateBitRight((wyUChar*)pwdutf8);
EncodeBase64(pwdutf8, strlen(pwdutf8), &encode);
strncpy(pwdutf8, encode, 511);
text.SetAs(pwdutf8);
if(encode)
free(encode);
return wyTrue;
}
python3读取sqlyog配置文件中的MySql密码的更多相关文章
- 读取HeidiSQL 配置文件中的密码
读取HeidiSQL 配置文件中的密码 2017-1-21 5:42:01 codegay HeidiSQL是一款开源的SQL管理工具,用管理MYSQL,MSSQL 等数据库, 很多管理工具都会把密码 ...
- 在OpenErp的配置文件中为数据库密码加密
openerp连接数据库的用户名和密码可以命令行给出, 也可以设置在配置文件中, 如下例所示: db_user = openerp db_password = laoliu 因为它使用了明文的密码 ...
- 转 python3 读取 ini配置文件
在代码中经常会通过ini文件来配置一些常修改的配置.下面通过一个实例来看下如何写入.读取ini配置文件. 需要的配置文件是: 1 [path] 2 back_dir = /Users/abc/Pych ...
- 单例模式读取properties配置文件中的信息
public class ConfigManager { private static ConfigManager config = null; //创建Properties文件 读取配 ...
- Windows环境下redis 配置文件中设置的密码无效
当我们安装了redis服务后,发现在其配置文件redis.windows.conf(或redis.conf)设置了密码:requirepass ****** 但是打开redis-cli.exe后输入命 ...
- EasyPlayerPro Windows播放器读取xml配置文件中的特殊字符问题
问题被反馈 今日一客户反馈说播放不了带用户名密码的流, 奇怪,这个问题不存在啊-,按照客户的说法, 是将url地址保存在配置文件中,然后再打开EasyPlayerPro运行: 问题复现 在EasyPl ...
- 【Quartz】解密properties配置文件中的账号密码
在配置quartz时,为了保密某些信息(特别是账号密码),通常会使用密文.那么在实际使用这些配置信息时,需要进行解密.本文提供一种解密方法如下: (1)假设在properties文件中加密了账号密码 ...
- 修改Linux服务器中的MySql密码
1.可以直接在数据库中修改,因为知道root密码,所以直接登录 mysql -uroot -p 2.查看一下数据库,修改root密码需要使用如下图所示的mysql数据库 3.通过use mysql指明 ...
- 修改xampp中的MySQL密码
1.开启MySQL服务后,点击XAMPP Control Panel上的Admin按钮 2.依次点击"账户"--最后一个"修改权限"--修改密码 3.输入两次相 ...
随机推荐
- openssl 生成pfx
证书可以通过几种渠道获得, 可以购买, 可以使用IIS生成, 也可以使用Openssl这样的工具生成证书. 本篇文章主要介绍openssl生成pfx文件 首选去网关下载openssl 下载地址:htt ...
- 添加“Git Bash Here”到右键菜单
1.按键盘上的组合键[Win+R]把运行调出来 2.在运行中输入[regedit]再点击确定. 3.定位到HKEY_CLASSES_ROOT\Directory\Background\shell(如果 ...
- EOJ Monthly 2019.2
题解 A 回收卫星 #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/s ...
- ubuntu1604 golang环境
copy来的,这里记录一下 1. 升级系统: sudo apt-get upgrade 2. 安装docker 下载docker-ce: https://download.docker.com/lin ...
- MVC架构模式详细说明
一.简介: 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围. 模型-视图-控制器模式,也称为MVC模式(Mod ...
- 【Java】【11】String数组和List相互转换
正文: 1,String[]转List String[] strs = {"aa", "bb", "cc"}; //String数组 //方 ...
- 搭建iview环境
一.最快捷方式安装: $ npm install iview --save 二.一般在 webpack 入口页面 main.js 中如下配置: import Vue from 'vue'; impor ...
- git操作大全
分支克隆 1. git clone [git路径] #克隆仓库代码 2. git clone [Git路径] -b [分支name] #克隆仓库下某分支代码 查看分支 1.git branch #查看 ...
- css的em是根据什么来写的
em是要依靠父元素的值来计算的 1.字体计算公式依旧 1 ÷ 父元素的font-size × 需要转换的像素值 = em值 转自:https://zhidao.baidu.com/question/7 ...
- 意想不到的javascript
最近总遇到些叫人想不明白的javascript,先列出来玩玩: 1. var name=1; switch(name){ case 1:console.log(name); break; defaul ...