LOAD DATA INFILE的工作原理
了解一下LOAD DATA INFILE的工作原理。使用wireshark抓包:
-
客户端(即攻击者)连接mysql服务器3306端口
-
服务器发送问候包,包括协议线程ID,版本,mysql认证类型等。
-
客户端的下一个数据包是带有用户名,密码,数据库的认证包,以及LOAD DATA LOCAL选项的标志位
-
之后有一些包含客户端指定查询的数据包,如:“'show databases”',“'select @@ version_comment limit 1”'等
-
然后是我们的查询语句load data local infile '/etc/passwd' into table test.test fields terminated by 'n';以及回包
这个数据包对连接的客户端说:“嘿!请阅读/etc/passwd 文件并发给我”
上述过程就是LOAD DATA INFILE 的整个过程。如果能执行LOAD DATA INFILE 导入服务器上的文件自然是最好的,但是有时候我们并不能执行LOAD DATA INFILE,我们只能执行LOAD DATA LOCAL INFILE,即导入我们本机上的文件,这是因为我们当前账户没有读取服务器本地文件的权限。所以我们转换思路,互换一下服务器和客户端的位置,让被攻击者作为客户端来连接我们的服务器,并使客户端执行LOAD DATA LOCAL INFILE语句,下面的利用方式就是如此。
从客户端读取文件
关于LOAD DATA INFILE读取文件的技术并不新鲜,以前就有了相关的帖子、工具和文章(见文末参考连接),所以介绍一下从客户端读取文件的攻击流程:
攻击流程大致如上图-flow
-
攻击者向受害者提供MySQL服务器地址、账户、密码
-
受害者向攻击者提供的服务器发起请求,并尝试进行身份认证
-
攻击者的MySQL接受到受害者的连接请求,攻击者发送正常的问候、身份验证正确,并且向受害者的MySQL客户端请求文件。
-
受害者的MySQL客户端认为身份验证正确,执行攻击者的发来的请求,通过LOAD DATA INLINE 功能将文件内容发送回攻击者的MySQL服务器。
-
攻击者收到受害者服务器上的信息,读取文件成功,攻击完成。
攻击已经被写成了工具(如Rogue-MySql-Server Tool),工具将模拟一个假的MySQL服务器发送payload读取文件。
详细使用方式参考官方链接:
https://www.bettercap.org/modules/ethernet/servers/mysql.server/
原文始发于微信公众号(菜鸟小新):利用MySQL LOAD DATA读取任意文件
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论