绕过WAF:

WAF防御原理:
简单来说waf就是解析http请求,检测http请求中的参数是否存在恶意的攻击行为,如果请求中的参数和waf中的规则库所匹配,那么waf则判断此条请求为攻击行为并进行阻断,反之则放行。
常见的sql注入绕过WAF了两种方法:
一种是利用waf可能存在的http协议解析缺陷来绕过waf,另外一种是利用各种方式来包装sql注入语句进行混淆来绕过waf的规则库。
数据:
1.加密解密:吧这个字符串进行加密来写。
 
2.编码解码:base64,md5编码解码
 
3.等价函数:例如mid,ascii这种,用其他的函数来取代这个函数
 
4.特殊符号:我们加进去一些特殊符号,数据库不会产生其他影响,举个例子我们要查一个当前用的是什么数据库,那我们select database();就可以了,我们也可以在database的前面添加一些特殊符号,比如~,!什么的都可以。
WAF是这样的,我们可以理解为是编程语言中的正则表达式,然后他将一些关键新的东西和他的字典进行匹配,如果匹配后发现,那么他就进行拦截,就比如说出现了一些关键字符我们就拦截他,没有就放过。

看这个图,我们在原本是要查询的是我们现在用的是什么数据库,语句是真确的,WAF也找到的匹配的结果,就输出我们想要的结果,但是我们在database的前面加上了一个~就出现了下面这个结果,所以我们如果输出的语句中有特殊符号就会达到绕过的这种结果,比如说上面的这个写法,~database,他就达到了绕过的结果。
绕过的前提是你这个sql语句要是一个正确是语句。
5.注释符混用:用的好可以实现和特殊符号一样的效果:MySQL的注释符:--+,#等等。
6.参数污染:

我们随便写一个php,GET形式的代码吧
<?php
$x=$_GET['y'];
echo $x;
?>
这个代码,假设我们给他传了两个数,y=1&y=2
这个时候,我们如果用的是第一个服务端处理方式的话,则会输出最后一个参数
绕过学习:

我们发现我们在爆数据库的时候,呗WAF拦截了(我们用的POST),在绕过中,有两种方式可以进行绕过,一种是更改方式,二是变异。
我们先将database()拆开试试,我们先输入一个database,我们发现他不会拦截,我们在单输入一个括号(这个写法肯定是错的,所以才不会拦截),也不会拦截。我们通过上面这个例子,我们可以发现,拦截的不是我们的database也不是我们的(),拦截的是我们database()这个整体。所以我们的思路应该是我们要让database和()拆分,但是我们不能让他影响数据库的运行,如果我们实现这个的话,我们也就可以实现绕过了。
方法:
1.我们可以实行注释符来注入:为了证明上面的这个思路,我们可以先这样,我们在database的后面加上一个其他的字母:
我们发现没有拦截,也就是说,上面的这个思路是正确的,接下来我们在试试用过滤符号,我们发现可以执行:
现在我们加一点难度:我们将提交方式改为GET,看看要怎么注入:

