mysql riddle_MySQL曝中间人攻击Riddle漏洞,可致用户名密码泄露

c1cfa8fc60e34d8fba5b17fdc4a1202c.png

针对MySQL 5.5和5.6版本的Riddle漏洞会经由中间人攻击泄露用户名密码信息。请尽快更新到5.7版本。

Riddle漏洞存在于DBMS Oracle MySQL中,攻击者可以利用漏洞和中间人身份窃取用户名和密码。

“Riddle是一个在Oracle MySQL 5.5和5.6客户端数据库中发现的高危安全漏洞。允许攻击者在中间人位置使用Riddle漏洞破坏MySQL客户端和服务器之间的SSL配置连接。”漏洞描述写道。“此漏洞是一个非常危险的漏洞,因为首先它会影响MySQL – 非常流行的SQL数据库 – 其次会影响SSL连接,根据SSL的定义,它理应是安全的。”

Riddle漏洞的编号为CVE-2017-3305,当MySQL 5.5和5.6向服务器发送数据,包括用户名密码时,攻击者可以捕获它们。

针对5.5.49、5.6.30版本的安全更新并没有完全修复漏洞。专家注意到,5.7版本之后以及MariaDB系统没有受到漏洞影响。

安全研究员Pali Rohár称,导致Riddle漏洞的原因是之前存在于MySQL数据库中的BACKRONYM漏洞没有被修复。Backronym漏洞能在中间人攻击时用来泄露密码,即使流量经过加密。

针对稳定版本的MySQL 5.5.49和5.6.30的安全更新中添加了在验证过程完成后对安全参数的验证。”“由于动作是验证完成后做出的,因此利用Riddle进行中间攻击再与SSL降级配合,攻击者就可以窃取登录数据进行身份验证并登录到MySQL服务器,“Rohár写道。

“有趣的是,当MySQL服务器拒绝验证用户时,MySQL客户端不会报告任何与SSL相关的错误,而是会报告服务器发送的未加密的错误消息。而这些错误消息由中间人攻击者控制的。”

专家建议将客户端软件更新为MySQL 5.7或MariaDB,因为这些应用程序的安全更新是能够正常工作的。

PoC

作者给出了用Perl写的PoC脚本。它会在本地3307端口开启riddle,MySQL服务器运行在localhost:3306。

在中间人服务器运行riddle:

perl riddle.pl

将MySQL客户端与riddle连接: mysql –ssl-mode=REQUIRED -h 127.0.0.1 -P 3307 -u user -p password

如果你提供了正确的用户名密码,riddle就会连接到服务器,执行SQL语句并输出:

SELECT COUNT(*) FROM information_schema.TABLES –> 121

MySQL客户端会收到一条由riddle发送的错误信息:

ERROR 1045 (28000): Access denied: MITM attack

Oracle修复漏洞不及时

Riddle漏洞在二月份被发现,但是这个漏洞仍然能够影响到Oracle MySql软件。

“如果你不是Oracle客户的话,向他们报告漏洞是没有用的(即使是与安全相关的漏洞)。他们可以完全忽视任何报告,如果没人知道的话,他们会很高兴,因此不用修复漏洞了,“Rohár解释说。

“立即公开披露似乎是对用户最负责的解决方案,这是保护用户的唯一方法,能立即让他们知道应该做什么。”

本文作者:Sphinx

文章来自微信公众号:数据库开发

本文链接:http://www.yunweipai.com/15390.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的庆祝六一儿童节的程序的代码示例,你可以根据自己的需求进行修改和扩展: ```python import random # 欢迎界面 def welcome(): print("欢迎来到六一儿童节庆祝活动!") print("祝你度过一个快乐的儿童节!") print(" _nnnn_") print(" / \\") print(" / \\") print(" / O \\") print(" /\\ \\") print(" / \\ \\") print(" / \\ \\") print(" / \\ \\") print(" /________\\________\\\n") # 拼图游戏 def puzzle_game(): puzzles = [ "123\n456\n780", "456\n123\n780", "456\n780\n123" ] answer = random.choice(puzzles) print("请将下面的拼图块拼成以下图案:") print(answer.replace("\n", " ")) while True: print("请拖拽拼图块进行拼图,输入 q 退出。") puzzle = input("请输入你的拼图结果:\n").replace(" ", "").replace("\n", "") if puzzle == answer.replace("\n", ""): print("恭喜你,拼图成功!\n") break elif puzzle == "q": break else: print("拼图失败,请继续努力!\n") # 画画游戏 def paint_game(): print("请在画板上画出你的作品,输入 q 退出。") while True: command = input("请输入你要进行的操作:\n1. 画笔\n2. 橡皮擦\n3. 清空\n") if command == "q": break elif command == "1": print("你正在使用画笔。") elif command == "2": print("你正在使用橡皮擦。") elif command == "3": print("你正在清空画板。") else: print("无效的操作,请重新输入!\n") # 猜谜游戏 def riddle_game(): riddles = [ {"question": "什么东西站着、睡觉坐着、吃饭趴着?", "answer": "马桶"}, {"question": "大海里没有水,小河里有水,这是什么?", "answer": "字"}, {"question": "哪个字母最懒?", "answer": "懒"}, ] riddle = random.choice(riddles) print("请回答以下谜语:") print(riddle["question"]) while True: answer = input("请输入你的答案:\n") if answer == riddle["answer"]: print("恭喜你,猜对了!\n") break else: print("猜错了,请继续努力!\n") # 结束界面 def end(): print("谢谢参与,祝你度过一个快乐的儿童节!") print("记得分享你的作品和祝福到社交媒体上哦!") # 主程序 def main(): welcome() while True: command = input("请输入你要进行的活动:\n1. 拼图游戏\n2. 画画游戏\n3. 猜谜游戏\n4. 结束\n") if command == "1": puzzle_game() elif command == "2": paint_game() elif command == "3": riddle_game() elif command == "4": break else: print("无效的操作,请重新输入!\n") end() if __name__ == '__main__': main() ``` 这个程序包括欢迎界面、拼图游戏、画画游戏、猜谜游戏和结束界面等几个模块,你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值