当前位置: 首页 > news >正文

WAF绕过常见方法

        前面写了WAF如何检测,现在直接上WAF常见的一些绕过方法。

方法1:变换大小写

实例:

         比如WAF拦截了union,那就使用Union、UnloN等方式绕过。

方法2:编码绕过

实例1:

        WAF检测敏感字~,则可以用Ox7e代替,如extractvalue(1,concat('~'.database())可以写成extractvalue(1,concat(Ox7e,database())).

实例2:

        WAF检测敏感字"admin',则可以用Ox61646d696e代替,如select name,passfrom userswhere name='admin'可以替换成select name,pass from users where name=Ox61646d696e.

实例3:

        WAF检测敏感字select,可以在URL中将select变成%73elEcT编码结合大小写变换绕过WAF。实例4:可以用%09、%0a、%0b、%Oc、%0d、%a0、!**1、/*somewords*/等来替换空格。

方法3:利用注释符

        适用于WAF只过滤了一次危险的语句,而没有阻断整个查询语句的场合。

实例:

        原查询语句为:?id=1 union select 1,2,3,对于这条查询,WAF过滤了一次union和select,我们可以用内敛注释符注释掉里面的过滤掉,如?id=1/*union*/union /*select*/select 1,2,3

方法4:重写

        适用于WAF只过滤—次敏感字的情况。

实例:

        WAF过滤敏感字union,但只过滤一次,则可以写出类似ununionion这样的,过滤一次union后就会执行我们的查询了:?id=1 ununionion select 1,2,3

方法5:比较操作符替换

        适用于某—比较操作符(如等号)被过滤的情况。

实例1:

        !=不等于,>不等于,<小于,>大于,这些都可以用来替换=来绕过。

        比如要判断某个值是不是74,假设=被过滤,则可以判断是不是大于73,是不是小于75,然后就知道是74了:/?id=1 and ascii(lower(mid((select pwd from users limit 1,1),1,1))>73

                        /?id=1 and ascii(lower(mid((select pwd from users limit 1,1),1,1)))<75

实例2:

        WAF将=、>、<全部过滤,则可以利用like来绕过,如?id=1' or 1 like 1

方法6:同功能函数替换

        适用于某—函数被过滤的情况。

实例:

        假如substring()被WAF过滤,但substring()可以用同功能的mid(),substr()等函数来替换,都是用来取字符串的某—位字符的。

        原查询语句: substring((select 'password'),1,1)= Ox70替换后的查询语句:

        substr((select 'password'),1,1)= Ox70mid((select 'password'),1,1) = Ox70

方法7:盲注的活用

        适用于页面无回显或多种函数、逻辑运算符被过滤的情况。实例: strcmp(expr1,expr2)用来比较两个值,如果expr1=expr2,则函数返回0,expr1<expr2则返回-1,expr1>expr2则返回1。

        假如index.php?uid=123页面返回是正确的,但WAF过滤了and和or ,

        原查询语句index.php?uid=123 and left((select hash from users limit 0,1),1)='B',可用

index.php?uid=strcmp(left((select hash from users limit 0,1).1),0x42)+123来替换,通过盲猜hash的第一位,如果第一位等于Ox42也就是B,那么strcmp()将返回0,0+123=123,所以页面应该是正确的。否则就说明不是B,这样猜就不用and和or了.

方法8:二阶注入

        所谓二阶注入(又称存储型注入)是指已存储(数据库、文件)的用户输入被读取后再次进入到SQL查询语句中导致的注入。

        普通SQL注入:

        发生在一个HTTP请求和响应中,对系统的攻击是立即执行的:

        (1)攻击者在http请求中提交非法输入;

        (2)应用程序处理非法输入,使用非法输入构造SQL语句;(3)在攻击过程中向攻击者返回结果。

        二阶SQL注入:

        (1)攻击者在http请求中提交某种经过构思的输入

        (2)应用程序存储该恶意输入(通常保存在数据库中)以便后面使用并响应请求;(3)攻击者提交第二次(不同的)http请求;

        (4)为处理第二次http请求,程序会检索存储在数据库中的恶意输入并进行处理,从而导致攻击者构造的SQL查询被执行;

        (5)如果攻击成功,在第二次请求响应中向攻击者返回查询结果。

方法9:密字节注入

        适用于数据库使用双字节编码方式(如GBK)、WAF利用AddSlashes()等函数对敏感字符进行转义的场景.

相关文章:

  • SpringMVC01
  • 天猫数据分析(天猫查数据工具):2023年天猫平台假发行业市场销售数据分析报告
  • XZ_iOS 之 M1 M2 M3的M系列芯片的Mac苹果电脑安装cocoapods
  • Redis cluster集群设置密码
  • Wireshark与其他工具的整合
  • ImageIO类的使用
  • urllib2 HTTP头部注入
  • 【递归 回溯】LeetCode-226. 翻转二叉树
  • 还在用nvm?来试试更快的node版本管理工具——fnm
  • 【C语言】自定义类型——枚举、联合体
  • 【Android Studio】各个版本下载地址
  • Springboot访问html页面
  • ansible在ubuntu下的安装和使用
  • Android Studio: 解决Gradle sync failed 错误
  • Opencv 入门三(视频滑动条窗口)
  • 【Amaple教程】5. 插件
  • 【技术性】Search知识
  • 2017 年终总结 —— 在路上
  • Angular2开发踩坑系列-生产环境编译
  • Java教程_软件开发基础
  • passportjs 源码分析
  • rc-form之最单纯情况
  • Redis 中的布隆过滤器
  • Vue 动态创建 component
  • vue-cli3搭建项目
  • vue--为什么data属性必须是一个函数
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 技术发展面试
  • 码农张的Bug人生 - 见面之礼
  • 思维导图—你不知道的JavaScript中卷
  • 在electron中实现跨域请求,无需更改服务器端设置
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 如何正确理解,内页权重高于首页?
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Python第六天)文件处理
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (三)c52学习之旅-点亮LED灯
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (算法)求1到1亿间的质数或素数
  • (转)四层和七层负载均衡的区别
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .NET 事件模型教程(二)
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET处理HTTP请求
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .stream().map与.stream().flatMap的使用
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @RunWith注解作用
  • [383] 赎金信 js
  • [BZOJ 4598][Sdoi2016]模式字符串