利用MySQL特性,WAF绕过技巧

admin 2024年10月13日20:57:33评论14 views字数 2310阅读7分42秒阅读模式
短小精悍才是文案的灵魂 ~

CTF-OS,一个专门为CTF设计的操作系统

如果师傅们想要系统学习网络安全,我准备好了一份网络安全自学资料放在网盘链接了:

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 1user(), 3 -- -

在这个例子中,我们使用了HTML注释(/**/)和空格来分隔SQL关键字,从而绕过了一些基于关键字匹配的WAF规则。

2. SQL注释技巧

MySQL支持多种注释方式,包括单行注释(-- )和多行注释(/* */)。这些注释技巧可以用来绕过依赖于关键字连续性的WAF规则。

案例: 使用内联注释绕过WAF

SELECT * FROM users WHERE id = 1 /*!UNION*/ SELECT 1user(), 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 1user(), 3 FROM (SELECT @a:=0x6162636465)x;

在这个例子中,我们使用了MySQL的用户定义变量来绕过WAF对SELECT关键字的检测。

结论

通过深入理解MySQL数据库的特性,攻击者可以找到多种方法来绕过WAF的防护。然而,对于防御者来说,了解这些技巧同样重要,因为它们可以帮助我们更好地配置和优化WAF规则,从而提高Web应用的安全性。在攻防对抗中,了解和掌握数据库特性是提高Web应用安全性的关键。

往期推荐

密码学中的常用加密方式?

【JS逆向】某大型音乐平台JS逆向分析

什么是域?如何搭建一个简单的域?

【CTF杂项】常见文件文件头、文件尾格式总结及各类文件头

一款开源持续更新的后渗透免杀框架

原文始发于微信公众号(泷羽Sec):利用MySQL特性,WAF绕过技巧

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月13日20:57:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用MySQL特性,WAF绕过技巧https://cn-sec.com/archives/3262709.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息