我们在bypass waf时,因为waf有一些规则缺陷,例如说mysql的内联注释、还可以用到一些数据库的特性来bypass waf的缺陷。
查询语句的五个位置:
SELECT * FROM news
WHERE id
=-1位置一
union位置二
select位置三
1,password位置四
from位置五
admin
通过以上语句的位置。我们来fuzz mysql的特性,来看看哪些字符可以代替空格。
首先是位置一,选中位置一,打开burp来进行跑包。
只这时候看到,位置一
支持代替空格的字符有:%09、%0a、%0b、%0c、%0d、%20、%2e
接下来继续跑位置二
,同样的方法跑,只是换个位置,如下图可以看到支持代替空格的字符有:%09、%0a、%0b、%0c、%0d、%20
跑位置三
,这里看到代替空格的字符有很多,说明这里有多种绕过,如下图可以看到支持代替空格的字符有:%09、%0a、%0b、%0c、%0d、%20、%21、%2b、%2d、%40、%7e
跑位置四
,如下图可以看到支持代替空格的字符有:%09、%0a、%0b、%0c、%0d、%20
最后一个位置了,我们看看支持的代替空格的字符多嘛?如下图可以看到支持代替空格的字符有:%09、%0a、%0b、%0c、%0d、%20、%60
了解这些特性之后,我们尝试bypss 安全狗,不过这里尝试union select 的时候被拦截了,我们尝试输入刚刚fuzz出来代替空格的字符。可以看到%00是不拦截的,waf认为mysql是不执行的,于是不拦截。
那么这时候是不是可以想到一个问题,如果开发不熟悉不同数据库的特性,那么其他类型的数据库是不是就可以绕过了呢。如下图可以看到oracle、mssql是可以正常查询数据,说明安全狗不了解各个数据库的特性,于是通过数据库特性进行bypass了。
前面我们知道数据库的特性,接下来我们来继续bypass waf,首先先来查询注入点在哪,用and 1=2语句时拦截,and 1也拦截,直接写and又不拦截,说明and后面出现字符时会拦截。
这时候我们可以使用其他函数like来进行判断注入点,可以看到like可以正常判断。
接下来继续判断字段数,order by 1时拦截,使用内联注释似乎也不可以,这时候GET无从下手时,可以转换传参进行尝试绕过,不同传参正则是不一样的。
转成post传参后,我们再尝试order by 1,发现拦截,orderby不拦截,
这时候尝试注释符来代替空格,看看是否绕过?可以很明显看到绕过了。
知道字段数后我们继续联合查询,发现union select拦截,unionselect也拦截,说明常规手段绕不过了
这里其实有多种绕过方法,例如协议绕过,或者是特殊字符编码绕过,这次就简单分享一下注释和随便几个字符的绕过。下图可以看到出现输出点了
尝试进行数据库的查询,这时候可以发现被拦截了
我们来看看拦截了什么?去掉括号不拦截,说明拦截括号
尝试使用注释符号代替空格,发现也拦截了
前面我们随便输入一些字符就绕过联合查询,那我们是不是也可以在注释里随便添加字符绕过呢?事实证明是可以的。成功查询到库名。
最后我们再尝试查询字段内容,可以看到被拦截了。
这里我们继续删掉一些字符,看看拦截了什么,admin删掉就不拦截了,那直接fromadmin呢,发现不拦截,那么这里只需要找出代替空格字符就可以绕过了,这里使用注释符,如下图可以看到,查询到数据了。
本人只是简单介绍了数据库的特性,以上这些远远是不够的。只是简简单单提供了一个思路,仅作抛砖引玉之用,如果你有什么绕过想法,也可以评论告诉我。一篇水文写完告辞
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
l836918621 | 10.00 | 0 | 2021-03-11 17:05:32 | 一个受益终生的帖子~~ |
Track-聂风 | 200.00 | 0 | 2021-03-11 16:04:38 | 写的挺好的,顶! |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.
Track-聂风
发表于 2021-3-6
写的主要是一个思路,但是实际上的尝试和破解都还没有写入,我希望同学可以写出一个真的绕过方法和过程还有结果。这样老师可以给你打赏更多的金币
评论列表
加载数据中...
l836918621
发表于 2021-3-11
大佬nb!
评论列表
加载数据中...