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