Mysql溯源-任意文件读取

前言

读了《MySQL蜜罐获取攻击者微信ID》的文章,文中说明了通过mysql蜜罐读取攻击者微信ID的过程,抱着学习的态度尝试了一下

原理

mysql中有一个load data local infile函数能够读取本地文件到mysql数据库中。当攻击者用爆破mysql密码的扫描器扫描到我们的mysql并连接上的时候,客户端(攻击者)会自动发起一个查询,我们(服务端)会给与一个回应,我们在回应的数据包中加入load data local infile读取攻击者的本地文件到我们数据库中,达到反制的目的。

具体过程

LOAD DATA INFILE

LOAD DATA INFILE语句用于高速地从一个文本文件中读取行,并写入一个表中。文件名称必须为一个文字字符串。

LOAD DATA INFILE 是 SELECT ... INTO OUTFILE 的相对语句。把表的数据备份到文件使用SELECT ... INTO OUTFILE,从备份文件恢复表数据,使用 LOAD DATA INFILE。基本语法如下:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char' ]
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...)]

这个功能默认是关闭的,当我们本地mysql服务器没有开启这个功能执行时会报错:

我们可以通过如下命令查看功能状态

show global variables like 'local_infile';

我们通过如下命令开启这个功能:

set global local_infile=1;

然后我们通过如下命令尝试读取本地的C盘目录下的1.txt文件

load data local infile 'C:/1.txt' into table test fields terminated by '\n';

通信过程

我们模拟一下攻击者通过扫描器连接MySQL数据库的通信过程

工具:Wireshark


首先我们通过Wireshark抓取通信流量查看一下通信过程

注意:
当自己电脑既是客户端又是服务器时,互相访问时流量并没有经过网卡,windows系统又没有提供本地回环网络的接口,
wireshark在windows系统上默认使用的是WinPcap来抓包的,用它监控网络的话只能看到经过网卡的流量,看不到访问
localhost的流量,所以才会出现第一次连接始终没有数据包的状况。解决这个问题的两种办法是:要么服务器和客户端
不要在同一台机器上,要么用Npcap来替换掉WinPcap,Npcap提供环回接口
  1. 首先是Greeting包,返回了服务端的版本信息

  1. 接着是客户端发起连接请求

  1. 然后经过TCP的三次握手之后,客户端会自动发起一次查询,服务端会给予一个回应

我们就是在上面的最后一步回应中插入读取客户端本地文件的语句,从而读取客户端的本地文件到数据库表中。

漏洞复现

下载地址:https://github.com/allyshka/Rogue-MySql-Server

  1. 解压压缩包

然后编辑rogue_mysql_server.py这个文件,修改里面的读取文件的路径(windows或者linux的路径都行)

  1. 用python启动rogue_mysql_server.py

  2. 查看数据库端口是否开启nmap -sS -p- 192.168.33.222

  1. 我们用自己的数据库连接软件(例如Navicat)去连接我们刚刚创建的恶意mysql服务器
  • IP:192.168.33.222
  • PORT:3306
  • USERNAME:root
  • PASSWORD:(空的就行)

  1. 然后我们会看到当前目录下面多了一个mysql.log文件,我们发现本地的C:/1.txt文件被读取到了mysql.log文件中

实验结束

参考文章

  1. https://blog.csdn.net/weixin_46164380/article/details/105230747
  2. https://blog.csdn.net/Java0258/article/details/112332367

最新文章

  1. Maching Learning 学习资料
  2. PAT乙级 1028. 人口普查(20)
  3. 用minicom 产看 usb的串口
  4. DOM解析原理
  5. PowerBuilder预防数据库死锁相关处理
  6. matlab中选择图片路径
  7. soj 2543 完全二叉树
  8. c++学习笔记之封装篇(上)
  9. Core Graphics框架
  10. GLSL ES 中的存储变量修饰符(const/attribute/uniform/varying/in/centroid in/out/centroid out)
  11. 了解JVM运行时的内存分配
  12. Qt5OpenGL.顶点像素大小设置
  13. java百度云推送
  14. 我的BRF+自学教程(三):动态技术
  15. IO流-file
  16. AR涂涂乐
  17. python中生成器
  18. 错误为Lc.exe已退出,代码为-1
  19. Kubernetes学习之路(二十一)之网络模型和网络策略
  20. 兼容多浏览器的网页复制插件(ZeroClipboard)

热门文章

  1. Hadoop 相关知识点(一)
  2. winxp 关闭445端口
  3. github单独下载某一个文件夹
  4. Element-ui 中对表单进行验证
  5. Nginx 1.9.7.2 + PHP 5.6.18(FastCGI)在CentOS Linux下的编译安装
  6. my41_主从延迟大排查
  7. 华为云函数中使用云数据库的JavaScript SDK基础入门
  8. 学习 27 门编程语言的长处,提升你的 Python 代码水平
  9. Python pyecharts绘制水球图
  10. Office365与Office2016差异汇总