python3读取sqlyog配置文件中的MySql密码
2017-04-08 22:23
459 查看
这个人有什么目的?:
我多多少少听过一些安全圈的大牛说到类似的思路,大意是可以通过扫描各种程序和服务的配置文件(比如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.htmlsqlyog-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; }
相关文章推荐
- python与mysql交互/读取本地配置文件/交互报错
- 利用sqlyog配置MySQL自动备份sql文件
- 读取配置文件和自定义配置文件(python实现)
- Python利用ConfigParser读取配置文件
- Python的系统管理_11_ConfigParser读取配置文件
- python中读取配置文件ConfigParser
- mysql中的配置文件读取顺序
- python 学习记录(11)-文件处理/读取文件/文件写入内容/文件删除/文件复制/文件重命名/后缀名/内容查找与替换/文件比较/ 配置文件访问/目录创建与删除/遍历目录/定向输出
- python读取配置文件
- python读取和自定义配置文件的教程
- Python模块之: ConfigParser 配置文件读取
- 用python写的一个超小型配置文件读取器
- 使用python的ConfigParser模块方便的读取配置文件
- Python读取ini配置文件
- Python利用ConfigParser读取配置文件
- xml做mysql的配置文件及php对配置文件信息的读取 连接数据库
- 使用python读取csv文件,并将数据更新至mysql
- phpmyadmin 尝试连接到 mysql 服务器 但服务器拒绝连接。您应该检查配置文件中的主机、用户名和密码 并确认这些信息与 mysql 服务器管理员所给出的信息一致。 .
- Python 读取配置文件 生成配置文件 试例
- python 读取配置文件方法