首先我们要知道的是在提权之前的几个必要条件
1)必须拥有root账号和密码。2)通过查看Mysql的版本号进行下一步渗透:当版本号Mysql大于5.1时,需在lib目录下新建plugin文件,才可以导出UDF;当大于5.6.34后,它会有安全模式 :--secure-file-priv,禁止使用sql命令写入或写出
其次,对应第一步,我们如何查找root账户和密码
1)通过文件关键词查找可能的存储文件,eg:config,database,conf,data,db,mysql
2)通过下载数据库文件获取账户和密码,eg:user.MYD,user.MYI
在这个步骤里,我们需要注意的是,密码有可能为一半,我们只需要在下方进行寻找另一半就可以了,然后拼接起来,进行MD5解密可以出明文。
到了这,大家可能在疑惑,如何执行第一步,我们可以对网站进行上传木马,然后进入到Mysql执行界面,调用SQL命令执行函数去执行我们的cmd命令,或直接进行修改或下载相关文件。
接下来,进行突破mysql安全模式写入shell的讲解,顺便将一个完整的模拟提权的过程展现给大家。
上传木马后,可执行文件查改操作(注意版本号)
也可进行SQL命令执行函数去执行我们想要的操作,例如可通过查询安装目录进行查看修改等,请自行了解mysql命令。
接下来进入我们的突破mysql安全模式写入shell环节
1)安全模式原理:mysql 5.6.34版本以后 secure_file_priv的值默认为NULL,且无法用sql语句对其进行修改。
2)修改设置:
Linux:
可找到/etc/my.cnf的[mysqld],然后在后面添加local-infile=0选项。
windows:
可修改mysql.ini 文件,在[mysqld] 下添加条目: secure_file_priv =
然后保存重启mysql。
3)通过日志利用:
mysql日志主要包含:错误日志、查询日志、慢查询日志、事务日志
思路一:通过全局变量进行getshell(需要SUPER权限)
用到两个全局变量,general_log和general_log_file
general_log :mysql中记录sql操作的日志,所有的查询语句会记录在这,默认为关闭。
general_log_file :操作日志存放的路径
执行SQL语句:set global general_log='ON'
然后将shell地址写入日志存放地址中:set global general_log_file='C:/phpstudy/www/shell.php'
最后执行sql语句即可,MySQL就会将执行的语句记录到shell.php里,就可以getshell。
思路二:利用慢查询日志getshell
查看变量情况:show variables like '%slow_query_log%';
启用慢查询日志:set global slow_query_log=1;
修改日志文件:set global slow_query_log_file='dC:/phpstudywww/shell.php'
执行sql语句,写入shell(注意此为慢查询,故加入sleep(12),时间大于10秒即可,eg:select ' and sleep(12); )