再说Web渗透测试(第八集-上集)
本文章阅读大约需要40分钟;
第八集,框架内容-WAF绕过;
(内容有点多,所以分为上集10项+下集10项)
Web渗透测试框架内容:
编号 | 名称 | 描述 | 检查项 |
1 | 信息收集 | 子域名接管 | 15项 |
越权(IDOR) | 15项 | ||
2 | Word Press | CMS 安全 | 15项 |
3 | HTTP头 | 识别缺失或配置错误的安全头信息 | 25项 |
4 | 注入攻击 | XSS | 15项 |
SQL Injection | 15项 | ||
5 | 文件上传 | 尝试绕过安全机制上传恶意文件 | 20项 |
6 | SSRF | 利用漏洞欺骗服务器端应用程序向内部网络或其他系统发送请求,获取敏感信息或进行攻击。 | 15项 |
7 | WAF | 测试WAF的有效性,包括其检测和阻止恶意流量的能力,以及绕过WAF的潜在方法。 | 20项 |
8 | TLS | TLS Vulnerability | |
9 | Cookie | Cookie设置 | |
10 | XXE | XML外部实体注入 |
1. Web安全最后的救赎:究竟是道高一尺,还是魔高一丈!
WAF 就像 Web 应用的“安全门神”,通过预设规则和模式匹配,识别并拦截恶意流量,保护网站安全。然而,WAF 本身也可能存在缺陷,或者规则配置不当,攻击者往往利用这些弱点,绕过 WAF 的防御机制,攻击网站。
2. WAF绕过:20种常见方法深度解析
1. 使用 OWASP Top 10 攻击测试
背景: OWASP Top 10 列出了 Web 应用程序中最常见的 10 种安全风险,也是攻击者最常用的攻击目标。因此,测试 WAF 对 OWASP Top 10 攻击的防御能力,可以帮助开发者了解 WAF 规则库的覆盖范围,以及 WAF 对常见攻击的防御效果。
测试技术原理: 利用 OWASP Top 10 中的攻击手法,向目标网站发送恶意请求,测试 WAF 是否能够识别和拦截这些攻击。
绕过技巧: 攻击者可以使用以下技巧绕过 WAF 的防护机制:
大小写混淆: 例如将 UNION 替换为 UnIoN,或者将 SELECT 替换为 SeLeCt。
编码技术: 例如将 SQL 关键字编码为 URL 编码、HTML 实体编码、Unicode 编码等。
注释符: 例如在 SQL 注入代码中添加注释符 /* */ 或 --,干扰 WAF 的规则匹配。
分块传输: 将恶意请求分成多个数据包发送,绕过 WAF 对单个数据包的检测。
使用特殊字符:例如使用空字节、换行符、回车符等特殊字符,干扰 WAF 的解析过程。
测试方法:
手动构造恶意请求,例如使用 Burp Suite、OWASP ZAP 等工具修改请求参数或请求头。
使用自动化工具,例如 sqlmap、XSSer 等,进行批量测试。
目的: 评估 WAF 对 OWASP Top 10 攻击的防御能力,发现 WAF 规则库的缺陷,并验证 WAF 的防护能力是否满足网站的安全需求。
推荐工具: Burp Suite、OWASP ZAP、sqlmap、XSSer 等。
防御理念及方法:
定期更新 WAF 规则库: 确保规则库包含最新的攻击特征,以应对不断变化的攻击趋势。
自定义 WAF 规则: 根据网站的实际情况,自定义 WAF 规则,增强防御能力,例如针对特定的攻击模式、参数、请求头等进行过滤。
使用多层防御机制:除了使用 WAF,还需要结合其他安全措施,例如输入验证、输出编码、安全编码等,构建多层次的防御体系。(本系列四、五、六集都提到每一种攻击类型的多维的防御方法)
深度安全防御: 不要仅仅依赖于 WAF 作为唯一的安全防御措施,而是要将其视为一个纵深防御体系中的一个环节。
案例:
A. SQL 注入 (SQL Injection):
案例一:绕过基于关键字的过滤规则
攻击代码:SELECT * FROM users WHERE username='admin' and password=''
绕过技巧:使用大小写混淆 sEleCt * FrOm UsErS WhErE UsErNaMe='admin' AnD PaSsWoRd=''
防御措施: 使用参数化查询或预编译语句,避免将用户输入直接拼接到 SQL 查询语句中。
案例二:绕过基于注释的过滤规则
攻击代码:SELECT * FROM users WHERE username='admin'--' and password=''
绕过技巧:使用内联注释绕过注释过滤 SELECT * FROM users WHERE username='admin'/*这是一个注释*/and password=''
防御措施: 使用预编译语句,并将用户输入作为参数传递,避免 SQL 代码被修改。
案例三:绕过基于空格的过滤规则
攻击代码:SELECT * FROM users WHERE username='admin' AND password=''
绕过技巧:
使用编码或替换空格:
SELECT/**/FROM/**/users/**/WHERE/**/username='admin'/**/AND/**/password=''
防御措施: 规范化用户输入,例如去除多余空格,并结合其他过滤机制。
案例四:绕过基于引号的过滤规则
攻击代码:SELECT * FROM users WHERE username='admin' AND password=''
绕过技巧:使用十六进制编码绕过引号过滤 SELECT * FROM users WHERE username=0x61646d696e AND password=''
防御措施: 结合参数化查询和输入验证,防止恶意字符被注入到 SQL 语句中。
案例五:绕过基于函数的过滤规则
攻击代码:SELECT * FROM users WHERE username='admin' AND sleep(5)--
绕过技巧:使用大小写混合或双写绕过函数过滤 SELECT * FROM users WHERE username='admin' AND SLEEP(5)--
防御措施:使用白名单机制,只允许特定的数据库函数。
案例六:使用 UNION 运算符
攻击代码:SELECT * FROM users WHERE username='admin' UNION SELECT 1,2,3--
绕过技巧:使用括号包裹 UNION 语句 (SELECT * FROM users WHERE username='admin') UNION (SELECT 1,2,3)--
防御措施: 严格过滤 UNION 关键字,并结合其他安全措施。
案例七:利用子查询