sqli-labs通关31-37
Less-31 Protection with WAF
WAF防护
双引号) 闭合,–+注释,基于错误的联合注入
?id=1&id=.1") union select 1,2,database() --+
Less-32 Bypass addslashes()
addslashes()绕过
查看源码
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;
}preg_replace 函数执行一个正则表达式的搜索和替换。
此题将单引号,双引号转换为双反斜杠(\)和\i表示不区分大小写
并且将字符集设置为gbk,导致可以进行宽字节注入来绕过单引号转义

输入单引号发现是经过转义的

因为gbk编码的,我们尝试%df’,然后将浏览器编码改为gbk,我们可以看到,他变成了汉字
这是因为加上反斜杠也就是%5c之后传入参数整体为%df%5c%27,而前面说过,在mysql里认为前两个字符是一个汉字,也就是‘運’,而后面的单引号就逃逸出来了
–+注释,单引号闭合,%df绕过单引号转义,基于错误的联合注入
爆库:
?id=-1%df'  union select 1,2,database()--+
正常步骤,不在赘述
Less-33 Bypass addslashes()
和上一关一致,只不过换成了addslashes函数转义
- addslashes() 函数
 函数返回在预定义字符之前添加反斜杠的字符串。
 单引号(’)
 双引号(”)
 反斜杠(\)
 NULL
payload同
Less-34 Bypass Add SLASHES
post方式,同32关

要注意字段数变成2了,不是3
Less-35 why care for addslashes()
为什么要担心addslashes()
查看源码
数字型的,他的防护都没用,直接数字型注就可,
数字型、基于错误的联合注入、直接注入
?id=-1 union select 1,2,database()
正常步骤,不在赘述
Less-36 Bypass MySQL Real Escape String
MySQL Real Escape String绕过
MySQL Real Escape String()函数:转义在 SQL 语句中使用的字符串中的特殊字符。

查看源码发现还是使用gbk编码
爆库:
?id=-1%df' union select 1,2,database() --+
正常步骤,不再赘述
Less-37- MySQL_real_escape_string
同上关,变成了post传参
不赘述了,抓包改就可
 
                        
                        