WAF 绕过:漏洞利用中的注入、上传、跨站等绕过实践

目录

WAF 绕过:漏洞利用中的注入、上传、跨站等绕过实践

一、课程背景与演示环境介绍

二、WAF 拦截原理与重点漏洞分析

(一)WAF 拦截原理

(二)重点漏洞类型

三、绕过 WAF 的方法

(一)手工绕过

(二)工具绕过(以 SQLmap 为例)


在网络安全领域,WAF(Web 应用防火墙)是保护 web 应用程序免受攻击的重要防线。然而,攻击者也在不断寻找方法绕过 WAF 进行恶意攻击。本文将详细讲解在漏洞利用场景下,针对 SQL 注入、文件上传、跨站等常见攻击方式的 WAF 绕过方法,包括原理、步骤和相关代码。

一、课程背景与演示环境介绍

本次课程是网络安全系列课程中的一部分,原计划共 50 天,本次是第 49 天内容。由于部分准备工作原因,下节课预计在 10 月 3 号或 10 月 10 号进行。

演示环境包括宝塔、阿里云加安全狗这三个 WAF 环境,主要针对 Apache 和 Linux 搭建的中间件,多数是 PHP 类型的网站。因为 Java 网站的中间件情况不同,获取 Java 相关的 WAF 环境较困难,但绕过思路相似。

二、WAF 拦截原理与重点漏洞分析

(一)WAF 拦截原理

WAF 通过监控输入内容来判断是否存在攻击行为。对于 SQL 注入,它会检测是否有 SQL 语句输入;文件上传时,会检查文件格式;跨站攻击则留意特定标签;命令执行中会关注敏感函数或命令等。若发现这些特征,WAF 就会进行拦截。

(二)重点漏洞类型

重点关注的漏洞类型主要有 SQL 注入、文件上传、跨站等五个漏洞。这些漏洞可能对系统造成直接危害,而像逻辑漏洞、未授权访问等漏洞,WAF 可能无法准确判定是否为攻击行为,基本不会拦截。因为逻辑漏洞往往是代码逻辑问题,如根据 ID 获取信息,改变 ID 值这种情况很难被认定为攻击。

三、绕过 WAF 的方法

(一)手工绕过

手工测试的优势在于可避免因访问速度过快触发的 CC 拦截(流量拦截)。因为手工发送请求有延迟,能更自然地模拟正常用户行为。

(二)工具绕过(以 SQLmap 为例)

使用工具速度快,但可能触发 CC 规则。若使用 SQLmap 绕过,需要考虑流量防护问题。

  1. 解决 CC 拦截的方法
    • 可通过修改 User - Agent 头模拟爬虫使其成为白名单。在 Python 中,可以使用 requests 库来设置请求头,示例代码如下:

import requests

headers = {
    "User - Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/[版本号] Safari/[版本号]"
}
response = requests.get(url, headers=headers)

  • 或者利用网上付费接口实现每秒换 IP 来绕过拦截。这需要根据所使用的付费接口的 API 来编写代码,一般会涉及到向接口发送请求获取新 IP 并设置为当前请求的源 IP。

  1. 针对安全狗和阿里云的 SQLmap 绕过方法
    • 安全狗绕过
      • 关闭宝塔面板的付费防护功能,先单独测试安全狗。如果本机 IP 被安全狗封锁,可以使用代理。比如之前购买的隧道代理,每请求一次换一个 IP。假设代理服务的 API 如下(这里只是示例,实际根据具体代理服务而定):

import requests

proxy_url = "https://proxy-api.com/get_proxy"  # 获取代理的 API
proxy_info = requests.get(proxy_url).json()
proxy = {
    "http": proxy_info["proxy_address"],
    "https": proxy_info["proxy_address"]
}
response = requests.get(url, proxies=proxy)

  • 同时,安全狗可能会检测 SQLmap 的工具标识。可将注入点按照特定思路写成.py 文件放入 SQLmap 的 tmp 目录下作为第三方模块,修改注入规则。以下是一个简单的示例(假设注入点逻辑在自定义函数 inject_rule 中):

# inject_rule.py
def inject_rule():
    # 这里编写针对安全狗的注入规则修改逻辑
    pass

在 SQLmap 命令中可以使用--tamper=inject_rule.py来加载这个自定义模块。

  • 此外,为了避免被安全狗识别,还可以通过自定义头(如模仿自己浏览器的头部)或使用随机头来模拟正常用户请求行为。使用 requests 库设置自定义头的示例前面已给出,使用随机头可以使用一些第三方库来生成随机的 User - Agent 等头部信息。

  • 阿里云绕过
    阿里云在漏洞发布方面没有特殊问题,若购买了其 WAF 则可防护流量和攻击行为,但一些简单方法(如用代理、加延迟)可能就可以绕过。可以使用类似安全狗绕过中的代理方法,若遇到网络问题,可以使用提前准备好的代理(付费插件)来继续测试。

  1. 宝塔 WAF 绕过思路与方法
    对于宝塔的拦截,发现其检测特定符号(如百分号加星号等)。可通过在符号前加 “0%” 来截断检测,让其无法识别后面的关键内容,从而实现绕过。例如在修改 SQL 语句等涉及符号的地方都可采用此思路。以下是一个简单的 SQL 语句修改示例(假设是一个简单的 SQL 查询注入场景):

original_sql = "SELECT * FROM users WHERE username LIKE '%admin%'"
bypass_sql = "SELECT * FROM users WHERE username LIKE '0%admin%'"

在实际测试过程中,可能会遇到一些问题,如宝塔面板某些规则突然消失、画面黑屏、找不到相关设置等情况。而且网上很多公布的绕过方法可能因软件升级等原因失效,之前有效的方法在新环境下也可能不再适用。需要不断根据实际情况调整绕过策略。

在前端,如果使用 Vue3 和 TypeScript 来模拟攻击请求,可以在组件中使用 axios 库发送请求,示例代码如下:

import axios from 'axios';

axios.get('your_url', {
    headers: {
        // 设置请求头,如 User - Agent 等
        'User - Agent': 'your_custom_agent'
    }
}).then(response => {
    console.log(response.data);
}).catch(error => {
    console.error(error);
});

对于后端(假设是 Java),如果需要处理和分析攻击请求,可以在 Servlet 或者 Spring Boot 等框架中编写相应的逻辑来检测和防范可能的攻击,这里就不详细展开了,因为本文主要侧重于 WAF 绕过的内容。但一般来说,会涉及到对请求参数的解析和安全检查。

总之,WAF 绕过是一个复杂且需要不断实践和探索的领域,需要综合考虑多种因素和技术手段。同时,安全防护和攻击之间的对抗是持续不断的,需要持续关注安全技术的发展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值