这个人有什么目的?:

我多多少少听过一些安全圈的大牛说到类似的思路,大意是可以通过扫描各种程序和服务的配置文件(比如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密码的更多相关文章

  1. 读取HeidiSQL 配置文件中的密码

    读取HeidiSQL 配置文件中的密码 2017-1-21 5:42:01 codegay HeidiSQL是一款开源的SQL管理工具,用管理MYSQL,MSSQL 等数据库, 很多管理工具都会把密码 ...

  2. 在OpenErp的配置文件中为数据库密码加密

      openerp连接数据库的用户名和密码可以命令行给出, 也可以设置在配置文件中, 如下例所示: db_user = openerp db_password = laoliu 因为它使用了明文的密码 ...

  3. 转 python3 读取 ini配置文件

    在代码中经常会通过ini文件来配置一些常修改的配置.下面通过一个实例来看下如何写入.读取ini配置文件. 需要的配置文件是: 1 [path] 2 back_dir = /Users/abc/Pych ...

  4. 单例模式读取properties配置文件中的信息

    public class ConfigManager {    private static ConfigManager config = null;    //创建Properties文件  读取配 ...

  5. Windows环境下redis 配置文件中设置的密码无效

    当我们安装了redis服务后,发现在其配置文件redis.windows.conf(或redis.conf)设置了密码:requirepass ****** 但是打开redis-cli.exe后输入命 ...

  6. EasyPlayerPro Windows播放器读取xml配置文件中的特殊字符问题

    问题被反馈 今日一客户反馈说播放不了带用户名密码的流, 奇怪,这个问题不存在啊-,按照客户的说法, 是将url地址保存在配置文件中,然后再打开EasyPlayerPro运行: 问题复现 在EasyPl ...

  7. 【Quartz】解密properties配置文件中的账号密码

    在配置quartz时,为了保密某些信息(特别是账号密码),通常会使用密文.那么在实际使用这些配置信息时,需要进行解密.本文提供一种解密方法如下: (1)假设在properties文件中加密了账号密码 ...

  8. 修改Linux服务器中的MySql密码

    1.可以直接在数据库中修改,因为知道root密码,所以直接登录 mysql -uroot -p 2.查看一下数据库,修改root密码需要使用如下图所示的mysql数据库 3.通过use mysql指明 ...

  9. 修改xampp中的MySQL密码

    1.开启MySQL服务后,点击XAMPP Control Panel上的Admin按钮 2.依次点击"账户"--最后一个"修改权限"--修改密码 3.输入两次相 ...

随机推荐

  1. Zookeeper初始(一)

    量大,服务器压力大.需要用到分布式,集群. 问题1:三台机器,一个请求如何落到一台机器上?如何协调工作 问题2:集群如何选取leader? 问题3:既然是分布式,集群,一个请求只能有一台机器接接收并处 ...

  2. day24

    ## 复习 1.类对象属性的查找顺序: 先找自身再找类1)类的名称空间:直接写在类中2) 对象的名称空间:写在__init__方法中,通过self.属性形成名称空间中的名字3) 类的方法:在类中用@c ...

  3. 一张图了解Spring Cloud微服务架构

    Spring Cloud作为当下主流的微服务框架,可以让我们更简单快捷地实现微服务架构.Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟.经得起实际考验的服务框架组合起来 ...

  4. mongo学习笔记2--索引及表设计

    -背景: 鉴于我们使用mongo作为数据库,期间少不了需要添加索引和对业务表进行设计.因此以下我对mongo索引及表设计原则做了一些分享.希望对大家有用,如有错误还望指正~ MongDB的索引类型简介 ...

  5. storybook配置之基本配置和webpack配置

    默认配置 Storybook有一个默认的适合(suits)大型项目开发的webpack配置,假如你使用react app,他类似于创建一个react app的配置,并经过调整(tweaked ),使其 ...

  6. mysql将查询结果导出

    一.首先确认当前数据库设置导出是允许的 show variables like '%secure%'; 如果是null则代表不允许,这时可以用命令修改,或者直接修改数据库配置文件my.ini,在其中添 ...

  7. yii2常用查询

    两表连查 $model = Article::find()->joinWith(['type'])->select('new,t_name,article.t_id')->asArr ...

  8. excel 批量上传图片

    1.在excel中  输入公式  ="<table><img src=""D:\素材\"&A2&".jpeg&quo ...

  9. istio-mix介绍

    mixer 概念 Mixer 是负责提供策略控制和遥测收集的 Istio 组件: 在每次请求执行先决条件检查之前以及在每次报告遥测请求之后,Envoy sidecar 在逻辑上调用 Mixer. 主要 ...

  10. c# winform Chart Pie 中若X轴数据为字符串时,#VALX取值为0

    https://q.cnblogs.com/q/83848/ 在winform程序中用自带的Chart进行画图表时,若画饼图,其中X轴数据为字符串,这时候如果想设置Label值的格式为#VALX:#V ...