实验环境

实验靶场

靶场:DVWA(low级别)

数据库:MySQL 5.7.26

Web脚本:PHP 7.3.4

WAF:阿里云Web应用防火墙

这里使用的是测试靶场环境,正式的环境是否存在还需进一步的测试。

image-20211028181750154

注:这里配置的是默认的中等规则组。假如WAF的规则过于严格,则会对业务的连续性产生影响,造成误报;假如WAF的规则过于宽松,则会被轻易绕过,产生漏报。做到二者之间的平衡是判断一款WAF是否好坏的一个重要标准。

Emoji字符绕过

这是一个有意思的案例,并且是当时影响了安全宝、阿里云盾的姿势,而且现在测试阿里云盾依然有效。

绕过的根本原理还有待商榷,这里只是提供绕过的思路。

绕过原理

规则缺陷/特性:emoji的宽字节特性且mysql支持emoji的存储

emoji是一串unicode字集组成,一个emoji图标可以占2、4、7个字节。具体可以查看这篇文章:

https://www.jianshu.com/p/32a95a4fc542

Emoji表情搜索:https://emojipedia.org/

如图,一个😄字符占4个字节长度

image-20211104223014305

既然在查询的时候%23会忽略掉后面的,那么Emoji就可以插入到%23与%0A之间。

我们再来测试阿里云盾:

image-20211219125901987

成功绕过了,让我们缩小一下emoji的范围,是不是每一个emoji都可以绕过呢?

image-20211219130153030

看来并不是,这里可以对emoji进行FUZZ,查看具体是哪个emoji可以实现绕过

image-20211219131348894

这里仅仅对941个emoji进行FUZZ,可以测试出能够绕过的emoji有:

1
😠、🧠、🍠、🥠、🚠、🎠、🌠、🛠、☠、⚠️、💠、🔠、🕠、🏴󠁧󠁢󠁥󠁮󠁧󠁿、🏴󠁧󠁢󠁳󠁣󠁴󠁿、🏴󠁧󠁢󠁷󠁬󠁳󠁿

绕过成功!

image-20211219130229116

参考资料