查看原文
其他

再说Web渗透测试(第八集-上集)

再说安全 再说安全
2024-12-01
前言
Web安全最后的救赎:究竟是道高一尺,还是魔高一丈! 10 种常见WAF绕过手法深度解析(上集)

本文章阅读大约需要40分钟;

第八集,框架内容-WAF绕过;

内容有点多,所以分为上集10项+下集10项

Web渗透测试框架内容

编号 名称
描述
检查项
1信息收集子域名接管15项
越权(IDOR)
15项
  2Word PressCMS 安全
15项
  3HTTP头
识别缺失或配置错误的安全头信息
25项

4

注入攻击

XSS15项
SQL Injection
15项
  5文件上传尝试绕过安全机制上传恶意文件20项

    

  6

SSRF
利用漏洞欺骗服务器端应用程序向内部网络或其他系统发送请求,获取敏感信息或进行攻击。


15项

 7

WAF测试WAF的有效性,包括其检测和阻止恶意流量的能力,以及绕过WAF的潜在方法。

20项

 8
TLS TLS Vulnerability
 9CookieCookie设置
10XXEXML外部实体注入

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 的防护机制:

  1. 大小写混淆: 例如将 UNION 替换为 UnIoN,或者将 SELECT 替换为 SeLeCt。

  2. 编码技术: 例如将 SQL 关键字编码为 URL 编码、HTML 实体编码、Unicode 编码等。

  3. 注释符: 例如在 SQL 注入代码中添加注释符 /* */ 或 --,干扰 WAF 的规则匹配。

  4. 分块传输: 将恶意请求分成多个数据包发送,绕过 WAF 对单个数据包的检测。

  5. 使用特殊字符:例如使用空字节、换行符、回车符等特殊字符,干扰 WAF 的解析过程。


测试方法:

  • 手动构造恶意请求,例如使用 Burp Suite、OWASP ZAP 等工具修改请求参数或请求头。

  • 使用自动化工具,例如 sqlmap、XSSer 等,进行批量测试。

  • 目的: 评估 WAF 对 OWASP Top 10 攻击的防御能力,发现 WAF 规则库的缺陷,并验证 WAF 的防护能力是否满足网站的安全需求。

  • 推荐工具: Burp Suite、OWASP ZAP、sqlmap、XSSer 等。


防御理念及方法:

  1. 定期更新 WAF 规则库: 确保规则库包含最新的攻击特征,以应对不断变化的攻击趋势。

  2. 自定义 WAF 规则: 根据网站的实际情况,自定义 WAF 规则,增强防御能力,例如针对特定的攻击模式、参数、请求头等进行过滤。

  3. 使用多层防御机制:除了使用 WAF,还需要结合其他安全措施,例如输入验证、输出编码、安全编码等,构建多层次的防御体系。(本系列四、五、六集都提到每一种攻击类型的多维的防御方法)

  4. 深度安全防御: 不要仅仅依赖于 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 关键字,并结合其他安全措施。

案例七:利用子查询

个人观点,仅供参考
继续滑动看下一个
再说安全
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存