通过HTTP参数污染绕过WAF拦截 (转)
上个星期我被邀请组队去参加一个由CSAW组织的CTF夺旗比赛.因为老婆孩子的缘故,我只能挑一个与Web漏洞利用相关的题目,名字叫做”HorceForce”.这道题价值300点。这道题大概的背景是,你拥有一个低权限的帐号并需要找到方法来获得管理员权限。
当然,有很多种方法来介绍如何通过这关,但我想分享下我的通关经验。
当把一些单引号作为参数值发送之后返回了MySQL的典型报错信息“MySQL SQL Error Message”,因此可以轻易发现这里存在一个SQL注入漏洞。
然后,正如你了解的,我们通常会进行如下尝试:
http://128.238.66.217/horse.php?id=7 or 1 IN (select current_user)
然后我得到了一个错误信息,类似“请停止攻击该网站“这样的内容。
在我尝试了很多绕过SQLi filter的方法之后,我意识到在网站背后配置了一个WAF来阻止任意包含“select”或“union”等在利用SQL注入时常用的SQL查询关键字。通过这样的黑盒测试可以猜测出WAF使用了类似下面这样的正则:
/^.*select.*$/ or /^.*union.*$/
这意味着,提交任意带有SQL注入企图的字符串,如blablaSELECTblabla或像/*!union*/这样的绕过方式都会触发WAF拦截的错误信息。
在进行了一些研究之后,我发现通过HTTP参数污染的方式能够使攻击者绕过WAF的拦截。
那么,究竟要如何实现呢?
我们假设有一个通过GET方式提交的参数“id”,你可以重复构造这个参数并以下面的形式发送出去:
?id=value1&id=value2
然后,依你使用的框架不同(PHP,Java,ASP.NET,etc),参数字符串会以不同的方式进行解析,在我们实验的场景下Apache/PHP,如果你可以多次注入同一个参数值,只有最后一个参数值会被框架解析,但是你猜怎么着?只有第一个参数会经过WAF的分析和过滤!
这意味着,通过注入: id=7&id=[SQLi]
WAF的网络层会解析 id=7 <-合法
PHP应用层会解析 id=[SQLi] <-注入语句成功执行
因此,这是一个典型的例子,你注入的东西在网络层和应用层被区别对待了。
下面是一张表格,列举了不同的框架当多次接受同一个参数时的不同表现。像ASP.NET,如果它接受到两个参数值,它会拼接两个相同参数的值,因此你可以将被过滤的关键词拆分到两个参数中进行攻击从而绕过WAF,当然这个主题已经超过这篇文章讨论的范围了。

