0x00:使用原因
我们在做渗透测试的时候,经常会遇到这种情况,测试跨站可能有些功能插入恶意脚本后无法立即触发,例如提交反馈表单,需要等管理员打开查看提交信息时才会触发,或者是盲注跨站,盲打 XSS 这种。再例如 SSRF,如果程序不进行回显任何信息,而只提示你输入的是否合法,那么也无法直接判断程序存在 SSRF 漏洞,我们可以叫盲 SSRF。再例如 XXE,引入外部文件时,如果程序也不返回任何信息和引用文件的内容,而只提示输入的是否有误,那么也无法直接判断程序是否存在 XXE 漏洞,我们也可以叫盲 XXE。总之,程序不进行详细的回显信息,而只是返回对或者错时,我们都可以叫它盲。
解决办法是,我们需要一个外部的独立的服务器,可以通过域名 url 进行访问。然后在测试盲跨站插入恶意脚本时带上这个服务器的地址,在测试盲 SSRF 时读取的文件 url 写我们这个服务器的地址,在测试盲 XXE 时引入的外部实体地址也写我们这个服务器的地址。如果存在上述的这些问题,那么目标服务器就会去访问我们自己的服务器,我们自己服务器要做的就是记录别人访问自己的信息,记录其发送内容相应内容等,因为目标服务器不会给前台返回任何信息,而在和我们外部服务器交互时,我们外部服务器会记录其交互的过程和内容,从而有利于我们判断漏洞的存在。
明白原理后,Burp 给我们提供了这个外部服务器,叫 Collaborator,对于 Collaborator 服务器,我们有两种使用方式,第一个是使用 burp 官方提供的,第二个是自己搭建。本文章记录 burp 官方提供的使用方法,至于自己搭建如果大家感兴趣可以在网上搜索相关的教程内容。
0x01:Collaborator 介绍
对于 Collaborator 服务器,我们这里简单介绍下它应该拥有哪些功能。首先它要能捕捉到 burp 发出的 payload 触发目标与外部系统发生数据的交互行为,其次它自己与目标产生交互的数据要能够返回到 burp,也就是返回给攻击者,也就是我们。
对于 Collaborator 服务器,我们这里再简单的介绍下它应该有哪些服务,首先它是公网 ip,其次它要有自己的域名,并且这个服务器要注册为该域名的权威 dns 服务器。然后这个服务器要提供 dns 服务,并且可以相应任何对它的 dns 请求。最后它需要提供 http 和 https 服务,且需要使用一个有效的 ssl 证书。对于为什么要提供 dns 和 http、https 服务很好理解,payload 如果可以执行或者可以允许远程加载,那么就需要用 dns 来解析我们的域名,而产生的交互则需要 http 和 https 来提供。
0x02:Collaborator 原理
我们知道了使用原因和其具有的功能后,我们再来简单看下它的原理,首先,我们先来看下平时的测试过程,如下图。
平时测试时,我们会像服务器提交一个 payload,而服务器响应给我们相关的 response 信息。大家都叫它带内攻击,这些理论的东西,我们简单理解就好,这里我们就理解成单挑通信的通道为带内攻击,也就是整个测试过程或者说是交互过程,中间没有其外部的服务器参与,只有自己和目标服务器,那么就叫带内。而我们一般的测试如果称为带内攻击,那么 Collaborator 服务器用来测试盲的各种漏洞的话,则需要我们外部的独立服务器参数,也就是带入了外部的服务器,我们叫它带外攻击。这里简单的提了一下这个带内和带外,我们只要理解其过程即可。带外流程图如下。
以上就是 collaborator,也就是带外攻击的大体流程,其实就是在测试的过程中目标服务器和外部的服务器有了交互,下面再来看一张更详细的图。
上面这个图可以大体的代表 collaborator 的大体工作流程,首先 burp 发送 payload 给目标程序,以上图为例,param 存在漏洞注入点,其 payload 为外部的服务器 url 地址,随后目标程序若进行解析或则引用调用等,则会去访问这个地址,而这个地址是我们的 collaborator 服务器,所以 collaborator 会记录其访问的请求信息以及响应信息和 dns 的信息。而当 burp 发送 payload 后,就会不断的去问 collaborator 服务器,你收到我发送的 payload 交互了么,这时 collaborator 就会将交互信息告诉 burp,burp 最后进行报告。
以上就是 collaborator 的大体工作流程,最后我们再说两个理论性的东西,一个是 burp 的 collaborator 地址,当使用 burp 的 collaborator 时,burp 会提供一个 url 地址,这个地址是 burp 的一个二级域名。第二个是轮询,也就是我们上面提到的,burp 发送 payload 后会不断的问 collaborator 是否收到我发生的 payload 交互信息,例如 10s 问一次,我们可以叫它轮询,其实叫什么无所谓,我们理解这个过程即可。
0x03:Collaborator 使用
对于 burp 的 collaborator,好像是 1.7 几以后自带,我这里没有,所以是通过安装插件来实现的,直接到 burp 的 extender 下的 bapp store 找到 Collaborator 安装即可。安装后,首先需要设置下我们使用的服务器是官方默认提供的,在 project options-misc-burp collaborator server 下,选择第一个默认官方服务即可,第二个是关闭 collaborator,第三个是使用自己的服务器。如下图。
设置好后,我们可以通过工具栏的 burp 下的 burp collaborator client 来运行,如下图。
打开 collaborator 插件后,点击 copy to clipboard 来复制其提供的 payload url,如下图。
number to generate 是生成的数量,下面的 poll now 按钮是轮询时间,点击 copy to clipboard 复制其提供的 payload url 后,就可以直接在要测试的点粘贴即可,如果目标服务器有交互,则 collaborator 会有响应信息。且这个 payload url 每次复制其二级域名都会随机生成。
0x04:盲 XXE 测试
我这里没有找到盲的 XXE 漏洞示例,所以就拿 bwapp 的 xxe 做演示了,bwapp 的 xxe 是有回显信息的,我们先来看下它的原始请求包。
原始请求发送的 xml 内容,其 login 的名称会进行回显,这里我们把它当作没有任何回显信息,只返回 true 和 false 的话,我们用 collaborator 来进行测试,首先修改 xml 的内容,加入一个变量值为外部的服务器 url,然后进行发送,这时 collaborator 会不断轮询去问交互结果,而结果会在 collaborator 中进行显示,如下图。
上图画绿线的就是 collaborator 提供的 payload url,我们在原始的内容上加入了 entity 实体变量 test,值为 payload url,这时 go 发送后,collaborator 捕获的交互信息如下。
上图是 request 的内容,host 的是我们的 payload url,请求后,我们再切换到 response 栏查看,内容如下图。
payload url 请求会返回一串随机内容,我们可以看到已经成功的进行了响应,说明目标服务器进行了外部的请求和交互,那么对于盲 xxe 来说,我们可以证明存在此问题。
0x05:盲 SSRF 测试
SSRF 在加载外部文件时,若没有进行严格过滤,则可导致任意文件加载,若加载文件而不反悔文件的内容,也不反悔任何详细的信息,那么对于这种盲 SSRF,我们也可以用 collaborator 进行测试,只要加载的请求替换成我们的 payload url 即可。这里还以 bwapp 的 SSRF 为例,bwapp 的 SSRF 也是有回显信息的,我们还把它当成没有任何提示的盲来进行演示。
首先还是先来看下原始的请求数据包,内容如下图。
对于 url 中的 language 字段引用的文件名称,可以随意进行替换,也算作是文件包含问题,我们把他换成 payload url 后进行提交,此时 collaborator 会显示出其交互的详细信息,resquest 如下图。
可以看到目标服务器进行了 dns 解析了我们的域名,然后 http 进行了访问,response 信息如下图。
0x06:盲 XSS 测试
同样的,我们也可以用 collaborator 来进行盲跨站的测试,使用场景例如盲打 xss,提交表单等,若一个平台的提交表单功能,提交内容插入恶意脚本后,提交后台可能不会立即生效,需要等管理员访问相关的页面才会执行,那么我们无法判断是否存在存储跨站的问题,这时使用 payload url 后,collaborator 会不断的进行轮询,只要管理员进行了访问,collaborator 就会捕捉到然后返回到 burp。
我们这里还以 bwapp 的 stored xss blog 为例,这里的脚本提交后就会在列表中显示并执行,也是有回显的,我们这里还是以盲跨站来测,首先在提交内容处,插入 script 标签,src 为我们的 payload url,如下图。
插入后我们查看元素可以发现,脚本内容已经插入成功,如下图。
因为插入的时候就会执行一次,而我们浏览页面的时候又执行了一次,所以 collaborator 会又两条记录信息,这里我们当成盲 xss 来测,如果插入没有执行,而当管理员访问页面后 payload 执行了。collaborator 捕捉的交互信息如下,request 内容。
response 内容(这里是两条信息,插入执行了一次,访问又执行了一次,而我们测试盲 xss 时,是只有一条,插入无法验证所以没有,管理员访问后执行所以一次,大家不要在意这里的细节,明白其原理和使用即可)。
以上就是 burp 的 collaborator 使用的一些简单的总结,理论上对于盲 sql 注入也应该可以行得通,但是我没有找到合适的例子,本机尝试也有一些错误,所以就不列了,如果碰到盲注的话可以先判断它是数字型还是字符型,随后再通过 and、or 这些关键字结合查询一下来判断,对于 collaborator 的话,官方说明文档说可以使用 sql 去查询 xml 文件,xml 引入外部实体也就是 payload url,然后看交互信息。
0x07:总结
对于平时测试中的一些盲问题,例如盲 xss,盲 xxe,盲 ssrf 等,如果不能看到一些回显信息,无法判断是否存在漏洞时,可以使用 burp 的 collaborator 来进行尝试。
欢迎关注公众号<发哥微课堂>(右),不定期发表干活内容,共同学习,共同进步。
欢迎添加个人微信(左),可以一块交流讨论,朋友圈不定期发表相关知识内容。