关于MySQL LOAD DATA特性的利用与思考
昨天做测试的时候,遇到个Adminer,成功利用MySQL LOAD DATA特性进行文件读取,并最终getshell。
MySQL LOAD DATA
主要是用于读取一个文件的内容并且放到一个表中。
正常流程:
客户端:hi~ 我将把我的 data.csv 文件给你插入到 test 表中!服务端:OK,读取你本地 data.csv 文件并发给我!客户端:这是文件内容:balabal!
恶意流程:客户端:hi~ 我将把我的 data.csv 文件给你插入到test表中!服务端:OK,读取你本地的 /etc/passwd 文件并发给我!客户端:这是文件内容:balabal(/etc/passwd文件的内容)!
该特性适用于:MySQL Client、PHP with mysqli、PHP with PDO(默认未开启MYSQL_ATTR_LOCAL_INFILE属性,需要手工开启才可以)、Python with MySQLdb、Python3 with mysqlclient、Java with JDBC Driver等。
Adminer
扫描端口,开放8080端口,访问为Adminer 登录页面
Adminer是一个使用PHP开发的数据库管理工具,和phpMyAdmin类似。
下载漏洞利用工具:Rogue-MySql-Server,配置完之后在服务上启动
填写服务器地址,访问
成功读取到目标的/etc/passwd文件
尝试读取web目录文件
后续直接读取配置文件,获取mysql账号密码
使用账号密码登录adminer
利用日志getshell
访问shell
思考
后续思考了下,只要服务端提供MySQL测试/连接的地方,都有可能存在此问题。
比如常见的:
- 远程管理(phpMyAdmin、Adminer等)
- 各类探针(LNMP探针、phpStudy探针、PHP探针等)
- 系统安装程序(wordpress、Discuz、phpwind等)
- 其他测试连接/工具页面
在fofa上搜了下,还挺多的
参考文章
https://lightless.me/archives/read-mysql-client-file.html
https://www.40huo.cn/blog/evil-mysql.html
https://xz.aliyun.com/t/3973
https://www.smi1e.top/mysql-load-data-%E8%AF%BB%E5%8F%96%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6/
https://xz.aliyun.com/t/6587
https://github.com/allyshka/Rogue-MySql-Server
- MongoDB的设计模式策略
- 如何用容器实现生产级Redis sharding集群一键交付
- Hadoop旧mapreduce的map任务切分原理
- 解读Neo4j全新的Python驱动程序
- MySQL 5.7 X Plugin:流水线技术vs.并行查询技术
- 在下函数式编程,有何贵干?
- 基于Keras/Python的深度学习模型Dropout正则项
- 揭秘深度强化学习
- Swoole-2.0.1-Alpha 已发布,提供PHP原生协程支持
- Google核心技术之——PageRank算法scala实现
- 代码审查拯救世界?
- Kafka实战:从RDBMS到Hadoop,七步实现实时传输
- Apache NiFi 1.0.0测试版:邮件路由应用新型ListenSMTP
- 为什么我坚持使用 JavaScript 函数声明
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 【每日一题】33. Search in Rotated Sorted Array
- 【每日一题】34. Find First and Last Position of Element in Sorted Array
- 【每日一题】35. Search Insert Position
- Head First设计模式——原型模式和访问者模式
- Java 新特性前瞻:封印类
- 每天手撕一道算法题-130. 被围绕的区域
- C#实现前向最大匹、字典树(分词、检索)
- Tomcat 中文乱码,设置UTF-8
- 从零搭建Spring Boot脚手架(4):手写Mybatis通用Mapper
- IDEA将Maven项目中指定文件夹下的xml等文件编译进classes
- 数据误操作,教你使用ApexSQLLog工具从 SQLServer日志恢复数据!
- 从零搭建Spring Boot脚手架(5):整合 Mybatis Plus
- SQL Server数据库阻塞,死锁查询
- 如何优雅地写出大规模线性规划的对偶
- 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)