接下来,我们尝试注入一些SQL语句:
128.238.66.217/horse.php?id=0&id=7%20union%20select%201,2,3,current_user
你能注意到,所有的注入利用语句都写到了第二个参数值的位置,这将不会被WAF解析。
我得到了第一次正确的返回结果:
csaw_chal1@localhost
接下来就是常规的MySQL注入过程,这里不再赘述,这篇文章主要在于讲解一种新的绕过WAF的方式,Thx
for reading!
转: http://www.freebuf.com/articles/web/5908.html 谢!
通过HTTP参数污染绕过WAF拦截 (转)的更多相关文章
- 一枚通过参数污染绕过百度RASP的XSS
日常工作过程中,偶然发现一个网站登录页面,在页面返回包中存在一个隐藏参数"mess",且该页面部署了百度RASP进行防护,本文介绍如何发现隐藏参数以及如何通过参数污染方式造成XSS ...
- 如何使用SQLMAP绕过WAF
WAF(web应用防火墙)逐渐成为安全解决方案的标配之一.正因为有了它,许多公司甚至已经不在意web应用的漏洞.遗憾的是,并不是所有的waf都是不可绕过的!本文将向大家讲述,如何使用注入神器SQLMa ...
- 黑客是怎样绕过WAF之三重防护绕过讲解
什么是WAF Web Application Firewall 通过执行一系列针对HTTP/HTTPS的安全策略来防御对Web应用的攻击. 目前主要有单设备WAF与云WAF WAF的现状 1.太多数W ...
- 一些绕过waf的笔记
转自:http://fuck.0day5.com/archives/622.html 一.各种编码绕过1. ? 1 2 ?id=1 union select pass from admin limit ...
- 绕过WAF、安全狗知识整理
0x01 前言 目前市场上的WAF主要有以下几类 1. 以安全狗为代表的基于软件WAF 2. 百度加速乐.安全宝等部署在云端的WAF 3. 硬件WAF WAF的检测主要有三个阶段,我画了一张图进行说明 ...
- 绕过waf
WAF:有硬件和软件类型. 常见的软WAF,常见:安全狗.云锁.云盾.护卫神. SQL注入的绕过: WAF核心机制就是正则匹配. 通过正则匹配,如果符合规则,就拦截. 比如sql注入中and 1=1 ...
- SQL注入绕过waf的一万种姿势
绕过waf分类: 白盒绕过: 针对代码审计,有的waf采用代码的方式,编写过滤函数,如下blacklist()函数所示: 1 ........ 2 3 $id=$_GET['id']; 4 5 $ ...
- 深入理解SQL注入绕过WAF和过滤机制
知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...
- HTTP参数污染
HTTP Parameter Pollution简称HPP,所以有的人也称之为“HPP参数污染”. 一篇很不错关于HPP参数污染的文章:http://www.paigu.com/a/33478/235 ...
随机推荐
- “声讨”高云的《jQuery技术内幕》
1. 前言: 其实本文有点太标题党了,哈哈,见谅.说“声讨”,就是说说我作为一个<jQuery技术内幕>一个忠实读者,读本书的一些想法和建议. 2014年2月20日,我收到了<jQu ...
- docker-使用ali云加速
ali专用网络加速地址; https://yq.aliyun.com/articles/29941 使用ali加速 vim /etc/sysconfig/docker 添加: ADD_REGISTRY ...
- mysql数据库中实现内连接、左连接、右连接
原文:http://www.cnblogs.com/xwdreamer/archive/2010/12/15/2297058.html 内连接:把两个表中数据对应的数据查出来 外连接:以某个表为基础把 ...
- [Python] 震惊, 我居然用Python干这种事ꈍ .̮ ꈍ
阅读本文只需花费你两分钟, 两分钟你买不了吃亏,你也买不了上当. 那么, 为何不静下心来看看呢? Python 海龟创意绘画, Turtle库创作精美图画 Author:Amd794 E-ma ...
- 使用Gitlab一键安装包后的日常备份恢复与迁移
Gitlab 创建备份 使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份: gitlab-rake gitlab:ba ...
- SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型
SpringMvc 中@RequestParam注解使用 建议使用包装类型来代替基本数据类型 public String form2(@RequestParam(name="age" ...
- UIKit 框架之UIControl
前面的UIWebView.UIImageView这些都是视图,显示为主,与用户交互较少,最多也就是通过UIResponder与用户交互.但这样会很麻烦,还要判断点击次数等等问题,那问题就来了:OC中怎 ...
- Netty 源码阅读的思考------耗时业务到底该如何处理
目录大纲: 前言 处理耗时业务的第一种方式-------handler 种加入线程池 处理耗时业务的第二种方式-------Context 中添加线程池 总结:两种方式的对比和思考 前言 熟悉 Net ...
- flink-vs.-spark
这段时间,开始学习Flink,并了解了Spark与Flink的区别,开始觉得Flink大有取代Spark的趋势啊,实时流始终目前是Spark的瓶颈呀,下面来一张对比图: 图片来源于:https://j ...
- 记录数据库操作记录的DDL触发器
我们在项目中经常会对数据做一些操作,比如增加一个字段,修改一个存储过程,删除表等等操作,很有必要记录这些操作,以便以后出了问题,方便找到元凶.接下来介绍一个DDL触发器在实际环境中的使用,这个DDL触 ...