- 弱口令识别思路:
- mysql弱口令识别
- 场景一
- osi模型表示层加密
- osi模型表示层未加密
- 1. 通过抓包的方式可以获取到用户密码password关键信息
- 2. password字段密码并非mysql数据库中入库用户密码
- 3. 因此,如果想要解密流量中“password关键信息”,需要建立“password关键信息”与入库密码之间关系。
- 4. 数据库中用户入库密码mysql.user.password加密方式有以下三种
- 5. 假设mysql报文中截获的密码关键信息为package.user.password(对应上图报文中password字段),不同加密版本package.user.password的生成算法
- 6. 假设mysql用户入库密码为mysql.user.password,不同版本package.user.password与mysql.user.password的密码验证过程如下
- 总结:
- 场景二
- 场景一
- ssh弱口令识别
弱口令识别思路:
通过对大量已知明文弱口令密码按照与应用程序相同加密算法进行加密、对比,从而判断识别用户弱口令密码。
mysql弱口令识别
场景一
通过截获网络中流量识别弱口令
osi模型表示层加密
表示层以ssl协议作为载体加密传输mysql应用报文,单从网络流量中无法获取服务器生成的私钥信息,因此无法解密客户端加密信息,也无法通过流量中的用户关键信息完成弱口令识别
osi模型表示层未加密
1. 通过抓包的方式可以获取到用户密码password关键信息
2. password字段密码并非mysql数据库中入库用户密码
3. 因此,如果想要解密流量中“password关键信息”,需要建立“password关键信息”与入库密码之间关系。
4. 数据库中用户入库密码mysql.user.password加密方式有以下三种
兼容版本 | 插件名 | 入库密码mysql.user.password生成算法 | mysql语法函数 | 是否验证 |
---|---|---|---|---|
4.1 | mysql_old_password | hash(hash(明文密码)) | OLD_PASSWORD(str) | 否 |
4.1~5.7.6 | mysql_native_password | SHA1(SHA1(明文密码)) | PASSWORD(str) | 是 |
5.7.6+ | sha256_password | 未知 | SHA2(str) | 否 |
5. 假设mysql报文中截获的密码关键信息为package.user.password(对应上图报文中password字段),不同加密版本package.user.password的生成算法
1) mysql_old_password插件
stage1_hash = hash(明文密码)
package.user.password= hash(scramble +hash(stage1_hash) )
2) mysql_native_password插件
stage1_hash = SHA1(明文密码)
package.user.password= SHA1(scramble + SHA1(stage1_hash)) XOR stage1_hash
3) scramble 值为下图蓝色背景字段:
6. 假设mysql用户入库密码为mysql.user.password,不同版本package.user.password与mysql.user.password的密码验证过程如下
1) mysql_old_password插件
1.服务器发送随机字符串 (scramble) 给客户端。
2.客户端把用户明文密码加密一下,然后再将其与服务器发送的随机字符串加密一下,然后变成了新的 scramble_buff 发送给服务端。
3.服务端将 mysql.user.password 中的值加上原始随机字符串进行加密,如果加密后的值和客户端发送过来的内容一样,则验证成功。
2) mysql_native_password插件
1.服务器发送随机字符串 (scramble) 给客户端。
2.客户端作如下计算,然后客户端将 token 发送给服务端。
stage1_hash = SHA1(明文密码)
package.user.password= SHA1(scramble + SHA1(stage1_hash)) XOR stage1_hash
3.服务端作如下计算,比对 SHA1(stage1_hash) 和 mysql.user.password 是否相同。
stage1_hash = package.user.password XOR SHA1(scramble + mysql.user.password)
注:这里实际用到了异或的自反性: A XOR B XOR B = A ,对于给定的数 A,用同样的运算因子 B 作两次异或运算后仍得到 A 本身。
总结:
两种加密方式,如果只有package.user.password或入库密码(mysql.user.password),是可以通过撞库等手段还原明文密码,从而可以做弱口令检测 注:如果只有流量中的package.user.password,检测弱口令时,需要针对每个既定弱口令结合scramble从新进行加密,再与package.user.password对比,工作量大。
场景二
通过爆破工具,结合弱密码字典识别弱口令,暂未发现好用的工具,有了解的童鞋可以分享出来~
ssh弱口令识别
场景一
通过截获ssh流量,识别用户弱口令
ssh采用非对等公私钥对传输过程认证过程中的用户明进行加密,在没有私钥的情况下无法解密认证阶段关键信息。
场景二
通过爆破工具,结合弱密码字典识别弱口令
1. 安装爆破工具hydra
2. 下载源码、配置编译项、安装,具体步骤参考源码仓库readme
如安装在centos系统,想爆破ssh服务,还需要运行安装以下依赖模块 yum -y install gcc libssh-devel openssl-devel
3. 自定义数据字典和目标ip文件
1) 用户名文件
用户名集合,不同用户名换行分割
2) 用户密码文件
弱口令密码集合,不同密码换行分割
3) 目标ip文件
目标ip文件,不同密码换行分割
4. 运行命令
hydra -L [用户名文件] -P [弱口令密码文件] -M [目标ip文件] ssh
5. 结果
注:弱口令字典可以在kail系统发行版/usr/share/wordlists/dirb 目录获取