针对非Webapp测试的Burp技巧(二):扫描、重放

burpsuite.png

在本系列连载的第一节中,笔者谈到了关于burp对非webapp的功能测试。本来我只想写点东西分享出来,并没想到会扯出那么多。现在嘛,我还会继续写下去。

在这一节中,我会讲一讲:

Target > Scope

Proxy > HTTP History

Intruder/Scanner

同时,我也会在这里谈一点Scanner、Repeater和Comparer,但是不会讲太多,毕竟这几样是比较简单的。

Scope

理想的情况下,你可以利用它过滤掉一些没有用的东西。

将一个网络包添加进scope是很容易的,右键选中一个请求包,就可以将它加入scope。然后你就可以通过Target > Scope,看到这个请求被加进去了。举个例子,如果我把一个对Google的logo的GET请求给添加进了scope,Google的其他域名是不会被添加进scope的,必须手动进行添加。

01.gif

另一种方式就是复制URL,然后将它粘贴进去。如果我们在某个请求(任意位置)上右键,就可以将该请求的URL通过Copy URL选项复制到剪贴板。接着,我们可以点击Paste URL按钮,将其复制到scope。这个按钮在burp其他地方也有,是可以通过类似的方式进行使用的。

02.gif

我们通常并不会希望scope里面只有孤零零一个请求在起作用,可能我们需要的是匹配“*.google.com”,或者匹配“google.com/images/”。值得庆幸的是,我们可以在scope里用正则表达式划定范围。常用的做法是,在把URL加入scope后,使用edit按钮,自行更改其中的内容。

Scope里面有个四个选项:

协议:Any、HTTP、HTTPS,这里我通常会选Any。

IP主机范围:支持正则如:*\.google.com

端口:除非我要监听特定端口的流量,不然一般会把它空着,也就是不做任何过滤。

文件名:也就是URL除去域名后的那部分内容,支持正则匹配。

如果我们想要把Google和它所有的子域名加入scope,我们可以对将那个logo的请求(也可以是任意与其类似的内容),添加进scope,然后对它进行编辑。

03.PNG

HTTP History

Proxy > HTTP History,里面是Burp历史截获的请求和响应包,我使用Burp时要花一多半的时间在这里。我们可以通过过滤器减少没用的内容,点击选项卡Filter: Showing all items(每个人设置不同,显示的可能不一样)即可打开。

04.PNG

最有效的减少无用信息的选项,是通过选择Show only in-scope items,隐藏所有不在scope里面的内容,下面是演示图片:

05.gif

正如你在截图中所看样,那个过滤器里有许多选项,不少都简单易用。下面,我会指出其中在非webapp中我经常使用的。

Filter by MIME type:这里会将激活所有东西,直到你确信没有丢失任何请求。MIME-type并不总是在响应包里正确声明的,Other binary可以用来查看更多二进制,或者异常的payload(默认没有激活)。

Filter by file extension:我只是使用了Hide特性,并常常添加一些我不感兴趣的额外扩展在上面(比如字体),这样就可以将他们过滤,不使用到它们。

Filter by listener:当某个应用需要连接不同的端口,而且自身并不支持代理设置时,这是一个非常有用的东西。我们这里可以监听本地localhost(或者修改hosts文件),并为每个端口创建一个不同的代理监听器,这样就可以监听到特定的流量。

Scanner(只有在pro版本才有)

Burp自带一个不错的扫描器,当然它不可能像IBM专业版的Appscan那样面面俱到,但它在非webapp中的测试中,有着许多优势。

首先Burp是非常快速简单的,我可以登录扫描一个简单的请求,并且仅仅进行这样的动作。而在Appscan

中,我不得不完成整个app的扫描(配置扫描、记录登录过程、手动浏览、自动浏览、最后才是进行整个扫描),最无语的是有些特殊的登录它还重放不了。比如在某些特殊的登录口,会有个随机token。

Burp也便宜得多,专业版的才300美元/年,Appscan则达到了2000美元/年。

Issue activity选项卡里会有扫描结果(通过Target> Site map会看得更加仔细),Scan queue里面有扫描的请求。

Live Scanning

Burp有两种扫描模式:主动和被动,这两种可以同时进行。

在被动扫描中,它只是监控普通的请求响应,根据规则集进行匹配,但是并不会发送任何请求。而在主动扫描过程当中,它会生成payload,然后将其发送给服务器,与此同时还会分析请求和响应包。

在这个选项卡上,你可以配置以下的模式:

绝对不要打开LiveActive Scanning,请单独扫描每个请求。

Live Passive Scanning > Scan everything是很有用的,但会增加扫描结果中的无用东西。如果你设置了scope,你可以使用Use suite scope。当然,也可以使用Use custom scope,对scope进行自定义。

