一、WAF绕过
1. 常用的外部工具
1)网站安全狗
-
- 网站安全狗: 是一款免费的服务器安全防护软件,主要针对阿帕奇服务器进行防护,已存在多年。
- WAF拦截原理
- WAF拦截原理: WAF(Web应用防火墙)通过规则库匹配用户发送的数据包中的敏感字符进行拦截。例如,通过正则表达式匹配如and、or等关键字。
- WAF绕过方式
- 更改提交方式
- 更改提交方式: 如果WAF只检测特定提交方式(如GET),则可通过更改提交方式(如改为POST)进行绕过。
- 数据变异
- 数据变异: 通过修改数据内容绕过检测,例如大小写混用(将敏感字符大小写混合)。编码绕过: 使用URL编码、Unicode编码等方式对敏感字符进行编码,以绕过WAF的检测。
- 更改提交方式
2. 安装与部署建议
- 安装建议: 建议在虚拟机中安装网站安全狗及相关软件,以避免与本地服务冲突,同时方便进行快照备份和还原。
3. 实战准备
- 实战环境搭建: 需在虚拟机中安装PHP study、网站安全狗及靶场源代码,确保环境一致性,便于测试WAF绕过技术。
二、内容总结
1. 安全工具的拦截原理与绕过方法
- 安全工具拦截原理: 外部安全工具,如安全狗、宝塔云盾等,通过拦截发送过来的数据中的敏感字来实现安全防护。如果数据包含敏感字,则阻止其通过。
- 绕过拦截的方法: 了解安全工具的拦截规则后,可以尝试寻找其未拦截的内容或空子,从而有机可乘,绕过安全工具的检测。
三、知识小结
知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
社会主义理论家的外辅绕过 | 介绍外辅绕过的概念和重要性 | 外辅绕过的定义和实际应用场景 | ★★★ |
外服的定义 | 通过网站测试、搜狗注入等例子解释外服 | 外服与黑客渗透的关系 | ★★ |
常见的外部工具 | 提及网站安全狗、宝塔、云盾等工具 | 网站安全狗的特点和免费性 | ★★ |
网站安全狗的介绍 | 安全狗的功能、安装和界面介绍 | 安全狗的安装建议(虚拟机) | ★★★ |
防护软件的原理 | 拦截恶意数据,保护网站安全 | 防护软件如何检测和拦截 | ★★★★ |
绕过防护的手段 | 更改提交方式、数据变异(大小写、混用)、加密等 | 数据变异的多种方式 | ★★★★★ |
安全狗的更新与绕过 | 安全狗会不断更新拦截方式 | 绕过手段需要灵活组合,不断尝试 | ★★★★ |
实战建议 | 在虚拟机中安装安全狗和靶场进行实战练习 | 实战中遇到的问题和解决方法 | ★★★ |
一、SQL注入之WAF绕过
1. 例题#bypass WAF
1)WAF绕过方法
- 大小写绕过
- 原理: 部分WAF只匹配纯大写或纯小写的字符,对大小写混写直接无视。
- 举例: union select 可改写为 unIOn SeLEct。
- 编码绕过
- 原理: 针对WAF过滤的字符编码进行绕过,如URL编码、Unicode编码、十六进制编码等。
- 举例: union select 1,2,3# 可改写为 union%0aselect 1\u002c2,3%23。
- 双写绕过
2)实战演示
- 更改提交方式绕过
- 实战操作
3)其他绕过方法
- 数据本身处理
- Fuzz大法与暴力破解
4)总结
- WAF绕过: 需结合多种方法,如大小写绕过、编码绕过、双写绕过等。
- 前提条件: 更改提交方式需确保后台能接收,数据本身处理需考虑防御软件更新。
- 暴力破解: Fuzz测试和暴力破解可作为辅助手段。
2. 关键字大小写绕过
1)例题#关键字绕过
- 题目解析
- 审题过程: 题目要求尝试通过改变关键字的大小写来绕过安全产品的过滤规则。
- 解题思路: 利用web应用可能只匹配纯小写或纯大写字符的规则,通过混写大小写来尝试绕过。
- 尝试与结果: 将union select中的某个字母变为大写进行尝试,但未能成功绕过。
2)例题#database拦截
- 题目解析
- 背景: 在尝试查询数据库时,遇到了安全狗的拦截。
- 原因: 安全狗拦截了database()函数,因为该函数用于查询数据库库名,属于敏感操作。
- 拦截规则: 安全狗对database加上括号的整体进行拦截,单独写database或括号则不会拦截。
- 绕过思路: 通过内联注释将database和括号分开,使安全狗认为它们不是一起的,从而绕过拦截。
3)例题#登录数据库
- 题目解析
- 操作过程: 通过命令行登录本地数据库,使用mysql -uroot -proot -h 127.0.0.1命令。
- 目的: 演示如何在数据库中利用内联注释绕过安全狗的拦截。
- 内联注释使用: 在database()函数和括号之间添加内联注释/*注释内容*/,使安全狗认为它们不是整体,从而成功执行查询。
- 结果: 成功绕过安全狗的拦截,获取到数据库名。
- 绕过结果: 使用内联注释后,成功获取到数据库名security。
3. 编码绕过
1)绕过方法概述
- 编码绕过: 通过编码技术绕过安全检测,如URL编码、Unicode编码等。
- 双写绕过: 重复写入关键字以绕过检测,如将select写成seselectelect。
- 换行绕过: 利用换行符等特殊字符分割关键字,如s%0aelect。
- 同义词绕过: 使用数据库同义词替换关键字,如使用union all替代union。
- 注意: 某些安全软件会不断更新规则,部分绕过方法可能失效。
2)安全软件与防护等级
- 安全狗: 一种常见的Web应用防火墙,防护等级相对较低。
- 宝塔、云盾: 防护等级更高,付费版本安全级别更高,更新速度快。
- 更新规则: 安全软件会不断添加新规则以应对新的绕过技术。
3)POST与GET提交的区别
- POST提交: 安全软件对POST数据的过滤或判断较少。
- GET提交: 安全软件对GET请求(URL参数)的校验和验证规则更多,如联合查询的拦截。
- 示例: GET提交时,如id=1 union select,可能被安全软件拦截。
4)联合查询与WAF绕过
- 联合查询: 使用union关键字合并多个SELECT语句的结果。
- WAF绕过: 通过各种技术(如编码、注释、特殊字符等)隐藏或改变union关键字,使WAF无法识别。
- 示例: 使用union/*//--/*//*!--+/*%0aselect/*!1,2,3*/--+绕过WAF。
5)HTTP参数污染
- HTTP参数污染: 对目标发送多个参数,如果目标没有多参数进行多次过滤,WAF可能只会识别其中一个参数。
- 举例: ?id=1&id=2&id=3,WAF可能只识别第一个id参数。
- 绕过思路: 利用参数污染,使WAF的检测规则无法识别所有敏感字符。
4. 联合查询
1)例题#union select拦截
- 题目解析
- 拦截情况: 安全狗防护软件会拦截包含union select的查询语句,即使只包含union或select关键字也会被拦截。
- 绕过思路: 需要将union和select关键字分开,避免同时出现,以绕过安全狗的检测。
2)例题#select拦截
- 题目解析
- 拦截情况: 单独使用select关键字时,不会被拦截。
- 绕过思路: 可以利用这一点,将union和select分开使用,避免同时出现,从而绕过检测。
3)例题#注释符内联注释拦截
- 题目解析
- 内联注释: 使用/* ... */进行注释,注释内部的内容不会被执行。
- 感叹号执行: 在内联注释中使用感叹号!,感叹号后面的内容会被执行。
- 绕过思路: 可以利用内联注释和感叹号,将敏感关键字如union select进行拆分和隐藏,从而绕过安全狗的检测。
4)例题#安全狗v4.0拦截
- 题目解析
- 新版本特性: 安全狗v4.0对绕过技巧进行了更新,许多以前的绕过方法不再有效。
- 换行符绕过: 使用换行符%0a,可以将一条SQL语句拆分成多行,从而绕过某些检测规则。
- 复杂注释绕过: 结合内联注释、换行符和特殊字符,构造复杂的SQL语句,以绕过安全狗v4.0的检测。
- 绕过思路: 构造如/*!union*/select的复杂注释结构,利用换行符和特殊字符,使安全狗无法正确识别SQL语句中的敏感关键字,从而达到绕过检测的目的。
5. 换行绕过
1)例题#换行提交
- 换行绕过: 通过在SQL注入语句中使用换行符(如%0a),可以绕过某些WAF(Web应用防火墙)的检测规则。
- 举例: 在SQL注入语句中插入换行符,如union%0aselect 1,2,3,这样WAF可能无法正确识别整个注入语句,从而允许其通过。
- 操作: 将换行符(如%0a)插入到SQL注入语句中,以实现绕过WAF的目的。
2)内联注释与换行绕过结合
- 内联注释: 使用内联注释(如/*! ... */)可以进一步迷惑WAF,使其无法正确解析SQL注入语句。
- 结合换行绕过: 将内联注释与换行符结合使用,可以更有效地绕过WAF的检测。例如,/*!union*/%0a/*!select 1,2,3*/。
- 效果: 这种结合使用的方式能够增加WAF绕过的成功率,因为WAF可能无法同时处理内联注释和换行符。
3)十六进制编码绕过
- 十六进制编码: 将SQL注入语句中的关键字符转换为十六进制编码,可以绕过某些对特定字符进行过滤的WAF。
- 举例: 将union select转换为十六进制编码0x756e696fbe,然后提交给数据库执行。
- 工具: 可以使用在线工具进行十六进制与文本字符串的相互转换,以辅助绕过WAF。
4)HTTP参数污染绕过
- HTTP参数污染: 通过向目标发送多个参数,利用WAF可能只对其中一个参数进行过滤的弱点,实现绕过。
- 举例: 提交多个id参数,如?id=1&id=2&id=3,其中某个id参数包含SQL注入语句,如果WAF只过滤了其中一个id参数,那么其他包含注入语句的id参数可能仍然能够成功执行。
- 适用场景: 当WAF对HTTP参数过滤不严格时,可以尝试使用HTTP参数污染的方法进行绕过。
6. 编码绕过
1)编码绕过概述
- 定义: 编码绕过是一种通过改变字符编码格式来绕过WAF(Web应用防火墙)检测规则的技术。
- 常见编码格式: Unicode编码、十六进制编码等。
2)例题#字符转行16进制
- 题目解析
- 目的: 通过将敏感字符(如"union")转换为16进制编码,绕过WAF的检测。
- 操作步骤:
- 将"union"转换为16进制编码,得到"0x756e696f6e"。
- 在SQL注入语句中使用该编码替换原敏感字符。
- 注意事项:
- 编码后的语句需保持SQL语法正确,否则即使绕过WAF也无法成功执行。
- 示例SQL语句: SELECT * FROM users WHERE id=-1 0x756e696f6e2073656c656374 1,2,3# LIMIT 0,1。
3)编码绕过实例演示
- 演示过程
- 场景: 在存在WAF防护的Web应用中进行SQL注入测试。
- 操作:
- 输入原始SQL注入语句,如id=-1 union select 1,2,3,被WAF拦截。
- 将"union"转换为16进制编码"0x756e696f6e",构造新语句id=-1 0x756e696f6e2073656c656374 1,2,3#。
- 提交新语句,成功绕过WAF,但需注意SQL语法正确性。
- 结果:
- 绕过WAF成功,但SQL语句执行失败(因语法错误)。
- 需调整语句为id=-1 union/*//--//%20select 1,2,3--*/,确保语法正确且绕过WAF。
4)编码绕过技巧与注意事项
- 技巧
- 多种编码格式: 除了16进制编码,还可尝试Unicode编码、URL编码等。
- 双写绕过: 部分WAF只对敏感字符识别一次,可通过双写(如"ununionion")进行绕过。
- 注意事项
- SQL语法: 编码后的语句必须保持SQL语法正确,否则无法执行。
- WAF规则: 不同WAF的检测规则不同,需根据实际情况调整编码策略。
- 测试与验证: 在实际操作中需不断测试与验证,确保绕过WAF的同时能成功执行SQL语句。
7. 双写绕过
1)例题#双写union关键字
- 双写绕过定义: 双写绕过是一种通过重复书写关键字(如union)来尝试绕过安全检测机制的方法。
- 实现方式: 将union关键字大写一份,小写一份,以此尝试绕过检测。
- 示例: 如将union select写成UNIunionON , SELselectECT。
2)例题#old by拦截
- old by拦截问题: 在某些情况下,使用双写或大小写变换的方式尝试绕过order by语句会被拦截。
- 绕过方法: 通过嵌套和类联注释等方式对order by语句进行变形,以尝试绕过检测。
- 示例: 将order by语句通过类联注释和特殊字符(如%0a换行符)进行拆分和变形,如order /*//--/*/ by。
- 题目解析
- 审题过程: 确认题目中的安全检测机制和目标SQL语句。
- 解题思路: 尝试使用双写、大小写变换、嵌套、类联注释等方法对目标SQL语句进行变形,以绕过检测。
- 注意: 不同的安全检测机制可能对不同的变形方式有不同的拦截效果,需灵活尝试多种方法。
8. SQL注入之WAF绕过
1)双写绕过
- 双写绕过: 部分WAF只对字符串识别一次,删除敏感字段并拼接剩余语句,这时可以通过双写来进行绕过。例如,将"UNION"写成"UNIunionON","SELECT"写成"SELselectECT"。
- 示例: select * from admin where username = 'a' union select 1,user() from admin
2)同义词替换
- 替换原理
- 同义词替换: 使用同义词替换SQL语句中的关键字,以绕过WAF的检测。例如,使用"and"和"or"的同义词或符号。
- 讲解: "and"可以用符号"&&"或者"and"的其他形式表示,"or"可以用符号"||"或者"or"的其他形式表示。WAF可能只检测了常见的关键字,而未检测这些同义词或符号。
- 示例
- 示例说明: 如果WAF检测到了"and"关键字并阻止查询,可以尝试使用"&&"来替代"and",从而绕过WAF的检测。
3)其他绕过方法
4)注释符内联注释绕过
- 注释符内联注释绕过: 使用注释符和内联注释来构造特殊的SQL语句,以绕过WAF的检测。例如,union selecte -/lunion*/ select,注释符里感叹号后面的内容会被MySQL执行。
9. HTTP参数污染
1)HTTP参数污染概述
- 定义: HTTP参数污染(HTTP Parameter Pollution,简称HPP)是指在一个HTTP请求中,同一个参数被赋予多个值。
- 原理: 在HTTP协议中,允许同名参数多次出现。不同的服务器或后台程序对同名参数的处理方式可能不同,利用这种差异可以进行安全攻击或绕过某些安全检测。
- 例子: 如在请求index.php?id=1&id=2中,若服务器是Apache,则可能取最后一个参数值(id=2),而若是Tomcat,则可能取第一个参数值(id=1)。
2)参数污染攻击实例
- 攻击场景: 假设一个网站只在Tomcat服务器处做数据过滤和处理,攻击者可以利用Tomcat和Apache对参数解析的不同,构造特定的请求来绕过WAF(Web应用防火墙)的检测。
- 攻击Payload:
- 原始Payload: index.php?id=-1' union select 1,database(),3--+ 可能会被Tomcat识别为恶意攻击并拦截。
- 绕过Payload: 通过在参数中加入注释符号等技巧,构造如index.php?id=1/*&id=-1' union select 1,database(),3--+的请求,使得Tomcat只解析到第一个看似正常的参数,而Apache则解析并执行后面的恶意SQL语句。
3)参数污染与WAF绕过
- WAF绕过原理: 利用WAF规则设计的不完善,如只匹配纯大写或纯小写的字符,对字符大小写混写直接无视,或者通过编码、双写等方式绕过WAF的检测。
- 绕过技巧:
- 大小写混写: 如将union select改写为unIOn SeLEcT。
- 编码绕过: 使用URL编码、Unicode编码、十六进制编码等,如将空格编码为%20。
- 双写绕过: 对敏感关键字进行双写,如将union写为uniunionon,部分WAF可能只对字符串识别一次,删除敏感字段后仍能拼接成有效语句。
4)实战演示
- 演示环境: PHP Study搭建的本地服务器环境。
- 演示过程:
- 创建一个PHP文件,接收并显示传入的参数。
- 通过构造不同的请求,展示参数污染的效果,如传入多个同名参数,观察服务器返回的是哪个参数值。
- 演示如何利用参数污染绕过简单的安全检测,如通过注释符号、编码等方式构造恶意请求。
5)防御与总结
- 防御策略:
- 对传入的参数进行严格的验证和过滤,确保只接收和处理预期的参数值。
- 更新和完善WAF的规则,提高对复杂攻击载荷的识别能力。
- 采用多层防御机制,不依赖单一的安全组件。
- 总结: HTTP参数污染是一种利用HTTP协议和服务器解析差异进行攻击的技巧,理解其原理和绕过方法有助于更好地进行安全防护。同时,持续更新安全策略和防御机制是应对不断演变的安全威胁的关键。
二、知识小结
知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
SQL注入绕过 | 绕过安全狗等防御软件 | 提交方式更改(GET/POST) | 中 |
内联注释绕过 | 利用内联注释欺骗防御软件 | 感叹号执行特性 | 高 |
换行符绕过 | 使用换行符绕过检测 | 0%a换行符应用 | 高 |
编码绕过 | 将字符转为Unicode或16进制编码 | 编码格式转换 | 中 |
双写绕过 | 关键字双写绕过检测 | UNION关键字双写 | 中 |
同义词替换 | 使用同义词替换关键字 | AND/OR替换为与/非符号 | 中 |
HTTP参数污染 | 多参数传递造成污染 | PHP参数选择规则 | 高 |
防御思路 | 绕过不是目的,防御才是重点 | - | 低 |