猫头鹰
信安舆情早知道

BurpSuite实战指南(八)

上期回顾

[专题] burpsuite实战指南(七)

本期内容

  • 使用Burp Suite测试Web Services服务
  • 使用Burp, Sqlmap进行自动化SQL注入渗透测试

第十七章 使用Burp Suite测试Web Services服务

从这一章开始,我们进入了Burp的综合使用。通过一系列的使用场景的简单学习,逐渐熟悉Burp在渗透测试中,如何结合其他的工具,组合使用,提高工作效率。本章主要讲述在测试Web Services服务中,如何使用Burp Suite和SoapUI NG Pro的组合,对服务接口进行安全测试。 本章讲述的主要内容有:

  • 使用场景和渗透测试环境配置
  • 渗透测试过程中组合软件的使用

使用场景和渗透测试环境配置

在日常的web测试过程中,除了基于浏览器展现技术的客户端应用程序外,基于SOAP协议进行通信的WebService服务也很常见。WebService的出现是为了解决分布式、跨平台、低耦合而实现的不同编程语言之间采用统一的数据通信的技术规范,在应用程序中,常作为独立的业务模块对外提供具体的业务功能或者为前段提供数据处理的业务接口。因SAOP协议中的接口定义使用XML作为描述性语言,这与php、jsp之类的通信交互在渗透测试上还是有很大的差异。如果使用Burp 对通信消息进行拦截抓包,一次典型的消息内容如下图所示:

17_1

其http消息头中包含SOAPAction字段,且消息体为<soapenv:Envelope>封装的xml文本(更多关于WebService的文章请阅读者自行搜索)。正因为WebService这些特征,所以在渗透测试中我们也需要选择能解析SOAP协议和WSDL描述的软件。这里,我们使用的是SoapUI NG Pro 和Burp Suite。他们各自的作用分别是:

  • SoapUI NG Pro: 渗透测试流程的发起,通信报文的解析、集合payload之后通信报文的重新组装等。
  • Burp Suite: 代理拦截,跟踪通信过程和结果,对通信进行重放和二次处理等。

如果按照时序图来展现,他们在通信过程中,各自的时序位置如下:

17_001

从图中我们可以看出,作为代理服务Burp起着通信中间人的作用,可以对消息进行拦截后的编码、解码、转发、丢弃等各种操作,并记录原始消息。而SoapUI NG Pro作为WebService的测试工具,通过构造不同类型的payload来测试、验证漏洞的存在。他们组合在一起,共同完成复杂场景下WebService服务的渗透测试过程中的安全性验证。

SoapUI NG Pro 是SmartBear公司继SoapUI Pro之后推出的企业应用级收费软件,其试用版下载地址为:https://smartbear.com/product/ready-api/soapui-ng/free-trial/。下载安装完毕后,打开软件的主界面大体如下图所示(其中图中1部分为不同功能视图之间的切换项,图中2部分为菜单栏,图中3部分为常用功能菜单,图中4为Project视图区,图中5为主工作区,图中6部分为属性设置区):

17_0

安装完毕后,我们首先要做的是将SoapUI NG Pro的代理服务指向Burp Suite。假设我的Burp Proxy设置为127.0.0.1:8080。则SoapUI NG Pro的配置是:

  • 点击上图中3部分的Preferences,或者上图中2部分的【File】>>【Preferences】
  • 在弹出的界面中打开proxy选项卡,录入代理地址和端口。

17_02

完成以上的配置后,我们对WebService的渗透测试环境已经基本具备,可以开始对一个具体的WebService服务进行渗透测试了。

渗透测试过程中组合软件的使用

渗透测试环境配置后,我们就可以开始测试。这里我们可以自己编写WebService服务端,也可以通过搜索引擎选择互联网上公开的WebService,我这里使用的是:

http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl

一次简单的渗透测试过程大体包含如下环节:

1.首先,我们通过SoapUI NG Pro 创建安全测试用例。如下图:

17_00

2.在弹出的界面中,选择通过WSDL创建,接着输入WSDL地址。如下图:

17_01

