WEBKT

Flowbits在绕过WAF的SQL注入和XSS攻击中的那些事儿

6 0 0 0

WAF:拦路虎还是纸老虎?

Flowbits:WAF绕过的“瑞士军刀”

1. 编码和混淆

2. 分块传输

3. HTTP参数污染(HPP)

4. 利用协议特性

5. 针对特定WAF的绕过

案例分析:SQL注入绕过

案例分析:XSS绕过

防御Flowbits绕过

总结

大家好,我是你们的“赛博朋克”老司机,今天咱们来聊聊Flowbits在绕过WAF(Web应用防火墙)进行SQL注入和XSS攻击中的那些“骚操作”。别误会,咱们这是技术交流,可不是教你干坏事!作为一名有经验的Web安全工程师,你肯定对WAF不陌生,甚至每天都在和它“斗智斗勇”。但你知道吗?Flowbits这玩意儿,有时候能让WAF形同虚设。咱们今天就来扒一扒它的“黑科技”。

WAF:拦路虎还是纸老虎?

在深入Flowbits之前,咱们先简单回顾一下WAF。WAF,顾名思义,就是Web应用的防火墙,它部署在Web服务器前面,像一道闸门一样,拦截各种恶意的Web请求,保护Web应用免受攻击。常见的WAF产品有Cloudflare、Akamai、Imperva等等。它们通常会基于规则集、签名库、行为分析等技术来识别和阻止攻击。

WAF主要防范的攻击类型包括:

  • SQL注入:攻击者通过构造恶意的SQL语句,绕过应用程序的输入验证,直接操作数据库。
  • XSS(跨站脚本攻击):攻击者通过在网页中注入恶意脚本,窃取用户信息、劫持会话、篡改网页内容等。
  • 其他攻击:例如命令注入、文件包含、目录遍历等等。

听起来WAF很强大,对吧?但现实是,WAF并非万能的。攻击者总能找到各种方法来绕过WAF的检测,Flowbits就是其中一种常用的手段。

Flowbits:WAF绕过的“瑞士军刀”

Flowbits是什么?简单来说,它是一种流量控制机制,可以用来修改HTTP请求和响应的内容。在Burp Suite等渗透测试工具中,Flowbits可以用来设置和检查某些条件,从而实现对HTTP流量的精细控制。

在绕过WAF的场景中,Flowbits主要通过以下几种方式发挥作用:

1. 编码和混淆

这是最常见的绕过WAF的方法之一。WAF通常会根据预定义的规则或签名来检测攻击payload。通过对payload进行编码或混淆,可以改变其特征,使其看起来不像一个攻击,从而绕过WAF的检测。

