sql绕过技巧

做完第一部分sqli—labs时,去做sql注入题发现远没有想像的那么简单,实战中还会有很多的过滤跟waf,记录下我最近遇到的sql过滤跟waf

注释符被过滤

解决方案,构造语句让分号完美闭合不去使用注释符。

and or 被过滤

解决方案:用&&代替and 用 ||代替or 有时需要用url编码过的&&与||

空格被过滤

解决方案:如果注释符没被过滤可以用/**/来代替空格 如果注释符也被过滤掉则需要用 其他字符进行代替
可以使用%09  %0a  %0b  %0c  %0d  %a0代替空格 情况不同,用不同的字符进行代替,或者使用括号分割语句当然分割的语句也要是不需要连一起的 union select 不能用括号分割。

union select 被过滤

解决方案:如果对大小写敏感则可以用大小写进行绕过 比如:UnIoN SeLeCt 如果大小写不行还可以用叠加绕过
如:uniunionon selselselectectect 具体要看他们过滤了几次 去叠加几次.

union+select 被过滤

解决方案:这个是当union 与 select 同时出现时进行过滤
所以可以用union all select 代替 union select 或者利用之前用来代替空格的字符隔开union select。

waf之利用正则只去匹配数字

解决方案:多次对id进行重定义,当其只匹配一次id时可以进行绕过,如:id=1&id=2&id=0

宽字节注入

解决方案:利用%df去与%5c组成双字节 从而使后面的攻击代码不被转义 
如:id=-1%df' union select 1,2,3 --+ 当使用的是Mysql_set_charset('gbk','$conn');函数时可以避免被宽字节注入。

反引号绕过

解决方案:有的题目会将#作为数据库名,然后进行``绕过,反引号是为了区分MySQL的保留字与普通字符而引入的符号。

逗号绕过

解决方案:在使用盲注的时候,需要使用到substr(),mid(),limit。这些子句方法都需要使用到逗号。对于substr()和mid()这两个方法可以使用from to的方式来解决。

后续遇到的会进行补充