sql注释符注入防御_SQL注入ByPass的一些小技巧

SQL注入Bypass技巧

注入点识别

SQL注入的第一步就是失识别注入点,一般都是在参数后面简单的and 1=1和and 1=2等来判断是否有注入点或者是否有WAF拦截,如果简单的and 1=1这种被WAF拦截了,可以使用如下方法绕过:

使用这些字符进行注入点识别:

+,-,*,%,/,<>,||,|,&,&&,也可以将and换成or,&&, ||等

也可以不使用and或者or,直接使用异或截断:

1^1^0,1^0^0

还可以使用{``operation}来识别注入点:

上面这些都可以绕过and1=1的拦截进行SQL注入点识别判断。当然更多的情况下是根据实际场景,灵活应用。

空白符

在SQL注入时当空格被过滤了,在MySQL中可以使用:

%09%0A %0B %0C %0D %A0 %20 /**/

注释符

在SQL注入中使用的注释符主要为:#, --+, /*xxx*/, /*!xxx*/, /*!50000xxx*/,在实际场景中可以将这些注释符嵌套应用,会有意想不到的效果,比如只需利用一个*/闭合多个/*!

(此方法目前可以绕过很多WAF哦)

特殊符号

经常在SQL注入时使用一些特殊符号即可绕过很多WAF规则,比如~, !, ``, @``, {x key}, 1.1, 1e1, (), emoji表情符号, @:=等,在实际场景中将这些符号灵活应用就可以绕过很多WAF:

Like和regexp

经常在通过盲注获取数据时需要使用MySQL自带函数,比如substring()等这些处理字符串的函数,但是如果WAF过滤了()时,这些函数就无法使用了导致无法猜测数据,这时可以使用like或者regexp获取数据:

爆库名、表名、字段名

通常情况下我们在手工注入数据库内容的时候都是使用MySQL自带的表名等,如下图:

但是在某些场景中(比如CTF)将MySQL自带的information_schema,SCHEMATA,TABLES,COLUMNS这些禁掉或者过滤了,导致无法使用上面的方法来获取数据库名和表名等内容,那么我们可以使用下面的方法:

爆库名:

原理就是当一个库中不存在的自定义函数他就会爆出当前库中没有此函数,如上图成功爆出ctf数据库名。

爆表名:

这里爆表名可以使用Polygon和linestring函数

爆字段名:

利用下面的方法一次爆出各个字段名:

原理就是在使用别名的时候,表中不能出现相同的字段名,否则就会报错,从而爆出字段名,在使用using函数依次爆出其他字段名。

过滤字段名获取数据

通常情况下获取到数据库名,表名,字段名后,就可以直接查询数据了,但是之前遇到一个场景就是过滤了字符处理函数和字段名,从而导致无法直接获取该字段的内容。场景伪代码如下图所示,通过username字段回显数据,这里我们需要获取password的内容,但是password在filter函数中被过滤了:

下面介绍两种方法在过滤字段名时获取该字段数据。

第一种方法:不适用字段获取数据

原理就是利用虚表e,获取虚表e的第三列数据,在通过便宜获取一个内容,最后将此内容返回到username的位置,最后回显出来。

第二种方法:盲注法

我们来看一个例子:

可以看到,当我们使用order by 3 desc对第三列进行排序的时候,当我们在union里面select的内容不同时,返回的内容也不一样,原因是因为MySQL的字符串排序是从左往右一一使用字符串的ASCII码进行对比。

当我们union select 0x32时回显的username字段内容应该时2,当我们unionselect 0x31和0x30时,username字段内容应该时admin,所以这个时候我们能确定,0x31应该是跟我们需要查询的password的第一个字符的ASCII码值是相等的,从而可以编写脚本一位一位爆破出password的内容:

最后将ASCII码转换成字符串就是我们想获取的字段内容。

其他技巧

因为ByPass技巧方法是需要在持续的攻防对抗中进行总结,验证,积累的,所以没有一种万能的ByPass方法,我们在遇到具体的场景中,跟进实际情况将上面的内容灵活应用,将多种方法结合,比如:

过滤逗号了可以使用join;

过滤了空格使用其他空白符;

过滤了关键字可以使用编码结合注释;

过滤常用函数可以找非常用函数代替等等。

最终还是需要结合实际情况,熟练掌握漏洞原理和数据库特性,举一反三灵活多变。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值