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传参
不赘述了,抓包改就可