常见的编码和混淆方法包括:

  • URL编码:将特殊字符转换为%加上其十六进制ASCII码的形式。例如,空格可以编码为%20,单引号可以编码为%27
  • HTML实体编码:将特殊字符转换为HTML实体。例如,小于号<可以编码为&lt;,大于号>可以编码为&gt;
  • Unicode编码:将字符转换为Unicode编码形式。例如,字母a可以编码为a
  • Base64编码:将数据转换为Base64编码形式。
  • 十六进制编码:将数据转换为十六进制编码形式。
  • JavaScript编码:利用JavaScript的String.fromCharCode()函数将字符转换为Unicode编码。
  • 注释符混淆:在SQL语句中插入注释符(例如/*--#),干扰WAF的解析。
  • 大小写混淆:改变SQL关键字的大小写,例如将SELECT写成sEleCt
  • 特殊字符替换:使用其他字符或字符串替换SQL关键字或特殊字符。例如,使用||代替OR
  • 函数嵌套:将SQL函数进行多层嵌套,增加WAF解析的难度。

Flowbits可以帮助我们自动化地进行这些编码和混淆操作。例如,我们可以设置一个Flowbits规则,将所有请求中的单引号自动替换为%27,或者将所有响应中的<script>标签替换为&lt;script&gt;

2. 分块传输

HTTP协议支持分块传输编码(Chunked Transfer Encoding),允许将HTTP消息分成多个块进行传输。WAF在处理分块传输的数据时,可能存在逻辑漏洞,导致绕过。

例如,攻击者可以将一个完整的SQL注入payload分成多个块,每个块单独看起来都不像一个攻击,但组合起来就是一个完整的攻击。如果WAF没有正确地重组这些分块数据,就可能被绕过。

Flowbits可以帮助我们控制HTTP请求的分块方式,例如设置每个块的大小、添加额外的块头等,从而构造出能够绕过WAF的分块传输数据。

3. HTTP参数污染(HPP)

HTTP参数污染(HTTP Parameter Pollution,HPP)是指在HTTP请求中多次使用相同的参数名,导致服务器端解析参数时出现歧义。不同的Web服务器和应用程序对HPP的处理方式不同,可能导致WAF的绕过。

例如,一个请求中包含两个同名的参数id

?id=1&id=2

有些Web服务器会取第一个id的值(1),有些会取最后一个id的值(2),有些会将两个值合并成一个数组([1, 2])。如果WAF只检查了第一个id的值,而Web服务器取了最后一个id的值,就可能导致绕过。

Flowbits可以帮助我们构造HPP攻击payload,例如自动添加重复的参数名、修改参数值等。

4. 利用协议特性

HTTP协议本身的一些特性也可能被用来绕过WAF。例如:

  • HTTP/1.0和HTTP/1.1的差异:有些WAF可能只针对HTTP/1.1进行了优化,而忽略了HTTP/1.0的请求。攻击者可以构造HTTP/1.0的请求来绕过。
  • HTTP方法滥用:除了常见的GET和POST方法,HTTP协议还支持其他方法,例如PUT、DELETE、OPTIONS等。有些WAF可能只检查了GET和POST请求,而忽略了其他方法。攻击者可以使用其他方法来发送攻击payload。
  • HTTP头字段操纵:攻击者可以通过修改HTTP头字段(例如User-AgentRefererCookie等)来欺骗WAF,或者利用某些头字段的特殊含义来绕过检测。

Flowbits可以帮助我们修改HTTP请求的版本、方法、头字段等,从而利用协议特性来绕过WAF。

5. 针对特定WAF的绕过

不同的WAF产品有不同的实现方式和检测规则,因此也存在不同的绕过方法。有些WAF可能存在已知的漏洞或缺陷,攻击者可以利用这些漏洞来绕过。

Flowbits可以帮助我们针对特定的WAF产品进行定制化的绕过。例如,我们可以根据某个WAF的已知漏洞,编写相应的Flowbits规则来构造攻击payload。

案例分析:SQL注入绕过

假设我们有一个Web应用,存在一个SQL注入漏洞。WAF部署在Web服务器前面,阻止了常见的SQL注入攻击。

我们可以使用Flowbits来尝试绕过WAF。以下是一些可能的步骤:

  1. 信息收集:首先,我们需要收集关于目标Web应用和WAF的信息。我们可以使用Burp Suite等工具来探测Web应用的类型、版本、使用的数据库类型、WAF的类型和版本等。
  2. 确定注入点:我们需要找到Web应用中存在SQL注入漏洞的参数。通常,这些参数会出现在URL、表单、Cookie等地方。
  3. 构造初始payload:我们可以构造一个简单的SQL注入payload,例如' OR 1=1 --,来测试WAF是否阻止了攻击。
  4. 使用Flowbits进行编码和混淆:如果WAF阻止了初始payload,我们可以使用Flowbits对其进行编码和混淆。例如,我们可以将空格编码为%20,将单引号编码为%27,将--替换为#,得到一个新的payload:'%20OR%201=1%20#
  5. 测试绕过效果:我们可以将修改后的payload发送到Web应用,观察WAF是否仍然阻止攻击。如果仍然被阻止,我们可以尝试其他的编码和混淆方法,或者尝试分块传输、HPP等技术。
  6. 逐步完善payload:如果成功绕过了WAF,我们可以逐步完善payload,例如使用UNION SELECT语句来查询数据库中的数据。
  7. 自动化绕过: 可以通过编写脚本, 配合Flowbits的规则实现自动化绕过。

案例分析:XSS绕过

假设我们要在一个存在XSS漏洞的网站上执行XSS攻击,但是网站部署了WAF。

  1. 信息收集:了解网站使用的WAF类型和版本,以及网站的编码方式(UTF-8, GBK等)。
  2. 确定注入点:找到网站上存在XSS漏洞的输入框或参数。
  3. 构造初始payload:尝试一个简单的XSS payload,例如<script>alert(1)</script>
  4. 使用Flowbits进行编码和混淆:如果WAF阻止了初始payload,我们可以使用Flowbits对其进行编码和混淆。例如:
    • HTML实体编码:< 编码为 &lt;> 编码为 &gt;,得到 &lt;script&gt;alert(1)&lt;/script&gt;
    • JavaScript编码:使用String.fromCharCode()函数,将<script>alert(1)</script>转换为String.fromCharCode(60,115,99,114,105,112,116,62,97,108,101,114,116,40,49,41,60,47,115,99,114,105,112,116,62)
  5. 利用上下文:有些WAF可能只对特定的标签或属性进行过滤,我们可以利用HTML的上下文来绕过。例如,如果<script>标签被过滤,我们可以尝试使用<img>标签的onerror属性:<img src=x onerror=alert(1)>
  6. 分块传输:将XSS payload分成多个块,尝试绕过WAF的检测。
  7. 尝试其他XSS向量:例如<iframe><svg><object>等。
  8. 持续测试并根据waf的策略调整payload

防御Flowbits绕过

作为Web安全工程师,我们需要了解Flowbits等绕过WAF的手段,才能更好地防御这些攻击。以下是一些防御建议:

  • 保持WAF规则更新:WAF厂商会定期发布新的规则和签名,以应对新的攻击方法。我们需要及时更新WAF规则,确保WAF能够识别最新的攻击。
  • 使用多层防御:不要完全依赖WAF。除了WAF,我们还需要在Web应用层面进行安全加固,例如输入验证、输出编码、使用安全的API等。
  • 监控和分析日志:我们需要监控WAF的日志,及时发现可疑的攻击行为。我们可以分析攻击者的payload,了解他们使用的绕过方法,并针对性地加强防御。
  • 进行渗透测试:我们可以定期进行渗透测试,模拟攻击者的行为,发现Web应用和WAF的漏洞,并及时修复。
  • 使用更智能的WAF:一些新型的WAF产品采用了机器学习、人工智能等技术,能够更准确地识别和阻止攻击,减少误报和漏报。
  • 输入验证和输出编码: 这是防御XSS和SQL注入的最基本和最有效的方法。对所有用户输入进行严格的验证,只允许符合预期的字符和格式。对所有输出到Web页面的数据进行适当的编码,防止恶意脚本的执行。
  • 最小权限原则: 数据库用户只赋予完成其任务所需的最小权限。避免使用具有过高权限的数据库账户(例如root)。

总结

Flowbits是一种强大的流量控制工具,可以用来绕过WAF的检测。攻击者可以利用Flowbits进行编码、混淆、分块传输、HPP等操作,构造出能够绕过WAF的攻击payload。作为Web安全工程师,我们要做的, 不是去恐惧技术, 而是去拥抱, 去理解它, 只有这样才能更好的去防护。

希望这篇文章能让你对Flowbits在绕过WAF中的作用有一个更深入的了解。记住,技术本身是中立的,关键在于如何使用它。咱们下次再见!

赛博朋克老司机 WAF绕过FlowbitsSQL注入

评论点评

打赏赞助
sponsor

感谢您的支持让我们更好的前行

分享

QRcode

https://www.webkt.com/article/8437