~ 短小精悍才是文案的灵魂 ~
如果师傅们想要系统学习网络安全,我准备好了一份网络安全自学资料放在网盘链接了:
https://pan.baidu.com/s/1LTJGOicq1yEMqaEsqUObGQ?pwd=1212
MySQL特性的WAF绕过
MySQL是一种流行的关系型数据库管理系统,它提供了丰富的数据库管理和操作功能。下面是我归纳的一些常见的MySQL数据库的WAF绕过技巧,如果还有其他方式,还请师傅们留言指出,灰常感谢。
1. 特殊符号和空白字符
在MySQL中,某些特殊符号和空白字符可以被用来绕过简单的输入过滤机制。例如,MySQL解析器能够识别多种空白字符,包括传统的空格、制表符、换行符,以及一些不那么明显的字符,如%09
(水平制表符)、%0a
(换行符)、%0b
(垂直制表符)、%0c
(换页符)、%0d
(回车符)和%20
(空格)。
案例: 使用空白字符绕过WAF
SELECT * FROM users WHERE id = 1/**/UNION/**/SELECT 1, user(), 3 -- -
在这个例子中,我们使用了HTML注释(/**/
)和空格来分隔SQL关键字,从而绕过了一些基于关键字匹配的WAF规则。
2. SQL注释技巧
MySQL支持多种注释方式,包括单行注释(--
)和多行注释(/* */
)。这些注释技巧可以用来绕过依赖于关键字连续性的WAF规则。
案例: 使用内联注释绕过WAF
SELECT * FROM users WHERE id = 1 /*!UNION*/ SELECT 1, user(), 3;
在这个例子中,我们使用了MySQL特有的/*! */
注释来包含WAF可能拦截的关键字。
3. 字符串函数
MySQL提供了多种字符串函数,如CONCAT()
、SUBSTRING()
、REPLACE()
等,这些函数可以用来拼接和修改SQL语句中的字符串,从而绕过WAF的检测。
案例: 使用字符串函数绕过WAF
SELECT * FROM users WHERE id = CONCAT('1', 'UNION', 'SELECT', '1', 'user()', '3');
在这个例子中,我们使用了CONCAT()
函数来动态构建一个SQL语句,从而绕过了WAF对单个关键字的检测。
4. 条件语句
MySQL的条件语句,如IF()
和CASE WHEN
,可以用来构建复杂的逻辑,这些逻辑有时可以用来绕过WAF的检测。
案例: 使用条件语句绕过WAF
SELECT * FROM users WHERE id = 1 AND (CASE WHEN 1=1 THEN 'UNION' ELSE 'SELECT' END) = 'SELECT';
在这个例子中,我们使用CASE WHEN
语句来动态选择使用UNION
还是SELECT
,从而绕过了WAF的检测。
实战案例分析
在实战中,攻击者需要灵活运用上述数据库特性来绕过WAF的防护。以下是一些实战案例,展示了如何利用MySQL数据库特性来绕过WAF。
案例一:绕过简单的关键字过滤
在一些简单的WAF实现中,可能会对SQL关键字进行过滤。通过使用MySQL的字符串函数和注释技巧,我们可以轻松绕过这种简单的过滤机制。
-- 使用字符串函数和注释
SELECT * FROM users WHERE id = CONCAT('1', '%2F*', 'UNION', '%2F*', 'SELECT', '1', 'user()', '3') /*!*/
在这个例子中,我们使用了URL编码(%2F
)和MySQL的CONCAT()
函数来构建SQL语句,并通过/*! */
注释来包含WAF可能拦截的关键字。
案例二:绕过复杂的逻辑检测
对于一些更复杂的WAF实现,它们可能会检测SQL语句的逻辑结构。在这种情况下,我们可以使用MySQL的条件语句来动态构建SQL语句,从而绕过WAF的检测。
-- 使用条件语句
SELECT * FROM users WHERE id = 1 AND (CASE WHEN 1=1 THEN (SELECT 'UNION SELECT 1, user(), 3') ELSE 'SELECT' END) = 'SELECT';
在这个例子中,我们使用CASE WHEN
语句来动态选择执行的SQL语句,从而绕过了WAF对特定逻辑结构的检测。
案例三:利用数据库特性进行注入
在一些情况下,WAF可能会对某些特定的数据库特性进行过滤。然而,通过深入理解MySQL的数据库特性,我们可以找到绕过这些过滤机制的方法。
-- 利用数据库特性
SELECT * FROM users WHERE id = 1 /*!UNION*/ SELECT 1, user(), 3 FROM (SELECT @a:=0x6162636465)x;
在这个例子中,我们使用了MySQL的用户定义变量来绕过WAF对SELECT
关键字的检测。
结论
通过深入理解MySQL数据库的特性,攻击者可以找到多种方法来绕过WAF的防护。然而,对于防御者来说,了解这些技巧同样重要,因为它们可以帮助我们更好地配置和优化WAF规则,从而提高Web应用的安全性。在攻防对抗中,了解和掌握数据库特性是提高Web应用安全性的关键。
往期推荐
原文始发于微信公众号(泷羽Sec):利用MySQL特性,WAF绕过技巧
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论