上个星期我被邀请组队去参加一个由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拦截 (转)的更多相关文章

  1. 一枚通过参数污染绕过百度RASP的XSS

    日常工作过程中,偶然发现一个网站登录页面,在页面返回包中存在一个隐藏参数"mess",且该页面部署了百度RASP进行防护,本文介绍如何发现隐藏参数以及如何通过参数污染方式造成XSS ...

  2. 如何使用SQLMAP绕过WAF

    WAF(web应用防火墙)逐渐成为安全解决方案的标配之一.正因为有了它,许多公司甚至已经不在意web应用的漏洞.遗憾的是,并不是所有的waf都是不可绕过的!本文将向大家讲述,如何使用注入神器SQLMa ...

  3. 黑客是怎样绕过WAF之三重防护绕过讲解

    什么是WAF Web Application Firewall 通过执行一系列针对HTTP/HTTPS的安全策略来防御对Web应用的攻击. 目前主要有单设备WAF与云WAF WAF的现状 1.太多数W ...

  4. 一些绕过waf的笔记

    转自:http://fuck.0day5.com/archives/622.html 一.各种编码绕过1. ? 1 2 ?id=1 union select pass from admin limit ...

  5. 绕过WAF、安全狗知识整理

    0x01 前言 目前市场上的WAF主要有以下几类 1. 以安全狗为代表的基于软件WAF 2. 百度加速乐.安全宝等部署在云端的WAF 3. 硬件WAF WAF的检测主要有三个阶段,我画了一张图进行说明 ...

  6. 绕过waf

    WAF:有硬件和软件类型. 常见的软WAF,常见:安全狗.云锁.云盾.护卫神. SQL注入的绕过:  WAF核心机制就是正则匹配. 通过正则匹配,如果符合规则,就拦截. 比如sql注入中and 1=1 ...

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

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

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

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

  9. HTTP参数污染

    HTTP Parameter Pollution简称HPP,所以有的人也称之为“HPP参数污染”. 一篇很不错关于HPP参数污染的文章:http://www.paigu.com/a/33478/235 ...

随机推荐

  1. 06 - JavaSE之常用类

    String类 String 类是不可变的字符序列,String 字符串一旦分配好就不能改变其内容和长度了.(如果使用 s1+=s2; 并不是在s1的后面开辟空间将s2拷贝其内,而是另外开辟一个空间, ...

  2. XAML属性赋值转换之谜(WPF XAML语法解密)

    XAML与XML类似,就是XML延伸过来的.为了更好的表达一些功能,WPF对XML做了扩展,有些功能是WPF在后台悄悄的替你做了.有时候,虽然实现了某个功能,但是对实现原理还是很茫然.今天就讲讲XAM ...

  3. es6学习笔记3--解构和对象

    1.解构 在接收数据的地方(比如赋值的左边),解构使你使用模式去获取部分数据. 下面的代码是解构的一个例子: let obj = { first: 'Jane', last: 'Doe' }; let ...

  4. UVa 10129 Play on Words(并查集+欧拉路径)

    题目链接: https://cn.vjudge.net/problem/UVA-10129 Some of the secret doors contain a very interesting wo ...

  5. Array.prototype.map()和Array.prototypefilter()

    ES5 => 筛选功能  Array.prototypefilter(): 代码: var words = ['spray', 'limit', 'elite', 'exuberant', 'd ...

  6. 下拉加载更多DEMO(js实现)

    项目的一个前端页面展示已购买商品时,要求能下拉加载更多.花了点时间研究这个功能,以前没做过. 首先需要给div加scroll事件,监听滚动条滚动动作.那何时触发加载动作呢?当滚动条滚到底的时候.如何判 ...

  7. [日常] Go语言圣经--并发的循环习题

    练习 8.4: 修改reverb2服务器,在每一个连接中使用sync.WaitGroup来计数活跃的echo goroutine.当计数减为零时,关闭TCP连接的写入,像练习8.3中一样.验证一下你的 ...

  8. SpringBoot中动态加载(热部署)

    在常规的Java Web开发过程中,在修改完代码后,往往需要重启Tomcat来使得我们的修改生效,在SpringBoot中也需要从新启动SpringBoot来将修改部署.如果我们不希望重启tomcat ...

  9. ApplicationListener用法

    ApplicationListener是spring提供的接口,作用是在web服务器启动时去加载某些程序. 用法: 1.实现ApplicationListener接口,并重写onApplication ...

  10. php根据命令行参数生成配置文件

    像npm, composer等工具,在开始使用的使用,都需要初始化项目,生成一个项目的配置文件.这种功能的原理是怎么实现的呢? 比如: D:\>npm init --yes Wrote to D ...