8-WAF绕过

WAF

WAF部署

  • 安全狗,宝塔等waf搭建部署
  • https://blog.csdn.net/nzjdsds/article/details/93740686
  • 流量防护:某ip访问过多入黑名单
  • 建议阿里云搞个服务器部署进行绕过测试

WAF常见功能

  • 总体来说,WAF(Web Application Firewall)的具有以下四个方面的功能:
    • 审计设备:用来截获所有HTTP数据或者仅仅满足某些规则的会话
    • 访问控制设备:用来控制对Web应用的访问,既包括主动安全模式也包括被动安全模式
    • 架构/网络设计工具:当运行在反向代理模式,他们被用来分配职能,集中控制,虚拟基础结构等
    • WEB应用加固工具:这些功能增强被保护Web应用的安全性,它不仅能够屏蔽WEB应用固有弱点,而且能够保护WEB应用编程错误导致的安全隐患

WAF常见特点

  • 异常检测协议:拒绝不符合HTTP标准的请求
  • 增强的输入验证:代理和服务端的验证,而不只是限于客户端验证
  • 白名单&黑名单:白名单适用于稳定的Web应用,黑名单适合处理已知问题
  • 基于规则和基于异常的保护:基于规则更多的依赖黑名单机制,基于异常更为灵活
  • 状态管理:重点进行会话保护
  • 另还有:Coikies保护、抗入侵规避技术、响应监视和信息泄露保护等
  • WAF识别扫描器:
    1.扫描器指纹(head字段/请求参数值),以wvs为例,会有很明显的Acunetix在内的标识
    2.单IP+ cookie某时间段内触发规则次数(流量识别)
    3.隐藏的链接标签等()
    4.Cookie植入
    5.验证码验证,扫描器无法自动填充验证码
    6.单IP请求时间段内Webserver返回http状态404比例,因为扫描器探测敏感目录基于字典,找不到文件则返回404

WAF绕过

数据
  • 大小写,加密解密,替换关键字,编码解码,等价函数与命令,特殊符号,反序列化,注释符混用
大小写
  • 大小写绕过用于只针对小写或大写的关键字匹配技术,正则表达式/express/i 大小写不敏感即无法绕过,这是最简单的绕过技术
  • 某些数据库对大小写不敏感,例如mysql
  • 示例:SElect
编码解码
  • mysql支持url编码,十六进制编码
  • 普通的URL编码可能无法实现绕过,还存在一种情况URL编码只进行了一次过滤,可以用两次编码绕过
    • %0a:换行符
    • %23:#
  • 十六进制编码
  • Unicode编码(宽字节绕过):Unicode有所谓的标准编码和非标准编码,假设我们用的utf-8为标准编码,那么西欧语系所使用的就是非标准编码了
    • 常用符号的Unicode编码:
      • 单引号: %u0027、%u02b9、%u02bc、%u02c8、%u2032、%uff07、%c0%27、%c0%a7、%e0%80%a7
      • 空格:%u0020、%uff00、%c0%20、%c0%a0、%e0%80%a0
      • 左括号:%u0028、%uff08、%c0%28、%c0%a8、%e0%80%a8
      • 右括号:%u0029、%uff09、%c0%29、%c0%a9、%e0%80%a9
    • 其他比较多的可能是utf-7的绕过,还有utf-16、utf-32的绕过,后者从成功的实现对google的绕过
  • 常见的编码当然还有二进制、八进制,它们不一定都派得上用场
等价函数
  • 使用效果相同的其他函数
特殊符号
  • 数据库里的一些特殊符号,加上去不会导致查询受到影响
  • 通过影响匹配规则实现绕过
  • 看具体数据库
反序列化
  • 前提:对方支持反序列化
