当前位置:首页 > 行业动态 > 正文

http长连接绕过waf

通过HTTP长连接维持TCP会话,降低请求频率,结合请求头随机化及参数混淆,可规避WAF基于行为特征的检测

HTTP长连接基础

HTTP长连接(Keep-Alive)通过复用TCP连接减少握手次数,提升性能,与短连接(每次请求新建TCP连接)相比,长连接可降低网络开销并改变请求模式特征。

特性 短连接 长连接
TCP连接生命周期 每次请求新建/关闭 连接保持直至主动关闭
典型头信息 Connection: close Connection: keep-alive
WAF检测难度 高频次独立连接易触发规则 低频持久连接隐蔽性更强

WAF核心检测机制

现代WAF主要通过以下维度识别反面请求:

http长连接绕过waf  第1张

  1. 频率检测:单位时间内相同源IP的请求突增
  2. 协议合规性:非常规HTTP协议使用(如畸形头/方法)
  3. 行为模式:扫描器特征(如目录遍历、参数拼接)
  4. Payload特征:SQL注入、XSS攻击等攻击载荷
  5. 响应分析:异常状态码比例或错误页面访问

长连接绕过WAF原理

通过复用TCP连接实现:

  • 请求速率平滑化:将爆发式请求转化为低速持续流
  • 协议特征模糊化:避免频繁三次握手引起的关注
  • 会话状态保持:减少Cookie/Session重传频率
  • 请求伪装增强:可混合合法请求降低异常度

实战绕过技巧

技术手段 实现方式
连接复用控制 使用requests.session()保持连接,设置keep_alive=True
请求间隔随机化 在合法业务允许范围内插入1-5秒随机延迟
多连接并行策略 同时维持2-3个长连接分散请求压力
请求类型混合 将攻击请求与正常业务请求(如图片加载)交替发送
头部动态调整 每间隔N个请求修改User-Agent或添加无害自定义头(如X-Forwarded-For

代码实现示例(Python)

import requests
import time
import random
session = requests.Session()
session.headers.update({
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0)',
    'Connection': 'keep-alive'
})
target_url = "http://example.com/vuln.php"
for i in range(50):
    # 混合正常请求与攻击请求
    if i % 3 == 0:
        # 构造正常GET请求
        response = session.get("http://example.com/image.jpg")
    else:
        # 发送带payload的请求
        payload = "id=1' OR '1'='1"
        response = session.post(target_url, data={'query': payload})
    # 随机延迟规避频率检测
    time.sleep(random.uniform(0.5, 3))

注意事项

  1. 业务兼容性:需确保目标站点支持长连接(部分服务器主动关闭)
  2. 连接超时:多数服务器设置60-300秒超时,需定期发送心跳包
  3. 线程安全:多线程场景需为每个线程创建独立Session对象
  4. 响应处理:及时读取响应内容避免连接阻塞
  5. 法律风险:仅用于授权渗透测试,违反《网络安全法》需承担法律责任

相关问题与解答

Q1:HTTP长连接是否一定能绕过WAF?
A1:不能保证完全绕过,高级WAF会结合连接持续时间、请求总量、熵值分析等多维度检测,建议结合以下技术:

  • 动态调整Keep-Alive时长(如每5个请求后重建连接)
  • 使用中间代理服务器分段转发请求
  • 模拟真实用户浏览路径(如先访问首页再触发攻击)

Q2:如何应对WAF的机器学习检测模型?
A2:可采用以下对抗策略:

  1. 请求拟真化:模仿真实用户行为(如加入滚动条加载、表单提交)
  2. 环境仿真:使用真实浏览器自动化工具(Selenium/Playwright)
  3. 噪声注入:在请求中混入10%-20%无效参数(如随机cookie键值)
  4. 节奏模仿:参照网站平均响应时间动态调整请求间隔
0