绕过反向代理:如何识别源服务器IP
大多数目标通常使用内容分发网络(CDN)或其他抗DDoS反向代理来隐藏其源IP,保护源服务器免受可能的(注入)攻击,同时提高内容交付速度。然而,当访问配置错误时,我们有可能绕过Web应用程序防火墙直接访问源服务器。
在本文中,我们将探讨识别源服务器IP以绕过反向代理的常见方法,包括一些更高级的技术。
让我们开始吧!
什么是反向代理
与正向代理相反,反向代理是位于源服务器和客户端(您)之间的中间服务器。其主要任务是将客户端请求转发到适当的后端服务器,然后将服务器的响应返回给客户端。
正向代理与反向代理服务器的区别
反向代理服务器的常见用例包括:
- 负载均衡:将传入请求分发到多个后端服务器,防止任何单个服务器不堪重负。如果您有三台Web服务器,反向代理将在它们之间平均分配负载。
- SSL终止:处理HTTPS流量的加密和解密,从而减少后端服务器的计算负载。
- 缓存:存储频繁请求的内容,以便快速提供,而无需每次都访问后端服务器。
- 安全:Web应用程序防火墙(WAF)充当防护盾,可以过滤恶意请求,隐藏服务器详细信息(或添加安全标头),并提供(D)DoS保护。
- 压缩:通过在将响应发送到客户端之前压缩响应来减少带宽使用。
流行的反向代理解决方案(如Nginx和Apache HTTP Server)以及云服务(如Cloudflare和Akamai)帮助开发人员完成上述所有任务。作为安全研究人员,我们特别感兴趣的是绕过安全过滤器,例如阻止我们有效负载的Web应用程序防火墙(WAF)。
源IP泄露的发生方式
为避免直接IP访问,开发人员必须确保源服务器仅接受来自反向代理的传入连接(通常通过防火墙完成)。这种设置确保即使获取了源IP,源服务器也会拒绝接受任何未通过反向代理路由和验证的请求。
实际上,情况往往相反。许多源服务器不按IP过滤,即使通过IP直接访问,也会返回完整的网站内容。这使我们能够绕过源服务器上存在的安全验证和过滤器。
识别服务器的源IP
到目前为止,我们已经了解了什么是反向代理以及识别服务器源IP的重要性。现在让我们看看泄露目标源IP的常见方法。
服务器端请求伪造
服务器端请求伪造允许我们诱导源服务器与任何外部资源(包括我们的服务器)建立出站连接。通过适当的日志记录,我们将能够识别服务器的源IP,从而完全绕过CDN和防火墙保护。
InteractSH是Project Discovery开发的免费开源OAST服务器,有助于捕获传入的HTTP、DNS和SMTP请求。
滥用WordPress XML RPC查找源IP
WordPress提供了一个XML-RPC端点,允许开发人员自动执行某些任务。我们特别感兴趣的一个功能是pingback方法。尽管简单的pingback通常被认为是无害的,但它非常适合帮助诱导源服务器向我们的终端发出出站请求。
阅读提示:深入了解查找和利用高级服务器端请求伪造漏洞!我们还在下一个目标中包含了最常易受攻击的应用程序组件列表。
历史DNS记录
历史DNS数据集也可以帮助我们识别源服务器的IP。例如,如果在源服务器首次被索引工具(如Censys、SecurityTrails、Shodan等)索引后添加了反向代理服务,我们将有可能通过检查特定DNS记录的历史数据来找到源服务器的IP。
此外,您还可以将相同的方法应用于目标的子域或附属资产,因为它们通常可以比主域揭示更多信息。让我们看看一种类似的方法来查找更多有趣的数据,这些数据可能有助于我们识别服务器的源IP。
历史SSL证书记录
与DNS索引服务的工作方式类似,还有其他服务涵盖证书透明度日志。CRT.SH是一种流行的工具,它记录SSL/TLS证书更改,并可以帮助我们查询历史证书日志,包括已颁发给我们源主机的任何证书。
让我们看一个例子:
使用CRT.SH识别服务器的源IP
在这种情况下,我们可以看到最近添加了Cloudflare。这为我们探索先前颁发的证书留下了空间,并特别关注"主题备用名称"属性,因为它通常包含源服务器的IP和/或(内部)主机名。
通过Shodan / Censys的Favicon哈希
Favicons是出现在Web浏览器选项卡上的小图标(位于页面标题旁边)。相同的图标也可用于查找与目标相关的类似主机,包括反向代理后面的源服务器。
为此,我们需要计算favicon图标文件的哈希值。这是一个使用cURL、base64和MMH3 Python3库的简单单行命令,用于计算任何favicon的哈希值以在Shodan或Censys查询中使用:
|
|
之后,我们需要使用Shodan或Censys查询具有匹配favicon的主机。这将允许您列出所有类似的主机,包括目标的源服务器:
通过favicon哈希在Shodan/Censys中查找相关资产
电子邮件标头
查找服务器源IP的另一种常见方法是检查电子邮件服务器标头。传统应用程序组件通常设计为从源服务器发送电子邮件,而不是从SendGrid或Amazon SES等第三方服务发送。
考虑到这一点,我们实际上可以调用应用程序组件向我们发送电子邮件并检查电子邮件标头。“Received"标头包含发送电子邮件的IP地址。在某些情况下,电子邮件中添加了其他(自定义)标头,其中可能包括源IP。
电子邮件服务器响应泄露源IP的示例
使用Shodan、Censys或IpInfo等服务,我们将能够验证此特定IP是否与源服务器的IP匹配。
硬编码IP和唯一字符串
在某些情况下,您会遇到目标服务器响应中反映的唯一字符串值,这些值可与Shodan和Censys等工具一起使用来查找源服务器。让我们看几个例子。
故意触发错误
通过注入特殊字符或发送带有异常负载的请求来故意触发错误可能会导致异常。根据详细程度,某些应用程序将返回比必要更多的信息,包括有关主机的信息(例如源IP)。
有时,IP或对源主机的其他引用也可以在HTML代码中找到(通常以注释的形式)。
版权信息
使用Google、Shodan和Censys等工具,我们可以基于唯一字符串(如版权字符串)搜索类似资产。在某些情况下,我们将能够找到反向代理后面的源主机。
使用Google,我们只需要一个简单的搜索。您可能需要排除根域以进一步缩小搜索范围。
Google Dorking可以帮助查找类似资产,包括源服务器(如果已索引)。
阅读提示:了解如何使用Google dorking查找更多安全漏洞、遗留资产和被遗忘的端点。在Shodan或Censys上,我们必须使用特殊的搜索语法来缩小搜索范围以匹配HTTP响应中的字符串:
Shodan:
|
|
Censys:
|
|
目标还可能包括HTTP响应中的其他形式的唯一ID和字符串(例如分析脚本和Google Tag Manager ID、自定义响应标头等)。您可以应用相同的方法来尝试查找源服务器。
结论
识别服务器的源IP可以帮助您绕过在反向代理服务器上设置的若干限制,包括任何安全验证(例如Web应用程序防火墙)。然而,在某些情况下,识别源IP可能很棘手。在本文中,我们介绍了各种方法,您可以高精度地实际披露目标服务器的源IP。
所以,您刚刚学会了如何查找服务器的源IP以绕过WAF……现在是时候测试您的技能了!您可以通过在易受攻击的实验室和CTF上练习开始,或者……浏览我们在Intigriti上的70多个公共漏洞赏金计划,谁知道呢,也许在您下一次提交时获得赏金!
立即开始在INTIGRITI上进行黑客攻击