mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['src/pentesting-cloud/azure-security/az-persistence/az-queue
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
자세한 정보는 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-queue-enum.md
|
||||
../az-services/az-queue.md
|
||||
{{#endref}}
|
||||
|
||||
### Actions: `Microsoft.Storage/storageAccounts/queueServices/queues/write`
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# Az - SQL Persistence
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## SQL
|
||||
|
||||
자세한 정보는 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-sql.md
|
||||
{{#endref}}
|
||||
|
||||
### 일반적인 지속성 기술
|
||||
|
||||
- SQL 자격 증명을 타협하거나 SQL 사용자 생성 (필요시 SQL 인증 활성화)
|
||||
- 타협된 사용자를 Entrad ID 관리자에 할당 (필요시 Entra ID 인증 활성화)
|
||||
- VM에 백도어 설치 (SQL VM이 사용되는 경우)
|
||||
- SQL 데이터베이스에 대한 액세스를 유지하기 위해 FW 규칙 생성
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
+8
-8
@@ -4,15 +4,15 @@
|
||||
|
||||
## Queue
|
||||
|
||||
자세한 내용은 다음을 확인하세요:
|
||||
자세한 정보는 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-queue-enum.md
|
||||
../az-services/az-queue.md
|
||||
{{#endref}}
|
||||
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/read`
|
||||
|
||||
이 권한을 가진 공격자는 Azure Storage Queue에서 메시지를 엿볼 수 있습니다. 이를 통해 공격자는 메시지의 내용을 처리된 것으로 표시하거나 상태를 변경하지 않고도 볼 수 있습니다. 이는 민감한 정보에 대한 무단 접근으로 이어질 수 있으며, 데이터 유출이나 추가 공격을 위한 정보 수집을 가능하게 합니다.
|
||||
이 권한을 가진 공격자는 Azure Storage Queue에서 메시지를 엿볼 수 있습니다. 이를 통해 공격자는 메시지를 처리된 것으로 표시하거나 상태를 변경하지 않고도 메시지의 내용을 볼 수 있습니다. 이는 민감한 정보에 대한 무단 접근으로 이어질 수 있으며, 데이터 유출이나 추가 공격을 위한 정보 수집을 가능하게 합니다.
|
||||
```bash
|
||||
az storage message peek --queue-name <queue_name> --account-name <storage_account>
|
||||
```
|
||||
@@ -20,7 +20,7 @@ az storage message peek --queue-name <queue_name> --account-name <storage_accoun
|
||||
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action`
|
||||
|
||||
이 권한을 통해 공격자는 Azure Storage Queue에서 메시지를 검색하고 처리할 수 있습니다. 이는 그들이 메시지 내용을 읽고 이를 처리된 것으로 표시하여 합법적인 시스템에서 숨길 수 있음을 의미합니다. 이로 인해 민감한 데이터가 노출되거나 메시지 처리 방식에 중단이 발생하거나, 메시지를 의도된 사용자에게 사용할 수 없게 만들어 중요한 워크플로가 중단될 수 있습니다.
|
||||
이 권한을 통해 공격자는 Azure Storage Queue에서 메시지를 검색하고 처리할 수 있습니다. 이는 그들이 메시지 내용을 읽고 이를 처리된 것으로 표시하여 합법적인 시스템에서 숨길 수 있음을 의미합니다. 이로 인해 민감한 데이터가 노출되거나 메시지 처리 방식에 중단이 발생하거나, 메시지를 의도된 사용자에게 사용할 수 없게 만들어 중요한 워크플로우가 중단될 수 있습니다.
|
||||
```bash
|
||||
az storage message get --queue-name <queue_name> --account-name <storage_account>
|
||||
```
|
||||
@@ -32,7 +32,7 @@ az storage message put --queue-name <queue-name> --content "Injected malicious m
|
||||
```
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/write`
|
||||
|
||||
이 권한은 공격자가 Azure Storage Queue에 새로운 메시지를 추가하거나 기존 메시지를 업데이트할 수 있게 해줍니다. 이를 사용하여 해로운 콘텐츠를 삽입하거나 기존 메시지를 변경할 수 있으며, 이는 큐에 의존하는 시스템에서 애플리케이션을 오도하거나 원치 않는 동작을 유발할 수 있습니다.
|
||||
이 권한은 공격자가 Azure Storage Queue에 새로운 메시지를 추가하거나 기존 메시지를 업데이트할 수 있게 해줍니다. 이를 사용하여 해로운 콘텐츠를 삽입하거나 기존 메시지를 변경할 수 있으며, 이는 큐에 의존하는 애플리케이션을 오도하거나 시스템에서 원치 않는 동작을 유발할 수 있습니다.
|
||||
```bash
|
||||
az storage message put --queue-name <queue-name> --content "Injected malicious message" --account-name <storage-account>
|
||||
|
||||
@@ -46,13 +46,13 @@ az storage message update --queue-name <queue-name> \
|
||||
```
|
||||
### Actions: `Microsoft.Storage/storageAccounts/queueServices/queues/delete`
|
||||
|
||||
이 권한은 공격자가 스토리지 계정 내의 큐를 삭제할 수 있게 합니다. 이 기능을 활용함으로써 공격자는 큐와 그에 연결된 모든 메시지를 영구적으로 제거할 수 있으며, 이는 워크플로우에 심각한 중단을 초래하고 영향을 받는 큐에 의존하는 애플리케이션에 중요한 데이터 손실을 초래할 수 있습니다. 이 작업은 시스템의 필수 구성 요소를 제거하여 서비스를 방해하는 데에도 사용될 수 있습니다.
|
||||
이 권한은 공격자가 스토리지 계정 내의 큐를 삭제할 수 있게 해줍니다. 이 기능을 활용함으로써 공격자는 큐와 그에 연결된 모든 메시지를 영구적으로 제거할 수 있으며, 이는 워크플로우에 심각한 중단을 초래하고 영향을 받는 큐에 의존하는 애플리케이션에 중요한 데이터 손실을 초래할 수 있습니다. 이 작업은 시스템의 필수 구성 요소를 제거하여 서비스를 방해하는 데에도 사용될 수 있습니다.
|
||||
```bash
|
||||
az storage queue delete --name <queue-name> --account-name <storage-account>
|
||||
```
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete`
|
||||
|
||||
이 권한을 통해 공격자는 Azure Storage Queue에서 모든 메시지를 삭제할 수 있습니다. 이 작업은 모든 메시지를 제거하여 워크플로를 방해하고 큐에 의존하는 시스템의 데이터 손실을 초래합니다.
|
||||
이 권한을 사용하면 공격자가 Azure Storage Queue에서 모든 메시지를 삭제할 수 있습니다. 이 작업은 모든 메시지를 제거하여 워크플로를 방해하고 큐에 의존하는 시스템의 데이터 손실을 초래합니다.
|
||||
```bash
|
||||
az storage message clear --queue-name <queue-name> --account-name <storage-account>
|
||||
```
|
||||
@@ -66,7 +66,7 @@ az storage queue metadata update --name <queue-name> --metadata key1=value1 key2
|
||||
|
||||
az storage queue policy set --name <queue-name> --permissions rwd --expiry 2024-12-31T23:59:59Z --account-name <storage-account>
|
||||
```
|
||||
## References
|
||||
## 참고 문헌
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues](https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues)
|
||||
- [https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api](https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api)
|
||||
|
||||
+5
-5
@@ -4,10 +4,10 @@
|
||||
|
||||
## Service Bus
|
||||
|
||||
자세한 내용은 다음을 확인하세요:
|
||||
자세한 정보는 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-servicebus-enum.md
|
||||
../az-services/az-servicebus.md
|
||||
{{#endref}}
|
||||
|
||||
### Actions: `Microsoft.ServiceBus/namespaces/Delete`
|
||||
@@ -36,21 +36,21 @@ az servicebus topic subscription delete --resource-group <ResourceGroupName> --n
|
||||
```
|
||||
### Actions: `Microsoft.ServiceBus/namespaces/queues/write` (`Microsoft.ServiceBus/namespaces/queues/read`)
|
||||
|
||||
Azure Service Bus 큐를 생성하거나 수정할 수 있는 권한이 있는 공격자는 데이터를 가로채거나, 워크플로를 방해하거나, 무단 액세스를 가능하게 하는 데 이를 악용할 수 있습니다. 그들은 악성 엔드포인트로 메시지를 전달하거나, 메시지 TTL을 조정하여 데이터를 부적절하게 유지하거나 삭제하거나, 오류 처리를 방해하기 위해 데드레터링을 활성화하는 등 중요한 구성을 변경할 수 있습니다. 또한, 큐 크기, 잠금 기간 또는 상태를 조작하여 서비스 기능을 방해하거나 탐지를 피할 수 있어, 이는 중요한 포스트 익스플로잇 위험입니다.
|
||||
Azure Service Bus 큐를 생성하거나 수정할 수 있는 권한이 있는 공격자는 이를 이용해 데이터를 가로채거나, 워크플로를 방해하거나, 무단 접근을 가능하게 할 수 있습니다. 그들은 메시지를 악성 엔드포인트로 전달하도록 설정하거나, 메시지 TTL을 조정하여 데이터를 부적절하게 유지하거나 삭제하거나, 오류 처리를 방해하기 위해 데드레터링을 활성화하는 등 중요한 구성을 변경할 수 있습니다. 또한, 큐 크기, 잠금 기간 또는 상태를 조작하여 서비스 기능을 방해하거나 탐지를 피할 수 있어, 이는 중요한 포스트 익스플로잇 위험입니다.
|
||||
```bash
|
||||
az servicebus queue create --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <QueueName>
|
||||
az servicebus queue update --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <QueueName>
|
||||
```
|
||||
### Actions: `Microsoft.ServiceBus/namespaces/topics/write` (`Microsoft.ServiceBus/namespaces/topics/read`)
|
||||
|
||||
Azure Service Bus 네임스페이스 내에서 주제를 생성하거나 수정할 수 있는 권한이 있는 공격자는 이를 이용하여 메시지 워크플로를 방해하거나, 민감한 데이터를 노출시키거나, 무단 작업을 수행할 수 있습니다. az servicebus topic update와 같은 명령을 사용하여, 확장성을 위한 파티셔닝 활성화, 메시지를 부적절하게 유지하거나 폐기하기 위한 TTL 설정 변경, 또는 제어를 우회하기 위한 중복 감지 비활성화와 같은 구성을 조작할 수 있습니다. 또한, 주제 크기 제한을 조정하거나, 가용성을 방해하기 위해 상태를 변경하거나, 가로챈 메시지를 임시로 저장하기 위해 익스프레스 주제를 구성할 수 있어, 주제 관리는 사후 활용 완화를 위한 중요한 초점이 됩니다.
|
||||
Azure Service Bus 네임스페이스 내에서 주제를 생성하거나 수정할 수 있는 권한이 있는 공격자는 이를 이용해 메시지 워크플로를 방해하거나, 민감한 데이터를 노출시키거나, 무단 작업을 수행할 수 있습니다. az servicebus topic update와 같은 명령을 사용하여, 확장성을 위한 파티셔닝 활성화, 메시지를 부적절하게 유지하거나 폐기하기 위한 TTL 설정 변경, 또는 제어를 우회하기 위한 중복 감지 비활성화와 같은 구성을 조작할 수 있습니다. 또한, 주제 크기 제한을 조정하거나, 가용성을 방해하기 위해 상태를 변경하거나, 가로챈 메시지를 임시로 저장하기 위해 익스프레스 주제를 구성할 수 있어, 주제 관리는 사후 활용 완화를 위한 중요한 초점이 됩니다.
|
||||
```bash
|
||||
az servicebus topic create --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <TopicName>
|
||||
az servicebus topic update --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <TopicName>
|
||||
```
|
||||
### Actions: `Microsoft.ServiceBus/namespaces/topics/subscriptions/write` (`Microsoft.ServiceBus/namespaces/topics/subscriptions/read`)
|
||||
|
||||
구독을 생성하거나 수정할 수 있는 권한이 있는 공격자는 Azure Service Bus 주제 내에서 구독을 수정하기 위해 Action: `Microsoft.ServiceBus/namespaces/topics/subscriptions/read`도 필요합니다. 이를 통해 메시지 워크플로를 가로채거나, 재배치하거나, 방해할 수 있습니다. az servicebus topic subscription update와 같은 명령을 사용하여 메시지를 전환하기 위해 데드 레터링을 활성화하거나, 메시지를 무단 엔드포인트로 전달하거나, TTL 및 잠금 기간을 수정하여 메시지 전달을 유지하거나 방해할 수 있습니다. 또한, 상태 또는 최대 전달 수 설정을 변경하여 작업을 방해하거나 탐지를 피할 수 있으며, 구독 제어는 사후 활용 시나리오에서 중요한 측면이 됩니다.
|
||||
구독을 생성하거나 수정할 수 있는 권한이 있는 공격자는 Azure Service Bus 주제 내에서 구독을 수정하기 위해 Action: `Microsoft.ServiceBus/namespaces/topics/subscriptions/read`도 필요합니다. 이를 통해 메시지 워크플로를 가로채거나, 재배치하거나, 방해할 수 있습니다. az servicebus topic subscription update와 같은 명령을 사용하여 메시지를 전환하기 위해 데드 레터링을 활성화하거나, 메시지를 무단 엔드포인트로 전달하거나, TTL 및 잠금 기간을 수정하여 메시지 전달을 유지하거나 방해할 수 있습니다. 또한, 상태 또는 최대 전달 수 설정을 변경하여 운영을 방해하거나 탐지를 피할 수 있으며, 구독 제어는 사후 활용 시나리오에서 중요한 측면이 됩니다.
|
||||
```bash
|
||||
az servicebus topic subscription create --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --topic-name <TopicName> --name <SubscriptionName>
|
||||
az servicebus topic subscription update --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --topic-name <TopicName> --name <SubscriptionName>
|
||||
|
||||
@@ -7,12 +7,12 @@
|
||||
자세한 정보는 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-queue-enum.md
|
||||
../az-services/az-queue.md
|
||||
{{#endref}}
|
||||
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/read`
|
||||
|
||||
이 권한을 가진 공격자는 Azure Storage Queue에서 메시지를 엿볼 수 있습니다. 이를 통해 공격자는 메시지를 처리된 것으로 표시하거나 상태를 변경하지 않고도 메시지의 내용을 볼 수 있습니다. 이는 민감한 정보에 대한 무단 접근으로 이어질 수 있으며, 데이터 유출 또는 추가 공격을 위한 정보 수집을 가능하게 합니다.
|
||||
이 권한을 가진 공격자는 Azure Storage Queue에서 메시지를 엿볼 수 있습니다. 이를 통해 공격자는 메시지를 처리된 것으로 표시하거나 상태를 변경하지 않고도 메시지의 내용을 볼 수 있습니다. 이는 민감한 정보에 대한 무단 접근으로 이어질 수 있으며, 데이터 유출이나 추가 공격을 위한 정보 수집을 가능하게 합니다.
|
||||
```bash
|
||||
az storage message peek --queue-name <queue_name> --account-name <storage_account>
|
||||
```
|
||||
@@ -20,7 +20,7 @@ az storage message peek --queue-name <queue_name> --account-name <storage_accoun
|
||||
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action`
|
||||
|
||||
이 권한을 통해 공격자는 Azure Storage Queue에서 메시지를 검색하고 처리할 수 있습니다. 이는 그들이 메시지 내용을 읽고 이를 처리된 것으로 표시하여 합법적인 시스템에서 숨길 수 있음을 의미합니다. 이로 인해 민감한 데이터가 노출되거나 메시지 처리 방식에 중단이 발생하거나, 메시지를 의도된 사용자에게 사용할 수 없게 만들어 중요한 워크플로가 중단될 수 있습니다.
|
||||
이 권한을 통해 공격자는 Azure Storage Queue에서 메시지를 검색하고 처리할 수 있습니다. 이는 그들이 메시지 내용을 읽고 이를 처리된 것으로 표시하여 합법적인 시스템에서 숨길 수 있음을 의미합니다. 이로 인해 민감한 데이터가 노출되거나 메시지 처리 방식에 중단이 발생하거나, 메시지를 의도된 사용자에게 사용할 수 없게 만들어 중요한 워크플로우가 중단될 수 있습니다.
|
||||
```bash
|
||||
az storage message get --queue-name <queue_name> --account-name <storage_account>
|
||||
```
|
||||
|
||||
+19
-14
@@ -7,14 +7,14 @@
|
||||
자세한 정보는 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-servicebus-enum.md
|
||||
../az-services/az-servicebus.md
|
||||
{{#endref}}
|
||||
|
||||
### Microsoft.ServiceBus/namespaces/authorizationrules/listKeys/action OR Microsoft.ServiceBus/namespaces/authorizationrules/regenerateKeys/action
|
||||
|
||||
이 권한은 Service Bus 네임스페이스 내의 로컬 권한 규칙에 대한 키를 가져오거나 재생성할 수 있게 해줍니다. 이 키를 사용하여 Service Bus 네임스페이스로 인증할 수 있으며, 이를 통해 모든 큐나 주제에 메시지를 전송하거나, 모든 큐나 구독에서 메시지를 수신하거나, 시스템과 상호작용하여 운영을 방해하거나, 유효한 사용자를 가장하거나, 메시징 워크플로우에 악성 데이터를 주입할 수 있습니다.
|
||||
이 권한은 Service Bus 네임스페이스 내의 로컬 권한 규칙에 대한 키를 가져오거나 재생성할 수 있게 해줍니다. 이 키를 사용하여 Service Bus 네임스페이스로 인증할 수 있으며, 이를 통해 모든 큐나 주제로 메시지를 전송하거나, 모든 큐나 구독에서 메시지를 수신하거나, 시스템과 상호작용하여 운영을 방해하거나, 유효한 사용자를 가장하거나, 메시징 워크플로우에 악성 데이터를 주입할 수 있습니다.
|
||||
|
||||
기본적으로 **`RootManageSharedAccessKey` 규칙은** Service Bus 네임스페이스에 대한 전체 제어 권한을 가지고 있으며, `az` cli에서 사용됩니다. 그러나 다른 키 값이 있는 다른 규칙이 존재할 수 있습니다.
|
||||
기본적으로 **`RootManageSharedAccessKey` 규칙은** Service Bus 네임스페이스에 대한 전체 제어 권한을 가지며, `az` cli에서 사용됩니다. 그러나 다른 키 값이 있는 다른 규칙이 존재할 수 있습니다.
|
||||
```bash
|
||||
# List keys
|
||||
az servicebus namespace authorization-rule keys list --resource-group <res-group> --namespace-name <namespace-name> --authorization-rule-name RootManageSharedAccessKey [--authorization-rule-name RootManageSharedAccessKey]
|
||||
@@ -24,7 +24,7 @@ az servicebus namespace authorization-rule keys renew --key [PrimaryKey|Secondar
|
||||
```
|
||||
### Microsoft.ServiceBus/namespaces/AuthorizationRules/write
|
||||
|
||||
이 권한을 사용하면 **모든 권한과 자체 키를 가진 새로운 권한 규칙을 생성**할 수 있습니다:
|
||||
이 권한을 사용하면 **모든 권한과 자신의 키를 가진 새로운 권한 규칙을 생성**할 수 있습니다:
|
||||
```bash
|
||||
az servicebus namespace authorization-rule create --authorization-rule-name "myRule" --namespace-name mynamespacespdemo --resource-group Resource_Group_1 --rights Manage Listen Send
|
||||
```
|
||||
@@ -57,7 +57,7 @@ az servicebus queue authorization-rule keys renew --key [PrimaryKey|SecondaryKey
|
||||
```
|
||||
### Microsoft.ServiceBus/namespaces/[queues|topics]/authorizationRules/write
|
||||
|
||||
이 권한을 사용하면 **모든 권한과 자신의 키를 가진 새로운 권한 규칙을 생성**할 수 있습니다:
|
||||
이 권한을 사용하면 **모든 권한과 자체 키를 가진 새로운 권한 규칙을 생성**할 수 있습니다:
|
||||
```bash
|
||||
# In a topic
|
||||
az servicebus topic authorization-rule create --resource-group <res-group> --namespace-name <namespace-name> --topic-name <topic-name> --name <auth-rule-name> --rights Manage Listen Send
|
||||
@@ -66,9 +66,9 @@ az servicebus topic authorization-rule create --resource-group <res-group> --nam
|
||||
az servicebus queue authorization-rule create --resource-group <res-group> --namespace-name <namespace-name> --queue-name <queue-name> --name <auth-rule-name> --rights Manage Listen Send
|
||||
```
|
||||
>[!WARNING]
|
||||
>이 명령은 키로 응답하지 않으므로, 권한 상승을 위해 이전 명령(및 권한)으로 키를 가져와야 합니다.
|
||||
>이 명령은 키를 반환하지 않으므로, 권한 상승을 위해 이전 명령(및 권한)으로 키를 가져와야 합니다.
|
||||
|
||||
또한, 해당 명령(`Microsoft.ServiceBus/namespaces/[queues|topics]/authorizationRules/read`)을 Azure CLI를 통해 수행하면, 기존의 권한 규칙을 업데이트하고 다음 명령으로 더 많은 권한을 부여할 수 있습니다(부족한 경우).
|
||||
또한, 해당 명령(`Microsoft.ServiceBus/namespaces/[queues|topics]/authorizationRules/read`)을 사용하여 Azure CLI를 통해 이 작업을 수행하면, 기존의 권한 규칙을 업데이트하고 다음 명령으로 더 많은 권한을 부여할 수 있습니다(부족한 경우).
|
||||
```bash
|
||||
# In a topic
|
||||
az servicebus topic authorization-rule update --resource-group <res-group> --namespace-name <namespace-name> --topic-name <topic-name> --name <auth-rule-name> --rights Manage Listen Send
|
||||
@@ -82,13 +82,14 @@ az servicebus queue authorization-rule update --resource-group <res-group> --nam
|
||||
```bash
|
||||
az servicebus namespace update --disable-local-auth false -n <namespace-name> --resource-group <res-group>
|
||||
```
|
||||
### Send Messages with keys (Microsoft.ServiceBus/namespaces/authorizationRules/listkeys/action OR Microsoft.ServiceBus/namespaces/authorizationRules/regenerateKeys/action)
|
||||
### Send Messages with keys (Microsoft.ServiceBus/namespaces/[queues|topics]/authorizationRules/ListKeys/action OR Microsoft.ServiceBus/namespaces/[queues|topics]/authorizationRules/regenerateKeys/action)
|
||||
|
||||
`PrimaryConnectionString`를 검색할 수 있으며, 이는 Service Bus 네임스페이스의 자격 증명 역할을 합니다. 이 연결 문자열을 사용하여 Service Bus 네임스페이스로 완전히 인증할 수 있으며, 이를 통해 모든 큐나 주제에 메시지를 전송하고 시스템과 상호작용하여 운영을 방해하거나 유효한 사용자를 가장하거나 메시징 워크플로우에 악성 데이터를 주입할 수 있습니다. 이 방법은 `--disable-local-auth`가 false로 설정된 경우에 작동합니다.
|
||||
`PrimaryConnectionString`를 검색할 수 있으며, 이는 Service Bus 네임스페이스의 자격 증명 역할을 합니다. 이 연결 문자열을 사용하여 Service Bus 네임스페이스로 완전히 인증할 수 있으며, 이를 통해 모든 큐나 주제로 메시지를 전송하고 시스템과 상호작용하여 운영을 방해하거나 유효한 사용자를 가장하거나 메시징 워크플로우에 악성 데이터를 주입할 수 있는 잠재적인 방법을 제공합니다. 이 방법은 `--disable-local-auth`가 false로 설정된 경우에 작동합니다(즉, 로컬 인증이 활성화됨).
|
||||
```python
|
||||
import asyncio
|
||||
from azure.servicebus.aio import ServiceBusClient
|
||||
from azure.servicebus import ServiceBusMessage
|
||||
# pip install azure-servicebus
|
||||
|
||||
NAMESPACE_CONNECTION_STR = "<PrimaryConnectionString>"
|
||||
TOPIC_OR_QUEUE_NAME = "<TOPIC_OR_QUEUE_NAME>"
|
||||
@@ -129,12 +130,13 @@ az rest --method post \
|
||||
--body "<MESSAGE_BODY>"
|
||||
|
||||
```
|
||||
### Receive with keys (Microsoft.ServiceBus/namespaces/authorizationRules/listkeys/action OR Microsoft.ServiceBus/namespaces/authorizationRules/regenerateKeys/action)
|
||||
### Receive with keys (Microsoft.ServiceBus/namespaces/[queues|topics]/authorizationRules/ListKeys/action OR Microsoft.ServiceBus/namespaces/[queues|topics]/authorizationRules/regenerateKeys/action)
|
||||
|
||||
PrimaryConnectionString를 검색할 수 있으며, 이는 Service Bus 네임스페이스의 자격 증명 역할을 합니다. 이 연결 문자열을 사용하여 네임스페이스 내의 모든 큐 또는 구독에서 메시지를 수신할 수 있으며, 이는 잠재적으로 민감하거나 중요한 데이터에 대한 접근을 허용하고, 데이터 유출을 가능하게 하거나, 메시지 처리 및 애플리케이션 워크플로에 간섭할 수 있습니다. 이 방법은 `--disable-local-auth`가 false로 설정된 경우에 작동합니다.
|
||||
PrimaryConnectionString을 검색할 수 있으며, 이는 Service Bus 네임스페이스의 자격 증명 역할을 합니다. 이 연결 문자열을 사용하여 네임스페이스 내의 모든 큐 또는 구독에서 메시지를 수신할 수 있으며, 이는 잠재적으로 민감하거나 중요한 데이터에 대한 접근을 허용하고, 데이터 유출을 가능하게 하며, 메시지 처리 및 애플리케이션 워크플로에 간섭할 수 있습니다. 이 방법은 `--disable-local-auth`가 false로 설정된 경우에 작동합니다.
|
||||
```python
|
||||
import asyncio
|
||||
from azure.servicebus.aio import ServiceBusClient
|
||||
# pip install azure-servicebus
|
||||
|
||||
CONN_STR = "<PrimaryConnectionString>"
|
||||
QUEUE = "<QUEUE_NAME>"
|
||||
@@ -182,7 +184,7 @@ sas_token = generate_sas_token(resource_uri, "<KEYNAME>", "<PRIMARY_KEY>")
|
||||
print(sas_token)
|
||||
|
||||
```
|
||||
큐에서는 메시지를 가져오거나 미리 볼 수 있습니다(메시지를 가져오면 제거되지만, 미리 보기는 제거되지 않습니다):
|
||||
큐에서는 메시지를 가져오거나 미리 볼 수 있습니다(메시지를 가져오면 삭제되지만, 미리 보기에서는 삭제되지 않습니다):
|
||||
```bash
|
||||
#Get a message
|
||||
az rest --method post \
|
||||
@@ -218,19 +220,21 @@ az rest --method get \
|
||||
```
|
||||
### 메시지 전송. DataActions: `Microsoft.ServiceBus/namespaces/messages/send/action`
|
||||
|
||||
이 권한을 사용하여 메시지를 전송할 수 있으며, `--disable-local-auth`가 true로 설정되어 있어도 가능합니다.
|
||||
이 권한을 사용하여 메시지를 전송할 수 있습니다. `--disable-local-auth`가 true로 설정되어 있어도 가능합니다.
|
||||
```python
|
||||
import asyncio
|
||||
from azure.identity.aio import DefaultAzureCredential
|
||||
from azure.servicebus.aio import ServiceBusClient
|
||||
from azure.servicebus import ServiceBusMessage
|
||||
# pip install azure-servicebus
|
||||
|
||||
NS = "<namespace>.servicebus.windows.net" # Your namespace
|
||||
QUEUE_OR_TOPIC = "<QUEUE_OR_TOPIC>" # Your queue name
|
||||
QUEUE_OR_TOPIC = "<QUEUE_OR_TOPIC>" # Your queue name
|
||||
|
||||
async def run():
|
||||
credential = DefaultAzureCredential()
|
||||
async with ServiceBusClient(fully_qualified_namespace=NS, credential=credential) as client:
|
||||
#async with client.get_topic_sender(topic_name=TOPIC) as sender: # Use this to send the message to a topic
|
||||
async with client.get_queue_sender(queue_name=QUEUE) as sender:
|
||||
await sender.send_messages(ServiceBusMessage("Single Message"))
|
||||
print("Sent a single message")
|
||||
@@ -246,6 +250,7 @@ asyncio.run(run())
|
||||
import asyncio
|
||||
from azure.identity.aio import DefaultAzureCredential
|
||||
from azure.servicebus.aio import ServiceBusClient
|
||||
# pip install azure-servicebus
|
||||
|
||||
NS = "<namespace>.servicebus.windows.net"
|
||||
QUEUE = "<QUEUE>"
|
||||
|
||||
+4
-4
@@ -4,7 +4,7 @@
|
||||
|
||||
## Service Bus
|
||||
|
||||
Azure Service Bus는 신뢰할 수 있는 **애플리케이션의 다양한 부분 또는 별도의 애플리케이션 간의 통신**을 가능하게 하기 위해 설계된 클라우드 기반 **메시징 서비스**입니다. 이는 안전한 중개자로 작용하여 발신자와 수신자가 동시에 작동하지 않더라도 메시지가 안전하게 전달되도록 보장합니다. 시스템을 분리함으로써 애플리케이션이 독립적으로 작동하면서도 데이터나 지침을 교환할 수 있게 합니다. 이는 여러 작업자 간의 부하 분산, 신뢰할 수 있는 메시지 전달 또는 순서대로 작업을 처리하거나 안전하게 접근을 관리해야 하는 복잡한 조정이 필요한 시나리오에 특히 유용합니다.
|
||||
Azure Service Bus는 **애플리케이션의 다양한 부분 또는 별도의 애플리케이션 간의 신뢰할 수 있는 **통신을 가능하게 하기 위해 설계된 클라우드 기반 **메시징 서비스**입니다. 이는 안전한 중개자로 작용하여 발신자와 수신자가 동시에 작동하지 않더라도 메시지가 안전하게 전달되도록 보장합니다. 시스템을 분리함으로써 애플리케이션이 독립적으로 작동하면서도 데이터를 교환하거나 지시를 수행할 수 있게 합니다. 이는 여러 작업자 간의 부하 분산, 신뢰할 수 있는 메시지 전달 또는 작업을 순서대로 처리하거나 안전하게 액세스를 관리하는 것과 같은 복잡한 조정이 필요한 시나리오에 특히 유용합니다.
|
||||
|
||||
### Key Concepts
|
||||
|
||||
@@ -43,18 +43,18 @@ https://<namespace>.servicebus.windows.net:443/
|
||||
az cli 매개변수의 **`--disable-local-auth`**는 **로컬 인증**(공유 액세스 서명(SAS) 키 사용 허용)이 서비스 버스 네임스페이스에 대해 활성화되어 있는지 제어하는 데 사용됩니다.
|
||||
|
||||
- disable이 **true**로 설정되면: SAS 키를 사용하는 로컬 인증이 비활성화되고 Entra ID 인증이 허용됩니다.
|
||||
- disable이 **false (기본값)**로 설정되면: SAS 로컬 인증과 Entra ID 인증 모두 사용 가능하며, SAS 키가 포함된 연결 문자열을 사용하여 서비스 버스 리소스에 접근할 수 있습니다.
|
||||
- disable이 **false (기본값)**로 설정되면: SAS 로컬 인증과 Entra ID 인증이 모두 사용 가능하며, SAS 키가 포함된 연결 문자열을 사용하여 서비스 버스 리소스에 접근할 수 있습니다.
|
||||
|
||||
### 권한 규칙 / SAS 정책
|
||||
|
||||
SAS 정책은 Azure Service Bus 엔터티 네임스페이스(가장 중요한 것), 큐 및 주제에 대한 액세스 권한을 정의합니다. 각 정책은 다음 구성 요소를 가집니다:
|
||||
SAS 정책은 Azure Service Bus 엔터티 네임스페이스(가장 중요한 것), 큐 및 주제에 대한 액세스 권한을 정의합니다. 각 정책은 다음 구성 요소를 포함합니다:
|
||||
|
||||
- **권한**: 액세스 수준을 지정하는 체크박스:
|
||||
- 관리: 엔터티에 대한 전체 제어를 부여하며, 구성 및 권한 관리를 포함합니다.
|
||||
- 전송: 엔터티에 메시지를 전송할 수 있습니다.
|
||||
- 수신: 엔터티로부터 메시지를 수신할 수 있습니다.
|
||||
- **기본 및 보조 키**: 액세스 인증을 위한 보안 토큰 생성을 위해 사용되는 암호화 키입니다.
|
||||
- **기본 및 보조 연결 문자열**: 애플리케이션에서 쉽게 사용할 수 있도록 엔드포인트와 키가 포함된 미리 구성된 연결 문자열입니다.
|
||||
- **기본 및 보조 연결 문자열**: 애플리케이션에서 쉽게 사용할 수 있도록 엔드포인트와 키를 포함한 미리 구성된 연결 문자열입니다.
|
||||
- **SAS 정책 ARM ID**: 프로그래밍적 식별을 위한 정책의 Azure Resource Manager (ARM) 경로입니다.
|
||||
|
||||
네임스페이스는 모든 엔터티에 영향을 미치는 단일 SAS 정책을 가지며, 큐와 주제는 보다 세분화된 제어를 위해 개별 SAS 정책을 가질 수 있다는 점에 유의하는 것이 중요합니다.
|
||||
@@ -10,7 +10,7 @@ Azure SQL은 네 가지 주요 제공 사항으로 구성됩니다:
|
||||
|
||||
1. **Azure SQL Server**: SQL Server 데이터베이스의 **배포 및 관리**를 위해 필요한 서버입니다.
|
||||
2. **Azure SQL Database**: Azure 클라우드에서 개별 데이터베이스를 호스팅할 수 있는 **완전 관리형 데이터베이스 서비스**입니다.
|
||||
3. **Azure SQL Managed Instance**: 더 큰 규모의 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다.
|
||||
3. **Azure SQL Managed Instance**: 대규모 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다.
|
||||
4. **Azure SQL Server on Azure VMs**: 운영 체제와 SQL Server 인스턴스에 대한 **제어**를 원하는 아키텍처에 가장 적합합니다.
|
||||
|
||||
### SQL Server 보안 기능
|
||||
@@ -20,7 +20,7 @@ Azure SQL은 네 가지 주요 제공 사항으로 구성됩니다:
|
||||
- 공용 엔드포인트(특정 네트워크에 대한 접근 제한 가능).
|
||||
- 개인 엔드포인트.
|
||||
- 도메인 이름에 따라 연결을 제한할 수도 있습니다.
|
||||
- Azure 서비스가 접근할 수 있도록 허용할 수도 있습니다(예: 포털에서 쿼리 편집기를 사용하거나 Azure VM이 연결하도록 허용).
|
||||
- Azure 서비스가 접근할 수 있도록 허용할 수도 있습니다(예: 포털에서 쿼리 편집기를 사용하거나 Azure VM이 연결할 수 있도록 허용).
|
||||
|
||||
**인증 방법:**
|
||||
|
||||
@@ -33,11 +33,11 @@ SQL 인증이 허용되는 경우 관리 사용자(사용자 이름 + 비밀번
|
||||
**암호화:**
|
||||
|
||||
- "투명 데이터 암호화"라고 하며, 데이터베이스, 백업 및 로그를 정지 상태에서 암호화합니다.
|
||||
- 항상 기본적으로 Azure 관리 키가 사용되지만, 고객 관리 암호화 키(CMEK)도 사용할 수 있습니다.
|
||||
- 항상 기본적으로 Azure 관리 키가 사용되지만 고객 관리 암호화 키(CMEK)도 사용할 수 있습니다.
|
||||
**관리형 ID:**
|
||||
|
||||
- 시스템 및 사용자 관리 MI를 할당할 수 있습니다.
|
||||
- 암호화 키에 접근하는 데 사용됩니다(사용되는 경우 CMEK) 및 데이터베이스의 다른 서비스에 접근합니다.
|
||||
- 암호화 키에 접근하는 데 사용됩니다(사용되는 경우 CMEK) 및 데이터베이스의 다른 서비스에 접근하는 데 사용됩니다.
|
||||
- 여러 UMI가 할당된 경우 사용할 기본 UMI를 지정할 수 있습니다.
|
||||
- 테넌트 간 접근을 위한 연합 클라이언트 ID를 구성할 수 있습니다.
|
||||
|
||||
@@ -54,7 +54,7 @@ SQL 인증이 허용되는 경우 관리 사용자(사용자 이름 + 비밀번
|
||||
|
||||
## Azure SQL Database
|
||||
|
||||
**Azure SQL Database**는 **완전 관리형 데이터베이스 플랫폼 서비스(PaaS)**로, 확장 가능하고 안전한 관계형 데이터베이스 솔루션을 제공합니다. 최신 SQL Server 기술을 기반으로 하며, 인프라 관리의 필요성을 없애 클라우드 기반 애플리케이션에 인기 있는 선택입니다.
|
||||
**Azure SQL Database**는 확장 가능하고 안전한 관계형 데이터베이스 솔루션을 제공하는 **완전 관리형 데이터베이스 플랫폼 서비스(PaaS)**입니다. 최신 SQL Server 기술을 기반으로 하며 인프라 관리의 필요성을 없애 클라우드 기반 애플리케이션에 인기 있는 선택입니다.
|
||||
|
||||
SQL 데이터베이스를 생성하려면 호스팅될 SQL 서버를 지정해야 합니다.
|
||||
|
||||
@@ -83,19 +83,19 @@ SQL 데이터베이스는 **탄력적 풀**의 일부가 될 수 있습니다.
|
||||
|
||||
### Azure SQL Managed Instance
|
||||
|
||||
**Azure SQL Managed Instances**는 더 큰 규모의 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다. 최신 SQL Server 온프레미스(Enterprise Edition) 데이터베이스 엔진과 거의 100% 호환성을 제공하며, 일반적인 보안 문제를 해결하는 네이티브 가상 네트워크(VNet) 구현과 온프레미스 SQL Server 고객에게 유리한 비즈니스 모델을 제공합니다.
|
||||
**Azure SQL Managed Instances**는 대규모 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다. 최신 SQL Server 온프레미스(Enterprise Edition) 데이터베이스 엔진과 거의 100% 호환성을 제공하며, 일반적인 보안 문제를 해결하는 네이티브 가상 네트워크(VNet) 구현과 온프레미스 SQL Server 고객에게 유리한 비즈니스 모델을 제공합니다.
|
||||
|
||||
### Azure SQL 가상 머신
|
||||
|
||||
**Azure SQL Virtual Machines**는 **운영 체제**와 SQL Server 인스턴스를 제어할 수 있게 해주며, SQL 서버를 실행하는 VM 서비스에서 VM이 생성됩니다.
|
||||
**Azure SQL Virtual Machines**는 **운영 체제를 제어**하고 SQL Server 인스턴스를 관리할 수 있게 해주며, SQL 서버를 실행하는 VM 서비스에서 VM이 생성됩니다.
|
||||
|
||||
SQL 가상 머신이 생성될 때 SQL 서버를 호스팅할 VM의 **모든 설정을 선택할 수 있습니다**(VM 수업에서 보여준 대로).
|
||||
- 이는 VM이 일부 VNet에 접근하고, **관리형 ID가 연결**될 수 있으며, 파일 공유가 마운트될 수 있음을 의미합니다… SQL에서 VM으로의 **피벗**이 매우 흥미로워집니다.
|
||||
- 또한, SQL이 특정 키 볼트에 접근할 수 있도록 **앱 ID 및 비밀을 구성**할 수 있으며, 이 키 볼트는 민감한 정보를 포함할 수 있습니다.
|
||||
- 이는 VM이 일부 VNet에 접근하고, **관리형 ID가 연결**될 수 있으며, 파일 공유가 마운트될 수 있음을 의미합니다… SQL에서 VM으로의 **피벗이 매우 흥미롭습니다**.
|
||||
- 또한 SQL이 특정 키 볼트에 접근할 수 있도록 **앱 ID 및 비밀을 구성**할 수 있으며, 이 키 볼트는 민감한 정보를 포함할 수 있습니다.
|
||||
|
||||
자동 SQL 업데이트, 자동 백업, Entra ID 인증 및 다른 SQL 서비스의 대부분의 기능과 같은 것들을 구성할 수도 있습니다.
|
||||
자동 SQL 업데이트, 자동 백업, Entra ID 인증 및 다른 SQL 서비스의 대부분 기능과 같은 것들을 구성할 수도 있습니다.
|
||||
|
||||
## 열거
|
||||
## Enumeration
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -232,7 +232,7 @@ Get-AzSqlVM
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
추가로 데이터베이스 내에서 Dynamic Data Masking 및 Row Level 정책을 열거하려면 다음 쿼리를 사용할 수 있습니다:
|
||||
추가적으로 데이터베이스 내에서 Dynamic Data Masking 및 Row Level 정책을 열거하려면, 다음 쿼리를 사용할 수 있습니다:
|
||||
```sql
|
||||
--Enumerates the masked columns
|
||||
SELECT
|
||||
@@ -278,7 +278,7 @@ $Connection.Close()
|
||||
|
||||
invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;'
|
||||
```
|
||||
데이터베이스에 접근하기 위해 sqlcmd를 사용할 수도 있습니다. 서버가 공용 연결을 허용하는지 아는 것이 중요합니다 `az sql server show --name <server-name> --resource-group <resource-group>` 그리고 방화벽 규칙이 우리의 IP가 접근할 수 있도록 허용하는지도 확인해야 합니다:
|
||||
데이터베이스에 접근하기 위해 sqlcmd를 사용할 수도 있습니다. 서버가 공용 연결을 허용하는지 아는 것이 중요합니다 `az sql server show --name <server-name> --resource-group <resource-group>` 그리고 방화벽 규칙이 우리의 IP 접근을 허용하는지도 확인해야 합니다:
|
||||
```bash
|
||||
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
|
||||
```
|
||||
@@ -301,4 +301,10 @@ sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passwork
|
||||
../az-post-exploitation/az-sql-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
### Persistence
|
||||
|
||||
{{#ref}}
|
||||
../az-persistence/az-sql-persistance.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user