Options

在这里你可以配置扫描器选项,虽然我没有用live active scanning,这些选项仍然可以配置来进行单独的请求扫描。

Attack Insertion Points:你可以选择注入点,添加删除都如你所愿。更少的注入点意味着着更快的扫描速度。

Active Scanning Engine:在IP可能ban掉的情况下,进行低频率发包。

Active Scanning Areas:如你所见,这些选项更针对的是webapp。我如果需要的话,可以取消没必要的东西,可以节省很多扫描时间。

Passive Scanning Areas:你可以只选择相关的选项,减少无用的东西,但个人建议别改这里。

Static Code Analysis:这个是启用JS代码静态分析,你可以在测试非webapp时取消这个选项。

Intruder(免费版本里有频率限制)

这是Burp的一个半自动化扫描功能,在任意一个请求上右键单击,然后选择Send to Intruder。在Intruder里你可以指定注入点,然后用内置扫描器,或者你自己的payload进行fuzz。

Positions

在把payload发送给Intruder后,我们打开Intruder> Positions选项卡,可以看到注入点。我这里点击了Clear进行清除,再点击Add键高亮我们的注入点。

07.gif

正如你所看到的哪有,我选择了我们熟悉的Google logo请求,将其发送给Intruder。然后,我们清除了所有预定义的注入点,添加了文件名。我们右键点击那里,选择Actively scan defined insertion points,将其发送给Scanner,仅仅扫描这个注入点。或者,我会选择点击Start Attack按钮,开始用我自定义的payload对这个注入点进行扫描。

Payload

我们可以切到Payloads选项卡,为自定义的Intruder攻击设置payload。

Payloads设置和Payloads选项

这里我们可以使用不同的payloads,Burp有一些复杂的payload集,你可以在特定情况下进行使用。比如Recursive grep(递归匹配),意思就是你可以从现有的payload产生的响应包中进行攫取新的payload。当然,还有Case modification、Character substitution、Dates和Numbers之类的好用payload。

通过Simple list可以在注入点使用你自己的payloads,你需要加载或者复制单列的payloads,弄进PayloadOptions里。你也可以直接选择Runtime file,使用文件里的payloads,效果与load相同。你也可以使用Burp一些内置的payload字典(貌似只存在于Pro版本)。

08.PNG

Custom iterator选项可以让Burp生成更多的复杂payload。比如,我想模拟生成hex中的两位(一共四个字符,比如0×00)。在这里,我选择了position 1,在里面0-9和a-f。同时,在position 2-4里面会重复这个规律。Burp一共允许你选择8个position。如果你想要在此后加上usernames,我可以选择position 5加上usernames字典。如你所见,它还支持不同position之间的分割器。

推荐有一个不错的payload字典,FuzzDB:

https://github.com/fuzzdb-project/fuzzdb

注意,它里面包含了一些被杀毒软件标记的payload。

Payload Processing

你可以在进行注入之前,转换下payload。比如你可以将所有的payload都转换为base64,然后发送他们的hash。

10.PNG

Options

我们可以压低Intruder的请求速度,或者对其进行延迟处理。

Payload Encoding会让Burp进行URL编码,解决特殊字符问题。

Grep – Match

我们可以从响应包里攫取特殊的项。比如我们注入了sqli的payload,我们可以让Burp去寻找SQL错误关键词。如果是XSS的话,我通常会使用alert(9999)之类的,然后在响应请求里寻找9999。

FuzzDB有着自己的正则模式来分析响应包,这里给出一个链接,将给大家展示如何使用它们。

Repeater – Decoder – Comparer

这些选项卡并没有太多功能,但是也很有用。

Repeater

Repeater通常是手工测的时候用的,Scanner自动化扫描,而Intruder是半自动化的。

如果你想要用repeater发包,点击右键选中Send to Repeater即可。我们可以更改请求,转发它们并观察这些响应。

这里我选择了logo的GET请求,将其发送给Repeater然后转发它。接着更改里面的内容并请求并不存在的文件,我们会看到404。然而,用Ctrl+Z就能恢复原来的请求。

11.gif

你可以把更改过的内容从Repeater发送给Intruder进行扫描。

Decoder

这里可以加密解密不同的格式,也支持创建hash。双击任意参数进行选中,然后右键点击选择Send to Decoder。你也可以将其选中,然后按下Ctrl+C将其复制然后贴进decoder。

Comparer

Comparer是用于两个payload或者HTTP请求响应包之间的比较。将需要比较的内容选中,右键点击Send to Comparer。这个比较功能可以逐比特进行(为了照顾二进制文件),也可以是逐字节进行(用于文本)。

此条目发表在未分类分类目录。将固定链接加入收藏夹。