因为安全狗的POST保护很少,大部分都是GET保护,所以我们将他改为GET相当于提高了难度:
安全狗会自动将这些语句都给拦截掉。
我们在用一次刚刚的语句,发现也给拦截了。
我们去掉了union发现他不会拦截了,我们在去掉select,发现他也不会拦截,但是,只要这两个东西在一起使用的话,就会拦截,因为union select就是安全狗中的拦截掉的联合查询。
所以我们的绕过思路就是,不让这两个在一起,并且可以执行这个sql语句。
我们可以先按照刚刚POST的思路试试能不能成功注入,比如说我们在union和select中都加上注释符,uni/**/on /**/select 变成这样,但是这样变是错误的,我们可以把这句话放到我们的mysql中执行一下看看:
我们用这个方法发现是可以的,但是也被拦截了。
我们在换一种方法,这个方法是这样的:
(补充0A%是一个换行符号。
 23%是#的意思)
我们用%23将union后面的语句过滤掉这样安全狗就检查不出后面的select,但是,问了以防万一,我们用仍以一个字母去干扰一下安全狗,然后我们在换行,再写select 1,2,3#
所以这个语句整体的写下来是这样的
正常写法:
union select 1,2,3#
猜想一:a是用于迷惑安全狗的,以防万一
union #a
->select 1,2,3#
我们换行是为了防止安全狗继续匹配,所以我们将数据写到下一行。
猜想二:#后面会被过滤掉
如果我不换行的话,这个语句就是这样写的:
union #aselect 1,2,3#
这样写的话,#号后面的全部都会被省略掉,相当于就执行了一个union
第二种思路:
补充:mysql的过滤方法有/***/,这个也是过滤的一种。
根据上面的参数污染的知识点我们可以知道一点(此服务器的版本是apache),我们可以给他两个参数,但是最终指只会输出后面的那个参数。
所以我们得到了这个写法:
这个写法我们可以这样来理解
?id=1/**&id=-1 union select 1,2,3%23*/
我们将这句话拆开变成这样的:
前半部分:?id=1/**
后半部分:id=-1 union select 1,2,3#*/
由于安全狗会扫描全部,所以我们通过/***/来将后面这个部分当作一个参数来注释掉,这样安全狗扫描的就是一个空值,所以不会被拦截。
有因为apache只会显示最后一个值,而#刚好将后面的那个*/给注释掉了,所以,我们最终得到的值是这个:
union select 1,2,3#
这样就绕过了WAF进行注入
 
第三种方法:
我们可以使用Fuzz
什么是Fuzz?
fuzz其实就是一种对请求参数的模糊测试,简单来说就是对一个接口的某个参数或多个参数用自定义的内容进行批量提交,根据接口返回内容来判断自定义内容参数对接口的影响。
思路:
我们举个例子:
比如说这个,他就会把这里面的某个地方当作一个字典,批量的去写脚本,比如我们在%0A这个地方来进行测试,那就会变成0b,0c,0d等等等等,生成很多种可能性,然后就会生成很多种可能性,然后我们通过分析数据包来判断看看那个一数据包时返回了正常的页面,则那个页面的那个写法我们就可以称之为绕过了WAF。

SQL注入之WAF绕过注入的更多相关文章

  1. sql注入之堆叠注入及waf绕过注入

    #堆叠查询注入 1.堆叠查询概念 stacked injections(堆叠查询注入)从名词的含义就可以看出一应该是一堆(多条)sql语句一起执行.而在真实运用中也是如此,我们知道在mysql中,主要 ...

  2. WAF绕过神器 (过安全狗、智创SQL注入)

    WAF绕过神器 (过安全狗.智创SQL注入) 发布时间:-- :10文章来源:网络文章作者:panni007 点击次数: 次 分享到: QQ空间 QQ微博 新浪微博 开心网 人人网 摘要:起因: by ...

  3. SQL注入9种绕过WAF方法

    SQL注入9种绕过WAF方法 0x01前言 WAF区别于常规 防火墙 是因为WAF能够过滤特定Web应用程序的内容,而常规防火墙则充当服务器之间的防御门.通过检查HTTP的流量,它可以防御Web应用安 ...

  4. SQL注入绕waf思路总结

    1.关键字大小写混合绕过 关键字大小写混合只针对于小写或大写的关键字匹配技术-正则表达式,如果在匹配时大小写不敏感的话,就无法绕过.这是最简单的一个绕过技术. 例如:将union select混写成U ...

  5. SQL注入原理及绕过安全狗

    1.什么是SQL注入攻击 SQL注入攻击指的是通过构造特殊的输入作为参数插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令 http://www.xxx.com/list. ...

  6. sql注入学习笔记,什么是sql注入,如何预防sql注入,如何寻找sql注入漏洞,如何注入sql攻击 (原)

    (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文章最后关于如何预防sql注入) (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文 ...

  7. PHP+Mysql注入防护与绕过

    今天给大家分享一个关于php常见的注入防护以及如何bypass的文章,文章内容来源国外某大佬总结,我做了一下整理,文章来源地址不详,下面正文开始.以下的方式也仅仅是针对黑名单的过滤有一定的效果,为了安 ...

  8. 17. PHP+Mysql注入防护与绕过

    黑名单关键字过滤与绕过 过滤关键字and.or PHP匹配函数代码如下: preg_match('/(and|or)/i', $id) 如何Bypass,过滤注入测试语句: 1 or 1 = 1   ...

  9. CTF练习三 —— 命令注入&命令执行绕过

    这个题是第四届强网杯也就是2020.8.22号开始的那场一道简单的命令注入题,再这之前我并没有学习过命令注之类的知识,,,看到题之后先搜在学,,误打误撞解了出来,过段时间wp就会放出来,所以这里就不对 ...

  10. SQL中批量删除被注入的恶意代码的方法

    下文将为您介绍SQL中批量删除被注入的恶意代码的方法,供您参考,如果您也遇到了这样的问题,不妨一看,相信对您会有所帮助. 1,如果你的数据表很少的话,那么写几条简单的sql就搞定了 对于表中的nvch ...

随机推荐

  1. mysql命令行创建数据库并设置字符集

    CREATE DATABASE test1 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

  2. Java中MessageFormat的坑

    目录 Java中MessageFormat的坑 问题现象 问题排查 如何解决 Java中MessageFormat的坑 问题现象 某个业务功能需要通过SSH协议执行命令查询一些数据,而某次查询居然没有 ...

  3. Qt编写安防视频监控系统36-onvif连续移动

    一.前言 时隔一年多,重新对视频监控系统的onvif内核重写,一方面为了兼容Qt6,一方面按功能分类提高效率.整体逻辑思路是一样的,主要的改动是由于Qt6不再支持QtXmlPatterns模块(其实这 ...

  4. 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.2版已发布

    关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...

  5. Solution Set -「NOIP Simu.」20221011

    「Unknown」找   给出平面上 \(n\) 个点, 对于每个点, 求出它到其他点的欧式距离平方和.   \(n\le2\times10^5\).   Tag:「水题无 tag」   画风正常的签 ...

  6. WebSocket一篇就够了-copy

    WebSocket介绍与原理 WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP请求完成. --百 ...

  7. react 趟坑

    最近一直在做react项目,发现一个bug,困扰了我两天. Can't perform a React state update on an unmounted component. This is ...

  8. 【Java 温故而知新系列】基础知识-05 面向对象

    1.面向对象概述 面向对象(Object-Oriented,简称OO)是一种编程思想,核心思想是将现实世界中的事物抽象为程序中的"对象",通过对象之间的交互来解决问题. 对象 对象 ...

  9. Java8之list.stream的常见使用

    本文转自 https://blog.csdn.net/jhgnqq/article/details/123679622 感谢楼主分享 import org.junit.Before; import o ...

  10. sqlserver grouping函数和with rollup的使用

    --使用WITH ROLLUP 生成的结果集显示所选列中值的某一层次结构的聚合,GROUPING()函数判断是否根据当前字段进行了求和的行SELECT sjxm, (CASE WHEN GROUPIN ...