3.当SoapUI NG Pro对WSDL解析完成后,会自动生成一系列的安全测试项:

17_03

4.我们可以对上图中的安全测试项进行增加和删除,默认情况下,这些安全测试项都是选中的。比如,如果我们只需要测试是否存在XPath注入,则只要上图中的勾选最下面的一项即可。 当SoapUI NG Pro根据安全测试项,完成不同的测试用例的创建之后,主操作界面如下图所示:

17_04

5.我们可以选择指定的SOAPAction或者某个SOAPAction下的某个安全项进行单一测试,也可以直接点击run运行所有的安全测试项。如果测试项过多的话,此操作执行时间会比较长,同时,如果并发数过多,会给服务器端造成压力,这是测试时候需要注意的。如下图所示,图中WebService接口正在安全测试中,进度条中显示调用的SOAPAction名称。

17_06

6.如果出现下图的状态,则表示测试进程已经执行完毕。

17_07

7. 此时,我们可以在Burp的Http history面板中查询到刚才发生的所有请求消息,通过不同的过滤条件查找我们关心的请求或响应消息,并发送到Burp的其他工具组件进行消息重放和处理、验证。

17_13

更多关于SOAPUI的使用请阅读这里

SoapUI NG Pro的安全测试项包括以下内容:

  • 边界扫描
  • SQL注入
  • XPath/XQuery注入
  • 模糊测试
  • 无效的参数类型
  • XML格式畸形
  • XML炸弹
  • 跨站脚本
  • 上传附件安全
  • 自定义扫描

下面就以SQL注入为例,我们看看SoapUI NG Pro的安全测试配置参数。

17_09

对于每一个安全测试项,其基本配置主要分三部分:

1.配置项(Configuration)

主要是指协议描述中定义的输入参数、编码类型、SOAP协议中的特定参数(namespace、import….)

2.自动化测试策略(Straegy)+

主要设置测试过程中的请求延时、选择策略、运行方式等

3.高级选项(Advanced)

通常是指测试时所需要的payload值,或者生成payload的策略。通过上图我们也可以看出,payload的值是可以自定义添加的。在github上,fuzzdb是被广泛使用的字典库,我们可以使用它作为测试的payload字典。项目地址为:https://github.com/fuzzdb-project/fuzzdb

当我们配置完毕后,运行安全测试项时,可以在Burp中查看到发送的payload值,如下图(阴影选中部分)所示的XSS脚本测试的payload:

17_13-1

同时,我们根据http状态码,对应答进行排序,跟踪可疑的响应消息,获取服务器的敏感信息。如下图获取的服务器Banner信息:

17_14

被Burp拦截到的消息记录,我们可以发送到Intruder,使用fuzzdb进行指定的fuzz测试;也可以发送到Repeater进行手工的消息内容修改和漏洞是否存在性的验证。具体到某个方面的漏洞,比如说Xpath注入漏洞,在测试过程中,需要测试人员理解Xpath的注入原理,理解Xpath的语法,根据服务器端的响应消息,自己手工构造特定的payload才能获得更重要的信息。这些都是在平时的工作中慢慢积累的,而不是光靠一款工具软件就作为万能的解决方案,希望读者能明白这个道理。

使用Wsdler测试WebService接口:

除了前面我们说的使用SOAPUI NG Pro 测试WebService外,在Burp里也有一个通过WSDL解析接口定义,手工测试WebService的插件:Wsdler

17_16

如果你安装了此插件,则在Burp的 Proxy >> History 中,可以直接使用【Parse WSDL】功能。

17_17

确认使用【Parse WSDL】解析功能后,此插件自动解析出服务的Operation、Binding、Endpoint。当选中某个Operation之后,可以查看SOAP消息文本。同时,可以发送到Burp的其他组件进行进一步操作。

17_18

比如,我们将上图中的消息发送到Intruder,使用字符块(Character blocks)的对参数进行边界测试。

17_19

发送Intruder后的截图如下:

17_20

使用的payload为字符串1,从1到50,即1,11,111,1111……直到50个1,来测试参数的边界长度:

