phpMyAdmin getshell总结
- phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。
一、phpMyAdmin写权限(into outfile)getshell
利用条件
- 1.知道网站绝对路径
- 2.对web目录具有写入权限
- 3.secure_ file_ priv没有具体值
实战步骤
- 1.首先,获取网站绝对路径:
方法一:
通过phpinfo.php页面获取:
方法二:
通过SQL语句查询,获取mysql所在的绝对路径:
当然,方法还有很多,比如网站报错可以收集绝对路径等。
- 2.执行SQL语句,写入一句话,如下图,可以看到这里执行SQL语句出错,提示MySQL服务器正在使用
--secure_file_priv
选项运行,无法执行SQL语句。
-
3.查看
secure_file_priv
选项,看是否可写,命令如下:
SHOW VARIABLES LIKE \'secure_file_priv\'
当secure_file_priv的值为null ,表示限制mysql 不允许导入|导出当secure_file_priv的值为/tmp/ ,表示限制mysql 的导入|导出只能发生在/tmp/目录下当secure_file_priv的值没有具体值时,表示不对mysql 的导入|导出做限制
-
如下图,可以看到,这里的值为NULL,则表示不允许mysql导入导出,所以这里我们没有写权限,也就无法使用into outfile方法getshell。
-
4.
--secure_file_priv
选项的值,只能通过MySQL配置文件进行修改,这里无法使用SQL语句进行修改,如下,修改my.ini文件,没有
secure_file_priv
选项添加一个即可,然后重启服务:
- 5.再次执行写入shell的SQL语句,可以看到SQL语句执行成功。
- 6.执行代码,使用菜刀连接。
二、phpMyAdmin通过日志文件getshell
利用原理
首先介绍两个MySQL全局变量(general_log、general_log file)
- 1.
general_log
指的是日志保存状态,默认是关闭的,一共有两个值(ON/OFF)ON代表开启/OFF代表关闭。
- 2.
general_log_file
指的是日志的保存路径,指定为一个php文件,最后用一句话木马进行SQL查询来写入shell。
实战步骤
- 1.首先查看general_log是否开启:
SHOW VARIABLES LIKE \'general_log\';
可以看到这里的general__log是关闭状态,也就是说不保存SQL语句到日志中。
注意:general__log 变量表示保存每一条你执行的SQL语句到文件中,所以这里我们需要将general_log变量的值修改为On,这里就会新建一个日志文件,用来保存我们执行的SQL语句。
- 2.执行SQL语句开启general_log。
SET GLOBAL general_log = ON;
再次查看general_log变量,可以发现它的值已修改成ON,开启成功。
- 3.然后把
general_log_file
设置为shell的绝对路径(
general_log_file
指的是日志的保存路径)。
- 4.然后执行SQL查询语句,写一个一句话进去。(这里只要执行SQL语句,就可以写入到刚才我们创建的日志文件当中)
- 5.查看创建的日志文件,可以看到shell已经写入。
- 6.尝试执行代码,使用菜刀连接。