热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【技术分享】使用Burp的intruder功能测试有csrf保护的应用程序

作者:王松_Striker & Jess_喵预估稿费:170RMB(不服你也来投稿啊!)投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿前言很多Web应用会有防止跨站请求伪造的策略

http://p6.qhimg.com/t0163d747c2dd42b17e.png

作者:王松_Striker & Jess_喵

预估稿费:170RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言

很多Web应用会有防止跨站请求伪造的策略,比如通过request请求传一个当前页面有效或者当前会话有效的参数(如果他们没有,那就很值得研究)。这些参数用来证明这个请求是从预定用户发出的,而不是攻击者那里。

这些参数,用来防止用户因为被劫持而发出伪造的请求。企业的安全顾问来评估这些参数,过程非常繁琐。传统的扫描器和其他自动化工具不能够准确的提交这些参数,也因此变得不那么理想。

这篇文章将展示如何使用Burp的intruder的Recursive Grep  payload功能来自动提交有csrf保护的token的方法。


使用场景

我们使用一个自己开发的程序来展示这个例子。这个程序是一个带有防御csrf的token的简单搜索表单

我们的目的是通过这个搜索功能来查看是否有XSS漏洞。

当我们第一次加载这个页面,我们看到这个页面的源代码有一个hidden的输入框,name是csrf_token。每次刷新这个页面时,这个token都会改变。

http://p1.qhimg.com/t01a8318d2d6f4240d6.jpg

为了自动测试,我们需要一种在每次发送request请求时都能提交正确的csrf_token的方法。提交任何不匹配的数据都会导致报错或者在服务器端显示错误日志。


Recursive Grep功能

Burp工具提供了一个名叫recursive grep的payload,能够让你从攻击的前一个请求的返回包中提取出每个payload,我们可以利用这个功能从html中提取出csrf_token,重放到下一次请求中,以便进行自动化的fuzz攻击。

我们安装了一个burp的扩展,我们叫它xssValidator,用来自动测试xss漏洞。

我们可以使用burp的Recursive grep payload去提取csrf_token的值,结合使用xssvalidator payloads去自动发现应用中的有csrf保护的xss漏洞。

操作示范

像平时使用的一样,向intruder发送一个请求,定义这个你想要fuzz的插入点,定义了所有你需要的插入点后,找到http请求中发送csrf token的地方,然后也定义为一个payload。请记住这个payload的位置(position number),因为对于下一步来讲这很重要。

http://p3.qhimg.com/t016461c8c9ee1c8409.jpg

定义了所有payload之后,我们需要设置攻击方式,这个例子中,我们使用pitchfork方式。

我们从给COOKIE头配置csrf_token参数这个payload开始,在这个例子中,它在第一个位置。定义这个payload的类型为Recursive grep,如下图:

http://p5.qhimg.com/t015ccaa4982a596bce.jpg

下一步,我们需要定义这个payload需要从http返回包中提取的参数的位置,切换到options tab,浏览 grep-extract面板。

http://p3.qhimg.com/t01bf7690f9fc5ce20d.jpg

点击添加按钮,会展示出一个可以用来定义需要提取grep item的面板,有一些可选参数:用来定义开始和结束位置,或者使用正则来提取。这个例子中我们使用定义开始和结束位置的方法。

为了定义这个位置,只要简单的在http返回包中高亮选择这个区域即可。这个区域可以在header和body中。

http://p7.qhimg.com/t01dbf322d97ca08a55.jpg

在高亮显示这个所需区域后,你可以看到这个态势和结束选择被自动填写了,点击OK,现在你可以在grep-extract面板看到一个条目。

http://p1.qhimg.com/t018b096be4a89d9452.jpg

注意:burp默认的抓取长度是100个字符。在很多情况下太少了,别忘了配置一下。

Recursive grep payload 要求intruder 进行单线程攻击。以确保payload被正确重放,切换导航到request engine面板,设置线程为1。

http://p0.qhimg.com/t0150dd6fc66ae4cf06.jpg

这个时候,我们需要完成配置这个payload。切换回payload tab,到Recursive grep payload设置。在payload选项中,你现在可以看到一个列表中有一个extract  grep  条目可以选择,确定这个被选择了。在这个例子中,你将看到我们提供了一个初始的payload值。很多时候,我们当测试csrf防御的应用时,第一次请求需要是一个有效的token,来确保不会由于发送非法token而触发任何反csrf的功能。

到这里我们已经完成了对Recursive grep payload的定义可以继续定义其他的payloads了。

例子中的应用有两个位置:search和csrf_token。我们试图注入搜索参数。这个csrf_token参数则是需要从其他地方获取的token。

我们测试这个应用的xss漏洞,因此我们安装了xssValidator扩展去测试position number 2.这个扩展需要利用外部phantomJs服务器通过burp intruder 准确的寻找xss漏洞。 欲了解更多信息,请访问我们的博客文章:使用BurpSuite和PhantomJS精确检测xss漏洞(http://blog.nvisium.com/2014/01/accurate-xss-detection-with-burpsuite.html)。

在位置3 我们需要再次提供csrf_token。我们已经在位置1使用burp的Recursive grep获取了token,我们现在可以使用burp的copy other payload 去复制前一个payload定义的值。在我们的例子中,我们让payload的位置1和3有相同时值。

http://p8.qhimg.com/t019f60eb6c787a5b03.jpg


执行攻击

现在我们定义了所有的payload,我们已经为发动这个攻击做好准备。来吧,快活吧~ 在执行过程中,你将会看到burp自动的从前一次的请求中获取csrf_tokenm并把它作为下一次请求的payload中的值。同样,你会注意到我们例子中使用的payload1和payload3具有相同的值。因为我们使用了burp的copy other payload的功能在多个位置传递csrf_token 。

http://p0.qhimg.com/t0138c3760d1c7eaae6.jpg

这个案例中,我们看到有一列名字是fy7sdu…,这列来自xssValidator扩展,当选中的时候,表示这里可能会有xss漏洞。


总结

我们已经证明,仅仅因为一个应用程序有防御csrf的 token, 视图对象或者其他相似的场景,并不意味着无法自动测试。Burp的recursive grep payload是对于测试web应用是非常有用的功能。

如果你想测试一个重定向的页面,定义extract grep item的面板目前不提供跟踪重定向,尽管设置了重定向选项。如果你手动添加这个值,intruder将会在执行payload的过程中按照期望跟踪重定向。PortSwigger发现了这个问题并将会推出相关的修复。

最后,如果你对示例的应用程序有兴趣,你可以访问github上的源代码:https://github.com/mccabe615/sinny。如果对代码不感兴趣,只是想测试,您可以免费使用我们部署的版本:http://sleepy-tor-8086.herokuapp.com/。


参考文献

 [1] http://portswigger.net/burp/help/intruder_payloads_types.html#recursivegrep


推荐阅读
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
author-avatar
mobiledu2502880747
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有