17_21

生成payload并执行后的结果如下图所示:

17_22

上面仅仅简单地叙述了Wsdler的使用,在实际的安全测试中,你可以使用Fuzzdb的字典,进行更复杂的渗透测试和功能验证。无论你使用什么样的工具,只要能通过一系列的自动化测试或者手工测试,完成WebService应用程序的安全脆弱性验证,保障应用程序的安全性,提供了应用程序的安全系统,这就达到我们做渗透测试的目的了。

第十八章 使用Burp, Sqlmap进行自动化SQL注入渗透测试

在OWSAP Top 10中,注入型漏洞是排在第一位的,而在注入型漏洞中,SQL注入是远比命令行注入、Xpath注入、Ldap注入更常见。这就是本章要讲述的主要内容:在web应用程序的渗透测试中,如何使用Burp和Sqlmap的组合来进行SQL注入漏洞的测试。在讲述本章内容之前,默认为读者熟悉SQL的原理和SqlMap的基本使用,如果有不明白的同学,请先阅读《SQL注入攻击与防御》一书和SqlMap手册(最好是阅读官方文档)。+

本章包含的内容有:

  • 使用gason插件+SqlMap测试SQL注入漏洞
  • 使用加强版sqlmap4burp插件+SqlMap批量测试SQL注入漏洞

使用gason插件+SqlMap测试SQL注入漏洞

在正式开始本章的内容之前,我们先做如下两点约定:

  • 你已经安装配置好了python可运行环境
  • 你已经熟悉sqlmap的基本命令行的使用并正确安装

如果你已经做到了上面的两点,那么,我们正式开始进入本章的内容。

Burp Suite与SqlMap整合的插件除了BApp Store 中的SQLiPy外(如图),

18_01

还有gasonsqlmap4burp。不同的插件之间的功能大同小异,其目的都是使用命令行调用SqlMap的API接口进行SQL注入的测试,这里,我们主要以gason为例,讲述具体配置安装和功能使用。+

gason插件安装使用大体分以下几个步骤:

  1. 首先是下载gason插件。你可以从这个地址进行下载(点击下载),也可以从官方下载源码自己编译,总之就是获取到插件的安装文件gason-version.jar
  2. 打开Burp Extensions进行安装,点击【Add】按钮,按照图中所示操作即可。安装过程很简单,如果不明白的话,可参考《Burp Suite应用商店插件的使用》章节的内容。

18_02

如果出现了下图中所示结果,且【Output】和【Errors】两个tab页面中没有错误的提示信息,表示插件已安装成功。

18_002

3.安装完成后,当Burp的Proxy中拦截到消息记录时,可直接发送到sqlmap。如下图所示:

18_03

4.如果没有出现如上图所示的【send to sqlmap】菜单,则表示插件没正确安装成功,需要读者自己排查一下安装失败的原因。+

5.当我们在Burp拦截的请求消息上选择【send to sqlmap】后,则自动弹出sqlmap选项设置对话框。

18_04

从图中我们可以看出,插件会自动抓取消息内容并解析后填充到相关参数设置的选项里去。例如:参数和参数值,请求方式(GET/POST),url地址等。同时,还有许多与Sqlmap本身测试使用的选项值仍需要我们自己指定,其中最主要的两个是:

  • bin目录:这里是指sqlmap.py的路径
  • Command:sqlmap运行时执行的命令行

6.设置bin目录的方式很简单,点击【….】按钮,选择到sqlmap.py的存储路径即可。当bin path配置正确后,下方的Command会自动更新,随着设置参数的不同,自动调整需要执行的sqlmap命令行(如果不理解界面操作各个设置的含义,可以比较设置前后Command值的变化,即可以知道某个设置对应于sqlmap参数的哪一个选项)。

18_05

7.所有的配置正确之后,【run】按钮将被激活,点击【run】,系统自动进入sqlmap扫描阶段。

18_06

当进入sqlmap扫描阶段时,插件会新增一个tab页面,显示执行进度,即如上图的箭头所指。

