MySQL客户端和服务端通信过程中是通过对话的形式来实现的,客户端发送一个操作请求,然后服务端根据客服端发送的请求来响应客户端,在这个过程中客户端如果一个操作需要两步才能完成那么当它发送完第一个请求过后并不会存储这个请求,而是直接就丢掉了,所以第二步就是根据服务端的响应来继续进行,这里服务端就可以欺骗客户端做一些事情。
但是一般的通信都是客服端发送一个MySQL语句然后服务端根据这条语句查询后返回结果,也没什么可以利用的,不过MySQL有个语法LOAD DATA INFILE
是用来读取一个文件内容并插入到表中,既可以读取服务器文件也可以读取客服端文件,读取客服端文件的语法是load data local infile "/data/test.csv" into table TestTable
;为了形象一点,这个语法的使用过程我用哦两个人的对话来表示:
正常情况下这个流程是没毛病,但是前面我说了客户端在第二次并不知道它自己前面发送了什么给服务器,所以客户端第二次要发送什么文件完全取决于服务端,如果这个服务端不正常,就有可能发生如下对话:
这样服务端就非法拿到了/etc/passwd的文件内容,今天我要实现的就是做一个伪服务端来欺骗善良的客户端。
Rogue-Mysql-Server
port是数据库端口
filelist是要读取的内容
然后伪造服务端利用脚本监听
python2 rogue_mysql_server.py
然后客户端执行数据库查询操作就可以得到客户端的信息
可以通过该漏洞与蓝屏的路径漏洞结合,做一个蜜罐诱导攻击者连接恶意mysql服务器,然后通过客户端本地读取该路径导致直接蓝屏,非常的骚
于是Mark一下
\\.\globalroot\device\condrv\kernelconnect
还可以通过XSS漏洞,同可以做一个蜜罐
<script>document.location='\\\.\\globalroot\\device\\condrv\kernelconnect';</script>
go语言编写伪造程序
恶意读取客户端请求