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.输入两次相 ...
随机推荐
- log4.net使用指南
1.简介 1.1 Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统来诊断 ...
- Java并发编程的挑战
并发编程的目的是为了让程序运行得更快,但是,并不是线程启动的越多,就能让程序最大限度地并发执行.并发编程时,会面临非常多的挑战,比如上下文切换的问题,死锁的问题,以及受限于各种硬件和软件的资源限制问题 ...
- python 学习笔记 2 ----> dive into python 3
Python Shell idle的使用 >>> >>>help() ----> help> 可以在help这个工具中查找Python内置函数的文档等等 ...
- 【A tour of go】练习题
练习:循环与函数 (1)题目 为了练习函数与循环,我们来实现一个平方根函数:用牛顿法实现平方根函数. 计算机通常使用循环来计算 x 的平方根.从某个猜测的值 z 开始,我们可以根据 z² 与 x 的近 ...
- loglog 函数的使用
验证数值算法的正确性,有一个很重要的指标就是收敛阶($\tt\bf Convergent~Rate$) 当有误差估计: $$Error=\lVert u(x)-u_N(x) \rVert \simeq ...
- CF-551-D-树dp/思维
http://codeforces.com/contest/1153/problem/D 给出一颗有根树,叶子节点可以从1开始赋值但不能相同,每个节点有一个属性max/min表示选择所有儿子值中的ma ...
- Linux 下各文件夹的含义
/bin 该目录中存放Linux的常用命令./boot 该目录默认下存放的是Linux的启动文件和内核./cdrom 该目录在刚安装系统时是空的,你可以将光驱文件系统挂在这个目录下./dev 该目录包 ...
- web service 上传file说明
之前做过一个接口,PI发布WEB SERVICE给对方调,传附件到SAP... 接口中包含文件名称,文件类型,文件流... 1.SOAPUI新建项目: 文件内容的地方会自动带上一个ID,这个ID对应文 ...
- 接前一篇:new select option保存搜索条件
WD_SELECT_OPTIONS_20新加了很多好玩的东西,尤其是里面的保存搜索条件和使用保存的搜索条件.因为这个比较想WEB UI,所以兴趣比较高一点,WEB UI里是把参数拼成XML存起来的,我 ...
- 配置rpm本地源及局域网环境下使用
LInux个人开发过程中可以直接连到公网,所以想要安装各种软件时直接安装即可,但工作环境往往很让人头疼. 如果应用场景是没法链接外网的,公司内部绝大多数情况下是在自己的局域网下玩,这时候想装个软件是相 ...