8.我们可以通过进度跟踪的界面上的【save to file】和【close tab】来保存扫描结果和关闭、终止扫描。

使用gason插件,与命令行方式执行sqlmap脚本相比,操作变得更加方便。比如说,在命令行环境中,我们需要先抓取cookie信息,才能放入到命令行里执行;亦或者,我们需要手工录入一个个参数进行命令行操作,而在gason插件环境中,这些都不需要。当我们点击【send to sqlmap】时,插件自动帮我们完成了这些操作。且与sqlmap个性设置的选项,我们也可以通过界面操作,自动完成,比命令行下更直观、更高效。

使用加强版sqlmap4burp插件+SqlMap批量测试SQL注入漏洞

如果你只想执行一次sqlmap的操作,即能完成多个链接地址的SQL注入漏洞测试,使用gason插件的方式操作起来会比较麻烦。那么,是否存在批量检测的使用方法呢? 国内比较著名的安全网站freebuf上有两篇类似的文章,感兴趣的同学可以自己阅读看看。

  1. 【优化SQLMAP的批量测试功能】http://www.freebuf.com/sectool/75296.html
  2. 【我是如何打造一款自动化SQL注入工具的 】http://www.freebuf.com/sectool/74445.html

通过上面的两篇文章,我们可以看出,批量操作在实际应用中非常常见,如果能解决批量问题,则大大地提高了我们的工作效率,下面我们一起来研究一下如何解决这个问题。

在Sqlmap的官方文档中有这样的介绍:

18_07

sqlmap4burp的源文件为网友difcareer公开在github上,项目地址为:

https://github.com/difcareer/sqlmap4burp

下面我们来修改此插件功能,完成自动化批量SQL测试的功能。

首先,我们来规划一下这个插件的使用场景:

当通过Burp代理的HTTP流量消息都记录在HTTP History 列表中,我们可以批量地选中多个url,由插件自动生成类似Burp proxy的日志文件,然后调用sqlmap进行检测。

插件整个使用过程的流程图如下:

18_08

上图中浅蓝色背景标示的部分,均为插件所执行的动作。其主要做了这些事情:

  1. 判断选中数据是否为空,不为空则获取History列表的已选中数据,无论一条还是多条记录。
  2. 将获取的HTTP消息按照proxy日志的格式,生成日志文件。
  3. 调用sqlmap.py脚本,传递生成的日志文件作为参数值进行检测。

明白了这些,接着我们来看proxy的日志文件格式。

18_09

如上图所示,我们通过【Options】>>【Misc】>>【Logging】选中Proxy的Requests选项,自动弹出保存日志文件的路径和文件名,点击【保存】按钮后,则文件生成并开始记录Proxy的请求消息。 我们把生成的日志文件用记事本打开后发现,日志格式如下:

18_10

上图一共两条消息,每一条消息内容又包含图中1的头部,图中2的消息内容和图中3的尾部构成,而图中2的部分即是消息请求的详细内容,则我们按照此格式手工构造日志文件,通过修改sqlmap4burp的源码(Windows环境下)从而来完成这个功能。

在源码SnifferContextMenuFactory.java的我们找到了日志获取的入口createMenuItems函数内部的actionPerformed函数,遂修改此段代码为:

18_12

而创建日志头部和尾部的代码主要是拼写同格式的字符串,详细如下:

18_11

同时,修改sqlmap参数的调用方式,修改SqlmapStarter.java的第21行为:

18_13

这样,我们可以实现批量操作的功能了。

插件和源码可以通过如下地址进行下载: 插件下载 源码下载

下载完毕后,请参考sqlmap4burp的readme完成基本的配置放可以使用,否则sqlmap调用将会失败,无法完成批量检测。

插件安装完毕后显示跟原来的插件并无多大区别,如下图是发送多条url到SqlMap的截图:
18_15

生成的日志文件的截图:

18_16

sqlmap窗口中一次可以检测多个ur截图:

18_14

转载请注明来自MottoIN,未经允许不得转载!MottoIN » BurpSuite实战指南(八)

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

MottoIN 换一个角度看安全

寻求报道联系我们