注释符混用
  • 看具体数据库
  • 建议现在本地数据库上测试语句能不能执行
  • mysql示例:
    1.普通注释
    • 例如database没被拦截,database()被拦截,说明这是整体拦截,可以database/**/()绕过
      • /**/在构造得查询语句中插入注释,规避对空格的依赖或关键字识别,相当于空格
    • 在mysql中%0a可编码为换行符,造成截断效果
      • 示例:id=1/%0a/union/%0a/select/%0a/1,2,3;
      • 可继续加干扰如:id=1/X%0a/union/X%0a/select/X%0a/1,2,3;
        2.内联注释
    • 相比普通注释,内联注释用的更多,它有一个特性/!**/只有MySQL能识别
    • 示例:
      • id=-15 /!UNION/ /!SELECT/ 1,2,3
      • id=null%0A///!50000%55nIOn//yoyu/all//%0A/!%53eLEct/%0A/nnaa/+1,2,3,4…
方式
  • 更改提交方式,变异
其他
  • Fuzz大法,数据库特性,垃圾数据溢出,HTTP参数污染,整合绕过
Fuzz
  • 即模糊测试
  • 将一个地方作为支点使用脚本批量测试,看哪些语句没有被ban,相当于爆破
数据库特性
  • mysql特有:
    • 正常情况下/xxx/中xxx会被注释掉不会执行
    • 但如果是/50001 select * from test/
    • 该语句表示假如数据库是5.00.01版本以上,该语句就会被执行,在接收端眼里这条语句是注释,因此绕过,但能在mysql中执行,产生注入
HTTP参数污染
  • 这里HTTP参数控制除了对查询语句的参数进行篡改,还包括HTTP方法、HTTP头的控制
  • 不同服务器对相同参数的获取不一样
  • 示例:/?id=1&id=4&id=3
    • 有些是获取最后一个,有些是获取第一个,有些是获取全部,如下图所示
  • 攻击示例:
    • 获取全部:/?id=1/**/union/&id=/select/&id=/pwd/&id=/from/&id=/users
    • 获取
白名单
IP白名单
  • 只有相应的ip才能访问
  • 如果对方是从网络层获取ip,一般无法伪造,但如果是获取客户端的ip,就可能通过修改数据吧伪造IP绕过,一般服务器自己访问自己不会被拦截
  • 测试方法:修改数据包的header来绕过
    • X-forwarded-for
    • X-remote-IP
    • X-originating-IP
    • X-remote-addr
    • X-Real-IP
静态资源
  • 特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css等等),类似白名单机制,waf为了检测效率,不去检测这样一些静态文件名后缀的请求
  • 示例:
    • http://10.9.9.201/ sql.php?id=1
    • http://10.9.9.201/sql.php/1.js?id=1
    • 参数还是传递给.php
    • 备注: Aspx/php只识别到前面的.aspx/.php后面基本不识别
url白名单
  • 为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台。只要url中存在白名单的字符串,就作为白名单不进行检测。常见的url构造姿势:
    • http://10.9.9.201/sql.php/admin.php?id=1
    • http://10.9.9.201/sql.php?a=/manage/&b=../etc/passwd
    • http://10.9.9.201/../../../ manage/../sql.asp?id=2
    • waf通过/manage/"进行比较,只要uri中存在/manage/就作为白名单不进行检测,这样我们可以通过/sql.php?a=/manage/&b=../etc/passwd 绕过防御规则。
爬虫白名单
  • 部分waf有提供爬虫白名单(各大浏览器的爬虫)的功能,识别爬虫的技术一般有两种:
    1、根据useragent
    2、通过行为来判断
  • UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试绕过
  • 有时候用扫描工具扫被拦截了,但是还是返回200产生误报,这时候修改UserAgent可能可以绕过,例如修改成百度的指纹,因为此时网站会识别为浏览器正常爬取网站,因此可能不会拦截
  • User Agent switcher (Firefox附加组件),下载地址:https : //addons.mozilla.org/en-us/firefox/addon/user-agent-switcher/

