利用 Azure 静态网站与 IPFS 投递器实现载荷分发技术解析
载荷投递:基于 Azure 静态网站与 IPFS 投递器的技术实现
免责声明:本文仅用于教育目的,演示威胁攻击者如何利用这些技术进行社会工程攻击。请负责任地使用,不要进行任何非法活动!
目录
Azure 虚拟机设置
创建 Azure VM
安装 IPFS
Azure 静态网站管理
设置 Azure 静态网站
克隆网站
开发环境设置
安装 NodeJS 和 NPM
安装 SWA CLI 工具
代码部署
资源
Azure 虚拟机设置
创建 Azure VM
我们将使用 Azure VM 安装 IPFS。在云红队系列中,我们已涵盖部署 VM 的过程。以下是设置 VM 并连接的相关步骤链接:
启动虚拟机(VM)
连接到 VM
安装 IPFS
设置虚拟机并连接后,我们从 IPFS 分发站点下载 Kubo(go-ipfs)发行版。Kubo 是用 Go 编写的 IPFS 包,提供与 IPFS 网络交互所需的所有功能,包括运行节点、存储和检索数据以及与其他节点通信。
对于我们的设置,我们选择了 x64 的 Linux 架构,与之前创建的 Azure 机器兼容。使用 wget 或 curl 下载文件:
然后解压文件,移动到“kubo”目录,并运行安装脚本。确保以 root 身份运行脚本以避免权限错误。首次运行脚本时,它将可执行文件“ipfs”移动到/user/local/bin/。
启动 IPFS,运行命令:
安装 IPFS 后,我们可以创建一个名为“files”的目录来存储要共享的文件。此步骤是可选的,但有助于保持工作区组织有序。对于此演示,我们将使用 Windows 计算器作为托管文件的示例,以表示有效载荷:%WinDir%\System32\calc.exe。使用 scp 命令将 calc.exe 上传到 VM 上的 files 目录。
设置 IPFS 节点时,需要运行命令ipfs init
。IPFS 节点本质上是连接到 IPFS 网络的计算机或设备,例如笔记本电脑、台式机、服务器或智能手机。首次初始化节点时,您会收到对等身份的内容标识符(CID),每次运行 IPFS 时都应获取该标识符。CID 用作 IPFS 网络内存储的任何数据的唯一指纹。
对等 CID 以及其他配置信息保存在主目录中.ipfs 目录中的“config”文件中。
要启动节点,请使用ipfs daemon
命令。这将在前台启动 IPFS 守护进程。您可以使用“Screen”在后台运行它。
当您看到 Swarm 信息时,表示守护进程已准备就绪。在 IPFS 上下文中,“Swarm”指的是负责管理点对点连接和节点之间数据交换的组件。
IPFS Web 界面
可以通过默认端口 localhost:5001/webui 访问 Web 界面。为了避免在 VM 防火墙中打开端口以访问界面,我们可以使用本地端口转发技巧从测试机器本地访问它。从操作安全的角度来看,这种方法更好,可以避免被互联网扫描器检测到并被标记为可疑活动。唯一应向公众开放的端口是用于 SSH 的端口 22。
要设置本地端口转发,我们可以退出当前 SSH 会话并使用-L 标志重新 SSH,或在当前会话上使用 SSH 命令。命令-L 5001:127.0.0.1:5001
创建一个隧道,将来自本地机器(Kali)端口 5001 的连接转发到远程服务器环回接口(127.0.0.1)的端口 5001。这意味着发送到本地机器 127.0.0.1:5001 的任何流量将通过 SSH 隧道重定向到远程服务器的 127.0.0.1:5001。
要上传文件,请单击侧边菜单中的“Files”选项并导入我们的文件“Calc.exe”。文件上传后,它将收到一个无法更改的 CID 哈希。如果您修改文件,将生成新的哈希值。要获取上传文件的公共链接,请单击侧面的三个点并选择“Share link”。
我们将使用此链接将其嵌入到我们将在后续步骤中创建的克隆站点中。我们上传的文件可能需要几分钟才能广播到 IPFS 网络。一旦可用,我们就可以访问和下载该文件。默认的公共网关是https://ipfs.io,但我们可以将其更改为 IPFS 公共网关上的任何可用网关。我们将默认网关更改为 Cloudflare IPFS 网络,因为它看起来更合法,并将链接用于 Azure 站点。
要停止运行的守护进程,请运行ps -aux
,选择 IPFS PID,并使用 PID 编号运行 kill 命令以停止进程。
设置 Azure 静态网站
在本节中,我们将设置 Azure 静态网站以托管我们将在下一步中创建的克隆网站。首先,在 Azure 门户中搜索“Static Web Apps”并单击“Create static web app”。然后填写“Project Details”,选择订阅和资源组。使用任何 Azure 服务时,必须首先创建订阅。这使 Microsoft 能够跟踪所使用的服务并向用户收费。创建订阅的说明在“红队云:部署 Azure VM 用于 C2 基础设施”指南中。
接下来,选择现有的“Resource group”或单击“Create new”(如果尚未设置)。为站点选择名称,选择“Hosting plan”类型为免费,并为“Deployment details”选择 Other。然后移动到后续步骤,并选择默认选项,如下面的屏幕截图所示。接下来添加标签。标签就像是附加到任何 Azure 服务的标签,有助于管理和跟踪资源成本。最后,查看添加的信息并单击“Create”。创建需要几秒钟。站点部署后,我们将看到“Your deployment is complete”消息。单击“Go to resource”。
在新创建的站点中,单击“Overview”部分以查看有关站点的所有详细信息。接下来,导航到 URL,下面的屏幕截图显示了创建新静态站点时的默认页面。我们可以使用自定义域创建比 blue-meadow-0eeaa7210.5 更有意义的内容,但这超出了本文的范围;我们将在未来的帖子中讨论它。
克隆网站
创建静态站点后,我们需要克隆一个对最终用户看起来合法且符合我们社会工程评估策略的网站。我们可以克隆客户的官方网站,展示他们使用的工具,或者如果他们销售应用程序,则克隆下载页面。拥有干净的克隆站点以显得合法至关重要。我推荐两个 Chrome 扩展程序,用于将完整网页保存为单个 HTML 文件,并嵌入所有资产(图像、CSS 等)。安装以下扩展程序之一:
Save Page WE
SingleFile
对于此演示,我们将使用 Firefox 下载页面作为示例。要克隆页面,请导航到下载页面并单击 Save Page WE 扩展程序。它将 HTML 页面本地下载。下面的屏幕截图是克隆页面的截图。克隆后,创建一个新目录并将克隆的页面放入其中。我们将项目命名为“CloneSite”。在下一步中,我们将修改 HTML 代码,将官方下载链接替换为托管在 IPFS 上的有效载荷链接。
安装 NodeJS 和 NPM
接下来,我们需要安装 Node 包管理器(npm)。建议安装捆绑了 npm 的 Node.js 以确保兼容性并简化过程。对于 Windows,请访问官方 Node.js 下载页面并安装 Windows 安装程序。安装后,确保 node.js 和 npm.ps1 文件已添加到系统环境变量中的“Path”中。通过打开 PowerShell 终端并运行$env:path
来检查这一点,或者您可以通过指定 node.js 和 npm 文件的路径手动添加它们。
然后,在运行 npm 之前,我们需要绕过 PowerShell 执行策略以能够运行 npm.ps1 脚本。否则,将遇到以下错误。
之后,我们运行npm -v
来快速检查 npm 版本,并确保我们可以在终端中运行命令。如下所示,命令返回了当前安装的版本。
安装 SWA CLI 工具
为了将克隆的页面代码从我们的机器部署到 Azure 静态站点,我们将使用静态 Web Apps CLI(swa)工具。在继续安装 swa 之前,请确保从 Microsoft Store 安装 Python 3.12。如果您已经安装了 python3,可以跳过此步骤。然后打开 Visual Studio,选择我们之前创建的目录“CloneSite”,并通过转到 View > Terminal 打开终端。接下来,绕过 PowerShell 执行策略,并通过运行以下命令安装 swa 工具。
代码部署
现在我们已经准备好推送代码,我们可以将 IPFS 有效载荷 URL 直接嵌入到 HTML 代码中,或使用 JavaScript 将原始 URL 替换为我们的 URL。我将包括两种方法以供学习。返回克隆的页面,并使用浏览器的内置开发人员工具检查下载按钮的 HTML“id”名称—download-button-desktop-release-win。在 Visual Studio 中搜索“id”,并将原始下载 URL 替换为 IPFS URL,然后保存。
在开发人员终端中,使用swa login
命令登录到 Azure 门户,以获取将使我们能够推送代码的会话。一旦经过身份验证,它会重定向到端口 31337 上的 localhost 页面,声明身份验证已完成。有时,身份验证后页面不会快速弹出。如果发生这种情况,请再次运行swa login
命令。在终端中,我们可以看到我们已成功验证到 Azure,并显示了可用的租户。我们可以选择我们的静态站点所在的租户。要检查您当前的工作租户,请访问 Azure 门户,并单击右上角您的帐户名称旁边的终端图标。终端激活后,运行Get-AzTenant
命令。它将提供租户信息,例如 ID 和连接的域。使用箭头选择要使用的租户,然后按 Enter。
使用 swa 登录后,会在 CloneSite 目录中创建一个新的.env 文件。该文件包含将用于代码部署的订阅 ID 和租户 ID。要使用 swa 部署代码,您需要在同一目录中创建配置文件,运行swa
即可。这将启动配置文件,并询问您是否要将其命名为与站点名称相同。保持默认并按 Enter。当询问设置是否正确时,按“Y”。当提示部署到您的应用程序时,键入“Y”并按 Enter。如果询问是否要创建新应用程序,请键入“N”并按 Enter。由于我们已经创建了一个应用程序,我们将使用部署令牌来部署我们的应用程序。部署令牌方法在您创建了多个应用程序并希望指定要部署到哪些应用程序时非常有用。要获取部署令牌,请转到 Azure 门户,导航到我们创建的静态站点,并在概述部分单击“Manage Deployment Token”,然后复制令牌。运行 swa 命令后,配置文件将创建为 JSON 文件,名为 swa-cli.config.json,位于主 CloneSite 目录中。
💡一个重要提示是,如果您将 index.html 文件直接放在 CloneSite 中,SWA 将不会部署它。它不会显示错误,但网站将包含空内容。为避免这种情况,请创建一个名为“firefox-clone-site”的新目录,并将您的代码(index.html)放在那里。目录结构如下面的屏幕截图所示。此外,请确保将 HTML 页面命名为“index.html”,使用小写“i”;否则,它将不会部署。
现在我们有了项目的适当结构,我们可以使用swa deploy
命令部署项目。接下来,我们需要将环境指定为“production”。如果未指定环境,项目将部署在预览环境中而不是生产环境中。
当我们单击下载按钮时,我们获取托管在 IPFS 上的文件。浏览器的行为各不相同—Edge 和 Firefox 直接安装它,如屏幕截图所示。而 Chrome 将提示“Save As”窗口以保存可执行文件。在社会工程评估中,如果我们有好的借口来说服用户运行可执行文件,这并不重要。为了使其看起来更合法,我们可以指定自定义域而不是“blue-meadow-0eeaa7210.5”。我们不会在本文中包括它,但我们将在未来的帖子中涵盖它。
今天,我们学习了如何在 Azure VM 上设置 IPFS 节点并托管有效载荷文件。然后,我们克隆了一个网站并将其部署在 Azure 静态网站上,该网站将我们重定向到 IPFS 托管的有效载荷。今天就到这里,下次见!
资源
通过 Cloudflare 和 IPFS 发布 dcorelabs.com
通过 IPFS 投递有效载荷
使用 Azure 容器实例运行 InterPlanetary File System 节点
将 InterPlanetary File System 用于攻击操作
威胁攻击者快速采用 Web3 IPFS 技术
无需 GitHub Action 从本地机器部署到 Azure 静态 Web 应用
#网络安全 #渗透测试 #信息安全 #网络安全更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码

评论