# Az - Service Bus Enum

{{#include ../../../banners/hacktricks-training.md}}

## Service Bus

Azure Service Bus je usluga **poruka** zasnovana na oblaku koja je dizajnirana da omogući pouzdanu **komunikaciju između različitih delova aplikacije ili odvojenih aplikacija**. Deluje kao siguran posrednik, osiguravajući da poruke budu sigurno isporučene, čak i ako pošiljalac i primalac ne rade istovremeno. Razdvajanjem sistema, omogućava aplikacijama da rade nezavisno dok i dalje razmenjuju podatke ili uputstva. Posebno je korisna za scenarije koji zahtevaju ravnotežu opterećenja među više radnika, pouzdanu isporuku poruka ili složenu koordinaciju, kao što je obrada zadataka u redosledu ili sigurno upravljanje pristupom.

### Ključni koncepti

1. **Namespaces:** Namespace u sistemima poruka je logički kontejner koji organizuje i upravlja komponentama poruka, redovima i temama. Pruža izolovano okruženje u kojem aplikacije mogu slati, primati i obrađivati poruke. Redovi i teme dele istu infrastrukturu i konfiguraciju unutar Service Bus namespace-a, ali funkcionišu nezavisno bez međusobnog delovanja.
2. **Queues:** Njegova svrha je da čuva poruke dok primalac ne bude spreman.
- Poruke su uređene, vremenski označene i trajno sačuvane.
- Isporučuju se u režimu povlačenja (na zahtev) jednom potrošaču.
- Može se konfigurisati tako da kada se poruka podeli, automatski se obriše ili u režimu “Peek lock” gde potrošač mora da potvrdi da može biti obrisana. Ako ne, poruka će se vratiti u red.
- Podržava komunikaciju tačka-tačka.
3. **Topics:** Publish-subscribe poruke za emitovanje.
- Više nezavisnih pretplata prima kopije poruka.
- Svaka pretplata je poput reda unutar teme.
- Pretplate mogu imati pravila/filtere za kontrolu isporuke ili dodavanje metapodataka.

Krajna tačka/veza servisa bus je:
```bash
https://<namespace>.servicebus.windows.net:443/
```
### Napredne Funkcije

Neke napredne funkcije su:

- **Message Sessions**: Osigurava FIFO obradu i podržava obrasce zahteva-odgovora.
- **Auto-Forwarding**: Prenosi poruke između redova ili tema u istom imenskom prostoru.
- **Dead-Lettering**: Zapisuje neisporučive poruke za pregled.
- **Scheduled Delivery**: Odlaže obradu poruka za buduće zadatke.
- **Message Deferral**: Odlaže preuzimanje poruka dok ne budu spremne.
- **Transactions**: Grupira operacije u atomsko izvršenje.
- **Filters & Actions**: Primena pravila za filtriranje ili anotaciju poruka.
- **Auto-Delete on Idle**: Briše redove nakon neaktivnosti (min: 5 minuta).
- **Duplicate Detection**: Uklanja duplikate poruka tokom ponovnog slanja.
- **Batch Deletion**: Masovno briše isteknute ili nepotrebne poruke.

### Lokalna Autentifikacija

**`--disable-local-auth`** iz az cli parametra se koristi za kontrolu da li je **lokalna autentifikacija** (dozvoljava korišćenje Shared Access Signature (SAS) ključeva) omogućena za vaš Service Bus imenski prostor.

- Kada je disable postavljen na **true**: Lokalna autentifikacija korišćenjem SAS ključeva je onemogućena i dozvoljena je Entra ID autentifikacija.
- Kada je disable postavljen na **false (podrazumevano)**: I lokalna autentifikacija SAS-om i Entra ID autentifikacija su dostupne i možete koristiti konekcione stringove sa SAS ključevima za pristup vašim Service Bus resursima.

### Autorizacija-Pravila / SAS Politika

SAS Politike definišu dozvole za pristup Azure Service Bus entitetima imenskog prostora (najvažnija), redovima i temama. Svaka politika ima sledeće komponente:

- **Permissions**: Potvrdni okviri za specifikaciju nivoa pristupa:
- Manage: Daje potpunu kontrolu nad entitetom, uključujući upravljanje konfiguracijom i dozvolama.
- Send: Dozvoljava slanje poruka entitetu.
- Listen: Dozvoljava primanje poruka od entiteta.
- **Primary and Secondary Keys**: Ovi su kriptografski ključevi korišćeni za generisanje sigurnih tokena za autentifikaciju pristupa.
- **Primary and Secondary Connection Strings**: Prekonfigurisani konekcioni stringovi koji uključuju krajnju tačku i ključ za laku upotrebu u aplikacijama.
- **SAS Policy ARM ID**: Putanja Azure Resource Manager-a (ARM) do politike za programatsku identifikaciju.

Važno je napomenuti da imenski prostor ima jednu SAS politiku koja utiče na svaki entitet unutar njega, dok redovi i teme mogu imati svoje pojedinačne SAS politike za precizniju kontrolu.

### Enumeracija

{{#tabs }}
{{#tab name="az cli" }}
```bash
# Namespace Enumeration
az servicebus namespace list
az servicebus namespace network-rule-set list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus namespace show --resource-group <MyResourceGroup> --name <MyNamespace>
az servicebus namespace network-rule-set show --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus namespace private-endpoint-connection list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus namespace exists --name ProposedNamespace

# Authorization Rule Enumeration
az servicebus namespace authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus queue authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --queue-name <MyQueue>
az servicebus topic authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic>
az servicebus namespace authorization-rule keys list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyAuthRule>

# Get keys
az servicebus namespace authorization-rule keys list --resource-group <res-group> --namespace-name <namespace-name> [--authorization-rule-name RootManageSharedAccessKey]
az servicebus topic authorization-rule keys list --resource-group <res-group> --namespace-name <namespace-name> --topic-name <topic-name> --name <auth-rule-name>
az servicebus queue authorization-rule keys list --resource-group <res-group> --namespace-name <namespace-name> --queue-name <topic-name> --name <auth-rule-name>

# Queue Enumeration
az servicebus queue list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus queue show --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyQueue>

# Topic Enumeration
az servicebus topic list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus topic show --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyTopic>

# Susbscription Enumeration
az servicebus topic subscription list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic>
az servicebus topic subscription show --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic> --name <MySubscription>
```
{{#endtab }}

{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.ServiceBus

# Retrieves details of a Service Bus namespace, including V2-specific features like additional metrics or configurations.
Get-AzServiceBusNamespaceV2 -ResourceGroupName <ResourceGroupName> -Name <NamespaceName>

# Retrieves the authorization rules for a Service Bus namespace, queue, or topic.
Get-AzServiceBusAuthorizationRule -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves the Geo-Disaster Recovery configuration for a Service Bus namespace, if it is enabled.
Get-AzServiceBusGeoDRConfiguration -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves the shared access keys for a specified authorization rule in a Service Bus namespace.
Get-AzServiceBusKey -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -Name <RuleName>

# Retrieves the migration state and details for a Service Bus namespace, if a migration is in progress.
Get-AzServiceBusMigration -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves properties and details about a Service Bus namespace.
Get-AzServiceBusNamespace -ResourceGroupName <ResourceGroupName> -Name <NamespaceName>

# Retrieves the network rule set for a Service Bus namespace, such as IP restrictions or virtual network access rules.
Get-AzServiceBusNetworkRuleSet -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves private endpoint connections for a Service Bus namespace.
Get-AzServiceBusPrivateEndpointConnection -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves private link resources associated with a Service Bus namespace.
Get-AzServiceBusPrivateLink -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves details of a specified queue in a Service Bus namespace.
Get-AzServiceBusQueue -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -Name <QueueName>

# Retrieves rules (filters and actions) for a subscription under a Service Bus topic.
Get-AzServiceBusRule -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -TopicName <TopicName> -SubscriptionName <SubscriptionName>

# Retrieves details of subscriptions for a specified Service Bus topic.
Get-AzServiceBusSubscription -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -TopicName <TopicName>

# Retrieves details of a specified topic in a Service Bus namespace.
Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
```
{{#endtab }}
{{#endtabs }}

### Eskalacija privilegija

{{#ref}}
../az-privilege-escalation/az-servicebus-privesc.md
{{#endref}}

### Post Eksploatacija

{{#ref}}
../az-post-exploitation/az-servicebus-post-exploitation.md
{{#endref}}

## Reference

- [https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0](https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli)

{{#include ../../../banners/hacktricks-training.md}}