示例讲解

  • -1 union a select 1,2,3#发现没有被拦截,改为-1 union%23a%0aselect 1,2,3#
    • 即-1 union #a换行符select 1,2,3#
      • 可以正常执行是因为#只注释所在行,换行符防止后面的语句被#干扰
  • id=-1/**&id=union%20select%201,2,3%23*/
    • 某些waf接收到的是id=1/**&id=-1%20union%20select%201,2,3%23/,例如19年的安全狗接收第一层,然后认为id=1后面那部分是注释就不管了,形成绕过,但php/apache脚本在第二层获取的是最后一个参数,即-1%20union%20select%201,2,3%23/,形成注入

可能问题

  • 网站标题出现Error Based String(基于字符串错误),说明是字符型

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

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

相关文章

一个基于 .NET 开源免费的异地组网和内网穿透工具

前言 今天大姚给大家分享一个基于 .NET 开源免费的异地组网和内网穿透工具:linker。 工具介绍 linker是一个基于 .NET8 开源免费(GPL-2.0 license)的异地组网和内网穿透工具,支持TCP(支持IPV6)打洞、UDP打洞,服务器中继,异地组网使用虚拟网卡将各个客户端组建为局域网络、…

还是继续写博客吧!作为留痕、作为给面试官了解我的资料。

今天我被约谈了,没错,说的是“毕业”的事情 今天下午三点的时候,我接到了一个工单,我很纳闷,这是一个很简单且稳定运行了几年的东西,怎么有问题了?这个系统我太熟悉了,简单看下日志,便发现了问题所在——用户信息上的关键标识缺失,导致了某个接口查询无结果。我赶紧联…

SvelteKit 最新中文文档教程(12)—— 高级路由

前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

代码随心录第一天|Leecode (704二分查找、27移除元素、977有序数组的平方

Leecode 704二分查找 题目链接:https://leetcode.cn/problems/binary-search/ 题目描述 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。题目解法 思路: 题目前提是数组为有序…

Linux输出重定向全攻略:掌握命令行高效管理的艺术

概述 在Linux中,输出重定向是一种将命令的输出(标准输出或标准错误)重定向到文件或其他设备的方法。以下是一些常见的输出重定向操作符及其用法:标准输出重定向 (>)将命令的标准输出重定向到一个文件中。如果文件不存在,它会被创建;如果文件已经存在,它会被覆盖。 co…

XN2025 集训记录 D6

梦境是一个微妙的境界 , 空寂感与包裹感交织 , 哪些景象明明永远不可能出现在现实 , 却像家一样 . . . 温暖 . . . 熟悉XN2025 集训记录 D6 今天西安也降温了 , 一晚上没睡好 , 做了能有三四个梦 . 梦到自己去神秘巨大建筑群集训 , 找不到同桌还没找明白房间 . . . 这都啥跟啥 …

树上差分学习笔记+做题记录

树上差分 点的差分求路径 \(u-v\) 上的点被经过的次数. \(cnt[x]\) 表示点 \(x\) 被经过的次数. 核心代码:cnt[u]++; cnt[v]++; cnt[lca(u,v)]--; cnt[father[lca(u,v)]]--;边的差分求 \(u-v\) 路径上每条边的经过次数 \(cnt[x]\) :代表 \(x\) 向上的边经过的次数. 核心代码:cn…

小迪安全|web安全|渗透测试|小白学习笔记Day1

Day1-概念名词 域名 什么是域名例www(可以换).xxx.com(可以换) 可以简单的理解为我们平常使用的网址,具体可以参考:https://baike.baidu.com/item/域名/86062域名在哪里注册国内像万网,新网都可以注册域名,可以在上面提及的网站上面进行查询以及进行注册什么是二级域名以及…

蓝桥杯1

今天写了写蓝桥杯的顺序结构程序设计类型的题,相关数学计算,输入输出复习。

分布式架构下出现的503问题

今天写完接口之后发现客户端503了,查看后端代码报的错 先看最下面的caused by:OK有点抽象,看看上面报的什么:哦我好像有点理解,该不会是我sql配置写错了吧,看看:id怎么会有一点报红呢?哦,是http没有加s啊有些时候就是会出现这种很扯的问题

经典算法 - 贪心算法

贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。1. 基本定义 贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。 局部最优推出全局最优。2. 分发饼干 力扣455题。 问题描…

经典算法 - 回溯法

回溯法是一种纯暴力的搜索,并不是一种高效的算法。1. 基本概念 递归和回溯相辅相成。只要有递归,就会有回溯。 回溯法是一种纯暴力的搜索,并不是一种高效的算法。 回溯法可以解决的问题:组合问题 切割问题 子集问题 排列问题 棋盘问题如何理解回溯法 回溯法,都可以抽象为一…