mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-27 05:03:31 -08:00
Translated ['src/pentesting-cloud/azure-security/az-enumeration-tools.md
This commit is contained in:
@@ -6,26 +6,24 @@
|
||||
|
||||
> [!TIP]
|
||||
> In linux sal jy PowerShell Core moet installeer:
|
||||
>
|
||||
> ```bash
|
||||
> sudo apt-get update
|
||||
> sudo apt-get install -y wget apt-transport-https software-properties-common
|
||||
>
|
||||
> # Ubuntu 20.04
|
||||
> wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
|
||||
>
|
||||
> # Werk repos op
|
||||
> sudo apt-get update
|
||||
> sudo add-apt-repository universe
|
||||
>
|
||||
> # Installeer & begin powershell
|
||||
> sudo apt-get install -y powershell
|
||||
> pwsh
|
||||
>
|
||||
> # Az cli
|
||||
> curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
|
||||
> ```
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y wget apt-transport-https software-properties-common
|
||||
|
||||
# Ubuntu 20.04
|
||||
wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
|
||||
|
||||
# Update repos
|
||||
sudo apt-get update
|
||||
sudo add-apt-repository universe
|
||||
|
||||
# Install & start powershell
|
||||
sudo apt-get install -y powershell
|
||||
pwsh
|
||||
|
||||
# Az cli
|
||||
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
|
||||
```
|
||||
## Installeer PowerShell in MacOS
|
||||
|
||||
Instruksies van die [**dokumentasie**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4):
|
||||
@@ -59,7 +57,7 @@ Opdragte in Azure CLI is gestruktureer volgens 'n patroon van: `az <service> <ac
|
||||
|
||||
#### Debug | MitM az cli
|
||||
|
||||
Met die parameter **`--debug`** is dit moontlik om al die versoeke wat die hulpmiddel **`az`** stuur te sien:
|
||||
Deur die parameter **`--debug`** is dit moontlik om al die versoeke wat die hulpmiddel **`az`** stuur te sien:
|
||||
```bash
|
||||
az account management-group list --output table --debug
|
||||
```
|
||||
@@ -105,17 +103,17 @@ Met die parameter **`-Debug`** is dit moontlik om al die versoeke wat die hulpmi
|
||||
```bash
|
||||
Get-AzResourceGroup -Debug
|
||||
```
|
||||
Om 'n **MitM** op die hulpmiddel te doen en **al die versoeke** wat dit handmatig stuur te kontroleer, kan jy die omgewing veranderlikes `HTTPS_PROXY` en `HTTP_PROXY` instel volgens die [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
|
||||
Om 'n **MitM** op die hulpmiddel te doen en **al die versoeke** wat dit handmatig stuur te kontroleer, kan jy die omgewing veranderlikes `HTTPS_PROXY` en `HTTP_PROXY` instel volgens die [**dokumentasie**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
|
||||
|
||||
### Microsoft Graph PowerShell
|
||||
|
||||
Microsoft Graph PowerShell is 'n kruis-platform SDK wat toegang tot al die Microsoft Graph API's moontlik maak, insluitend dienste soos SharePoint, Exchange, en Outlook, met 'n enkele eindpunt. Dit ondersteun PowerShell 7+, moderne verifikasie via MSAL, eksterne identiteite, en gevorderde navrae. Met 'n fokus op die minste privaatheidstoegang, verseker dit veilige bedrywighede en ontvang gereelde opdaterings om in lyn te wees met die nuutste Microsoft Graph API-funksies.
|
||||
|
||||
Volg hierdie skakel vir die [**installasie instruksies**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation).
|
||||
Volg hierdie skakel vir die [**installasie-instruksies**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation).
|
||||
|
||||
Opdragte in Microsoft Graph PowerShell is gestruktureer soos: `<Action>-Mg<Service> <parameters>`
|
||||
|
||||
#### Foutopsporing Microsoft Graph PowerShell
|
||||
#### Foutopsporing van Microsoft Graph PowerShell
|
||||
|
||||
Met die parameter **`-Debug`** is dit moontlik om al die versoeke wat die hulpmiddel stuur te sien:
|
||||
```bash
|
||||
@@ -123,9 +121,9 @@ Get-MgUser -Debug
|
||||
```
|
||||
### ~~**AzureAD Powershell**~~
|
||||
|
||||
Die Azure Active Directory (AD) module, nou **verouderd**, is deel van Azure PowerShell vir die bestuur van Azure AD hulpbronne. Dit bied cmdlets vir take soos die bestuur van gebruikers, groepe, en toepassingsregistrasies in Entra ID.
|
||||
Die Azure Active Directory (AD) module, nou **verouderd**, is deel van Azure PowerShell vir die bestuur van Azure AD hulpbronne. Dit bied cmdlets vir take soos die bestuur van gebruikers, groepe, en aansoekregistrasies in Entra ID.
|
||||
|
||||
> [!TIP]
|
||||
> Dit is vervang deur Microsoft Graph PowerShell
|
||||
|
||||
Volg hierdie skakel vir die [**installasie instruksies**](https://www.powershellgallery.com/packages/AzureAD).
|
||||
Volg hierdie skakel vir die [**installasie-instruksies**](https://www.powershellgallery.com/packages/AzureAD).
|
||||
|
||||
@@ -10,16 +10,16 @@ Vir meer inligting oor Azure App dienste, kyk:
|
||||
../az-services/az-app-service.md
|
||||
{{#endref}}
|
||||
|
||||
### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read, 
|
||||
### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read
|
||||
|
||||
Hierdie toestemmings laat toe om die volgende opdragte aan te roep om 'n **SSH shell** binne 'n webtoepassing te verkry
|
||||
Hierdie toestemmings laat toe om 'n **SSH shell** binne 'n webtoepassing te kry. Hulle laat ook toe om die toepassing te **debug**.
|
||||
|
||||
- Direkte opsie:
|
||||
- **SSH in een opdrag**:
|
||||
```bash
|
||||
# Direct option
|
||||
az webapp ssh --name <name> --resource-group <res-group>
|
||||
```
|
||||
- Skep tonnel en verbind dan met SSH:
|
||||
- **Skep tonnel en verbind dan met SSH**:
|
||||
```bash
|
||||
az webapp create-remote-connection --name <name> --resource-group <res-group>
|
||||
|
||||
@@ -32,4 +32,249 @@ az webapp create-remote-connection --name <name> --resource-group <res-group>
|
||||
## So from that machine ssh into that port (you might need generate a new ssh session to the jump host)
|
||||
ssh root@127.0.0.1 -p 39895
|
||||
```
|
||||
- **Foutopsporing van die toepassing**:
|
||||
1. Installeer die Azure uitbreiding in VScode.
|
||||
2. Teken in die uitbreiding met die Azure rekening.
|
||||
3. Lys al die App dienste binne die intekening.
|
||||
4. Kies die App diens wat jy wil foutopspoor, regsklik en kies "Begin Foutopsporing".
|
||||
5. As die app nie foutopsporing geaktiveer het nie, sal die uitbreiding probeer om dit te aktiveer, maar jou rekening het die toestemming `Microsoft.Web/sites/config/write` nodig om dit te doen.
|
||||
|
||||
### Verkry SCM Kredensiale & Aktiveer Basiese Verifikasie
|
||||
|
||||
Om die SCM kredensiale te verkry, kan jy die volgende **opdragte en toestemmings** gebruik:
|
||||
|
||||
- Die toestemming **`Microsoft.Web/sites/publishxml/action`** laat toe om te bel:
|
||||
```bash
|
||||
az webapp deployment list-publishing-profiles --name <app-name> --resource-group <res-group>
|
||||
# Example output
|
||||
[
|
||||
{
|
||||
"SQLServerDBConnectionString": "",
|
||||
"controlPanelLink": "https://portal.azure.com",
|
||||
"databases": null,
|
||||
"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net",
|
||||
"hostingProviderForumLink": "",
|
||||
"msdeploySite": "happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"mySQLDBConnectionString": "",
|
||||
"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - Web Deploy",
|
||||
"publishMethod": "MSDeploy",
|
||||
"publishUrl": "happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net:443",
|
||||
"userName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
|
||||
"webSystem": "WebSites"
|
||||
},
|
||||
{
|
||||
"SQLServerDBConnectionString": "",
|
||||
"controlPanelLink": "https://portal.azure.com",
|
||||
"databases": null,
|
||||
"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net",
|
||||
"ftpPassiveMode": "True",
|
||||
"hostingProviderForumLink": "",
|
||||
"mySQLDBConnectionString": "",
|
||||
"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - FTP",
|
||||
"publishMethod": "FTP",
|
||||
"publishUrl": "ftps://waws-prod-yt1-067.ftp.azurewebsites.windows.net/site/wwwroot",
|
||||
"userName": "happy-bay-0d8f842ef57843c89185d452c1cede2a\\$happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
|
||||
"webSystem": "WebSites"
|
||||
},
|
||||
{
|
||||
"SQLServerDBConnectionString": "",
|
||||
"controlPanelLink": "https://portal.azure.com",
|
||||
"databases": null,
|
||||
"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net",
|
||||
"hostingProviderForumLink": "",
|
||||
"mySQLDBConnectionString": "",
|
||||
"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - Zip Deploy",
|
||||
"publishMethod": "ZipDeploy",
|
||||
"publishUrl": "happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net:443",
|
||||
"userName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
|
||||
"webSystem": "WebSites"
|
||||
}
|
||||
]
|
||||
```
|
||||
Let wel dat die **gebruikersnaam altyd dieselfde is** (behalwe in FTP wat die naam van die app aan die begin voeg) maar die **wagwoord is dieselfde** vir almal.
|
||||
|
||||
Boonop is die **SCM URL `<app-name>.scm.azurewebsites.net`**.
|
||||
|
||||
- Die toestemming **`Microsoft.Web/sites/config/list/action`** laat toe om te bel:
|
||||
```bash
|
||||
az webapp deployment list-publishing-credentials --name <app-name> --resource-group <res-group>
|
||||
# Example output
|
||||
{
|
||||
"id": "/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/carlos_rg_3170/providers/Microsoft.Web/sites/happy-bay-0d8f842ef57843c89185d452c1cede2a/publishingcredentials/$happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"kind": null,
|
||||
"location": "Canada Central",
|
||||
"name": "happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"publishingPassword": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
|
||||
"publishingPasswordHash": null,
|
||||
"publishingPasswordHashSalt": null,
|
||||
"publishingUserName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"resourceGroup": "carlos_rg_3170",
|
||||
"scmUri": "https://$happy-bay-0d8f842ef57843c89185d452c1cede2a:bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS@happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net",
|
||||
"type": "Microsoft.Web/sites/publishingcredentials"
|
||||
}
|
||||
```
|
||||
Let op hoe die **bewyse dieselfde is** as in die vorige opdrag.
|
||||
|
||||
- 'n Ander opsie sou wees om **jou eie bewys te stel** en dit te gebruik:
|
||||
```bash
|
||||
az webapp deployment user set \
|
||||
--user-name hacktricks \
|
||||
--password 'W34kP@ssw0rd123!'
|
||||
```
|
||||
Dan kan jy hierdie geloofsbriewe gebruik om **toegang tot die SCM en FTP platforms** te verkry. Dit is ook 'n uitstekende manier om volharding te handhaaf.
|
||||
|
||||
Onthou dat jy om toegang tot die SCM-platform vanaf die **web te verkry, moet jy toegang hê tot `<SCM-URL>/BasicAuth`**.
|
||||
|
||||
> [!WARNING]
|
||||
> Let daarop dat elke gebruiker sy eie geloofsbriewe kan konfigureer deur die vorige opdrag aan te roep, maar as die gebruiker nie genoeg regte het om toegang tot die SCM of FTP te verkry nie, sal die geloofsbriewe nie werk nie.
|
||||
|
||||
- As jy sien dat daardie geloofsbriewe **REDACTED** is, is dit omdat jy **die SCM basiese verifikasie opsie moet aktiveer** en daarvoor het jy die tweede toestemming (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
|
||||
```bash
|
||||
# Enable basic authentication for SCM
|
||||
az rest --method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/basicPublishingCredentialsPolicies/scm?api-version=2022-03-01" \
|
||||
--body '{
|
||||
"properties": {
|
||||
"allow": true
|
||||
}
|
||||
}'
|
||||
|
||||
# Enable basic authentication for FTP
|
||||
az rest --method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/basicPublishingCredentialsPolicies/ftp?api-version=2022-03-01" \
|
||||
--body '{
|
||||
"properties": {
|
||||
"allow": true
|
||||
}
|
||||
}
|
||||
```
|
||||
### Publiseer kode met SCM-akkrediteerings
|
||||
|
||||
Net om geldige SCM-akkrediteerings te hê, is dit moontlik om **kode** na die App-diens te **publiseer**. Dit kan gedoen word met die volgende opdrag.
|
||||
|
||||
Vir hierdie python voorbeeld kan jy die repo aflaai van https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, enige **veranderinge** aanbring wat jy wil en dan **zip dit deur te loop: `zip -r app.zip .`**.
|
||||
|
||||
Dan kan jy die **kode** met die volgende opdrag **publiseer**:
|
||||
```bash
|
||||
curl -X POST "<SMC-URL>/api/publish?type=zip" --data-binary "@./app.zip" -u '<username>:<password>' -H "Content-Type: application/octet-stream"
|
||||
```
|
||||
### Microsoft.Web/sites/publish/Action | SCM geloofsbriewe
|
||||
|
||||
Die genoemde Azure toestemming laat verskeie interessante aksies toe wat ook met die SCM geloofsbriewe uitgevoer kan word:
|
||||
|
||||
- Lees **Webjobs** logs:
|
||||
```bash
|
||||
# Using Azure credentials
|
||||
az rest --method GET --url "<SCM-URL>/vfs/data/jobs/<continuous | triggered>/rev5/job_log.txt" --resource "https://management.azure.com/"
|
||||
az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/rev5/job_log.txt" --resource "https://management.azure.com/"
|
||||
|
||||
# Using SCM username and password:
|
||||
curl "<SCM-URL>/vfs/data/jobs/continuous/job_name/job_log.txt" \
|
||||
--user '<username>:<password>>' -v
|
||||
```
|
||||
- Lees **Webjobs** bronnkode:
|
||||
```bash
|
||||
# Using SCM username and password:
|
||||
# Find all the webjobs inside:
|
||||
curl "<SCM-URL>/wwwroot/App_Data/jobs/" \
|
||||
--user '<username>:<password>'
|
||||
|
||||
# e.g.
|
||||
curl "https://nodewebapp-agamcvhgg3gkd3hs.scm.canadacentral-01.azurewebsites.net/wwwroot/App_Data/jobs/continuous/job_name/rev.js" \
|
||||
--user '<username>:<password>'
|
||||
```
|
||||
- Skep **deurlopende Webjob**:
|
||||
```bash
|
||||
# Using Azure permissions
|
||||
az rest \
|
||||
--method put \
|
||||
--uri "https://windowsapptesting-ckbrg3f0hyc8fkgp.scm.canadacentral-01.azurewebsites.net/api/Continuouswebjobs/reverse_shell" \
|
||||
--headers '{"Content-Disposition": "attachment; filename=\"rev.js\""}' \
|
||||
--body "@/Users/username/Downloads/rev.js" \
|
||||
--resource "https://management.azure.com/"
|
||||
|
||||
# Using SCM credentials
|
||||
curl -X PUT \
|
||||
"<SCM-URL>/api/Continuouswebjobs/reverse_shell2" \
|
||||
-H 'Content-Disposition: attachment; filename=rev.js' \
|
||||
--data-binary "@/Users/carlospolop/Downloads/rev.js" \
|
||||
--user '<username>:<password>'
|
||||
```
|
||||
### Microsoft.Web/sites/config/list/action
|
||||
|
||||
Hierdie toestemming laat toe om die **verbindingstringe** en die **appsettings** van die App-diens te lys, wat sensitiewe inligting soos databasisakkrediteerbes kan bevat.
|
||||
```bash
|
||||
az webapp config connection-string list --name <name> --resource-group <res-group>
|
||||
az webapp config appsettings list --name <name> --resource-group <res-group>
|
||||
```
|
||||
### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
|
||||
|
||||
Hierdie toestemmings laat toe om 'n **bestuurde identiteit** aan die App-diens toe te ken, so as 'n App-diens voorheen gecompromitteer was, sal dit die aanvaller in staat stel om nuwe bestuurde identiteite aan die App-diens toe te ken en **privileges te verhoog** na hulle.
|
||||
```bash
|
||||
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
|
||||
```
|
||||
### Lees Geconfigureerde Derdeparty Kredensiale
|
||||
|
||||
Deur die volgende opdrag uit te voer, is dit moontlik om **die derdeparty kredensiale** wat in die huidige rekening geconfigureer is, te lees. Let daarop dat as daar byvoorbeeld sommige Github-kredensiale in 'n ander gebruiker geconfigureer is, jy nie die token van 'n ander een sal kan toegang nie.
|
||||
```bash
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
|
||||
```
|
||||
Hierdie opdrag gee tokens terug vir Github, Bitbucket, Dropbox en OneDrive.
|
||||
|
||||
Hier is 'n paar opdragvoorbeelde om die tokens te kontroleer:
|
||||
```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
|
||||
```
|
||||
### Update App Code from the source
|
||||
|
||||
- As die gekonfigureerde bron 'n derdeparty verskaffer soos Github, BitBucket of 'n Azure Repository is, kan jy die **kode** van die App diens opdateer deur die bronkode in die repository te kompromitteer.
|
||||
- As die app gekonfigureer is om 'n **remote git repository** (met gebruikersnaam en wagwoord) te gebruik, is dit moontlik om die **URL en basiese auth akrediteerlinge** te kry om te kloon en veranderinge te stoot met:
|
||||
- Met die toestemming **`Microsoft.Web/sites/sourcecontrols/read`**: `az webapp deployment source show --name <app-name> --resource-group <res-group>`
|
||||
- Met die toestemming **`Microsoft.Web/sites/config/list/action`**:
|
||||
- `az webapp deployment list-publishing-credentials --name <app-name> --resource-group <res-group>`
|
||||
- `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`
|
||||
- As die app gekonfigureer is om 'n **local git repository** te gebruik, is dit moontlik om die **repository** te **kloon** en **veranderinge** daaraan te stoot:
|
||||
- Met die toestemming **`Microsoft.Web/sites/sourcecontrols/read`**: Jy kan die URL van die git repo kry met `az webapp deployment source show --name <app-name> --resource-group <res-group>`, maar dit gaan dieselfde wees as die SCM URL van die app met die pad `/<app-name>.git` (bv. `https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`).
|
||||
- Om die SCM akrediteerling te kry, het jy die toestemming nodig:
|
||||
- **`Microsoft.Web/sites/publishxml/action`**: Dan voer `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>` uit.
|
||||
- **`Microsoft.Web/sites/config/list/action`**: Dan voer `az webapp deployment list-publishing-credentials --name <name> --resource-group <res-group>` uit.
|
||||
|
||||
> [!WARNING]
|
||||
> Let daarop dat dit, met die toestemming `Microsoft.Web/sites/config/list/action` en die SCM akrediteerlinge, altyd moontlik is om in 'n webapp te ontplooi (selfs al is dit gekonfigureer om 'n derdeparty verskaffer te gebruik) soos in 'n vorige afdeling genoem.
|
||||
|
||||
> [!WARNING]
|
||||
> Let daarop dat dit, met die onderstaande toestemmings, ook **moontlik is om 'n arbitrêre houer uit te voer** selfs al is die webapp anders gekonfigureer.
|
||||
|
||||
### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read`
|
||||
|
||||
Dit is die stel toestemmings wat toelaat om die **houer wat gebruik word** deur 'n webapp te **wysig**. 'n Aanvaller kan dit misbruik om 'n webapp 'n kwaadwillige houer te laat uitvoer.
|
||||
```bash
|
||||
az webapp config container set \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group> \
|
||||
--docker-custom-image-name mcr.microsoft.com/appsvc/staticsite:latest
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,34 +4,83 @@
|
||||
|
||||
## App Service Basiese Inligting
|
||||
|
||||
Azure App Services stel ontwikkelaars in staat om **webtoepassings, mobiele toepassings agtergronde en API's naatloos te bou, te ontplooi en te skaal**. Dit ondersteun verskeie programmeertale en integreer met verskeie Azure gereedskap en dienste vir verbeterde funksionaliteit en bestuur.
|
||||
Azure App Services stel ontwikkelaars in staat om **webtoepassings, mobiele toepassings agtergronde, en API's naatloos te bou, te ontplooi en te skaal**. Dit ondersteun verskeie programmeertale en integreer met verskeie Azure gereedskap en dienste vir verbeterde funksionaliteit en bestuur.
|
||||
|
||||
Elke app loop binne 'n sandbox, maar isolasie hang af van App Service planne
|
||||
Elke app loop binne 'n sandbox, maar isolasie hang af van App Service planne.
|
||||
|
||||
- Apps in Gratis en Gedeelde vlakke loop op gedeelde VM's
|
||||
- Apps in Standaard en Premium vlakke loop op toegewyde VM's
|
||||
- Apps in Gratis en Gedeelde vlakke loop op gedeelde VM's.
|
||||
- Apps in Standaard en Premium vlakke loop op toegewyde VM's.
|
||||
|
||||
> [!WARNING]
|
||||
> Let daarop dat **geen** van daardie isolasies **voorkom** dat ander algemene **web kwesbaarhede** (soos lêeroplaai of inspuitings) voorkom nie. En as 'n **bestuursidentiteit** gebruik word, kan dit in staat wees om **privileges na hulle te verhoog**.
|
||||
> Let daarop dat **geen** van daardie isolasies **voorkom** dat ander algemene **web kwesbaarhede** (soos lêeroplaai of inspuitings) voorkom nie. En as 'n **bestuursidentiteit** gebruik word, kan dit in staat wees om **regte na hulle op te skaal**.
|
||||
|
||||
### Azure Funksie Apps
|
||||
Apps het 'n paar interessante konfigurasies:
|
||||
|
||||
Basies **Azure Funksie apps is 'n substel van Azure App Service** in die web en as jy na die webkonsol gaan en al die app dienste lys of `az webapp list` in az cli uitvoer, sal jy in staat wees om **die Funksie apps ook hier gelys te sien**.
|
||||
|
||||
Werklik, sommige van die **veiligheidsverwante kenmerke** wat App dienste gebruik (`webapp` in die az cli), word **ook deur Funksie apps gebruik**.
|
||||
- **Altijd Aan**: Verseker dat die app altyd loop. As dit nie geaktiveer is nie, sal die app stop loop na 20 minute van inaktiwiteit en sal dit weer begin wanneer 'n versoek ontvang word.
|
||||
- Dit is noodsaaklik as jy 'n webjob het wat deurlopend moet loop, aangesien die webjob sal stop as die app stop.
|
||||
- **SSH**: As geaktiveer, kan 'n gebruiker met genoeg regte aan die app koppel met SSH.
|
||||
- **Foutopsporing**: As geaktiveer, kan 'n gebruiker met genoeg regte die app foutopspoor. Dit is egter elke 48 uur outomaties gedeaktiveer.
|
||||
- **Web App + Databasis**: Die webkonsol laat jou toe om 'n App met 'n databasis te skep. In hierdie geval is dit moontlik om die databasis te kies om te gebruik (SQLAzure, PostgreSQL, MySQL, MongoDB) en dit laat jou ook toe om 'n Azure Cache vir Redis te skep.
|
||||
- Die URL wat die geloofsbriewe vir die databasis en Redis bevat, sal in die **appsettings** gestoor word.
|
||||
- **Container**: Dit is moontlik om 'n houer na die App Service te ontplooi deur die URL van die houer en die geloofsbriewe om toegang te verkry aan te dui.
|
||||
|
||||
## Basiese Verifikasie
|
||||
|
||||
Wanneer 'n web app (en 'n Azure funksie gewoonlik) geskep word, is dit moontlik om aan te dui of jy wil hê dat Basiese Verifikasie geaktiveer moet word. Dit stel basies **SCM en FTP** vir die toepassing in, sodat dit moontlik sal wees om die toepassing met behulp van daardie tegnologieë te ontplooi.\
|
||||
Boonop, om met hulle te verbind, bied Azure 'n **API wat toelaat om die gebruikersnaam, wagwoord en URL** te verkry om met die SCM en FTP bedieners te verbind.
|
||||
Wanneer 'n webapp (en 'n Azure funksie gewoonlik) geskep word, is dit moontlik om aan te dui of jy wil hê Basiese Verifikasie moet geaktiveer wees. Dit stel basies **SCM en FTP** vir die toepassing in, sodat dit moontlik sal wees om die toepassing met behulp van daardie tegnologieë te ontplooi.\
|
||||
Boonop bied Azure 'n **API wat toelaat om die gebruikersnaam, wagwoord en URL** te verkry om aan die SCM en FTP bedieners te koppel.
|
||||
|
||||
- Verifikasie: az webapp auth show --name lol --resource-group lol_group
|
||||
Dit is moontlik om aan die SCM te koppel met 'n webblaaier in `https://<SMC-URL>/BasicAuth` en al die lêers en ontplooiings daar te kontroleer.
|
||||
|
||||
SSH
|
||||
### Kudu
|
||||
|
||||
Altijd Aan
|
||||
Kudu is 'n **ontplooiing en bestuursplatform vir Azure App Service en Funksie Apps**, wat Git-gebaseerde ontplooiings, afstands-foutopsporing, en lêerbestuur vermoëns vir webtoepassings bied. Dit is toeganklik deur die SCM URL van die webapp.
|
||||
|
||||
Foutopsporing
|
||||
Let daarop dat die Kudu weergawes wat deur App Services en deur Funksie Apps gebruik word, verskillend is, met die weergawe van die Funksie apps baie meer beperk.
|
||||
|
||||
Sommige interessante eindpunte wat jy in Kudu kan vind, is:
|
||||
- `/DebugConsole`: 'n konsol wat jou toelaat om opdragte in die omgewing waar Kudu loop, uit te voer.
|
||||
- Let daarop dat hierdie omgewing **nie toegang het** tot die metadata diens om tokens te verkry nie.
|
||||
- `/webssh/host`: 'n web-gebaseerde SSH kliënt wat jou toelaat om binne die houer waar die app loop, te koppel.
|
||||
- Hierdie omgewing **het toegang tot die metadata diens** om tokens van die toegewyde bestuurde identiteite te verkry.
|
||||
- `/Env`: Verkry inligting oor die stelsel, app instellings, omgewing veranderlikes, verbinding stringe en HTTP koppe.
|
||||
- `/wwwroot/`: Die wortelgids van die webapp. Jy kan al die lêers hier aflaai.
|
||||
|
||||
## Bronne
|
||||
|
||||
App Services laat toe om die kode as 'n zip-lêer op te laai, maar dit laat ook toe om aan 'n derdeparty diens te koppel en die kode daar te verkry.
|
||||
|
||||
- Die tans ondersteunde derdeparty bronne is **Github** en **Bitbucket**.
|
||||
- Jy kan die verifikasietokens verkry deur `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"` te loop.
|
||||
- Azure sal standaard 'n **Github Aksie** opstel om die kode na die App Service te ontplooi elke keer as die kode opgedateer word.
|
||||
- Dit is ook moontlik om 'n **afgeleë git-repo** (met gebruikersnaam en wagwoord) aan te dui om die kode daar te verkry.
|
||||
- Jy kan die geloofsbriewe na die afgeleë repo verkry deur `az webapp deployment source show --name <app-name> --resource-group <res-group>` of `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"` te loop.
|
||||
- Dit is ook moontlik om 'n **Azure Repository** te gebruik.
|
||||
- Dit is ook moontlik om 'n **lokale git-repo** te konfigureer.
|
||||
- Jy kan die URL van die git-repo verkry met `az webapp deployment source show --name <app-name> --resource-group <res-group>` en dit gaan die SCM URL van die app wees.
|
||||
- Om dit te kloon, sal jy die SCM geloofsbriewe nodig hê wat jy kan verkry met `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`.
|
||||
|
||||
## Webjobs
|
||||
|
||||
Azure WebJobs is **agtergrondtake wat in die Azure App Service omgewing loop**. Dit stel ontwikkelaars in staat om skripte of programme saam met hul webtoepassings uit te voer, wat dit makliker maak om asynchrone of tydsintensiewe operasies soos lêerverwerking, datahantering, of geskeduleerde take te hanteer.
|
||||
Daar is 2 tipes webjobs:
|
||||
- **Deurlopend**: Loop eindeloos in 'n lus en word geaktiveer sodra dit geskep word. Dit is ideaal vir take wat konstante verwerking vereis. As die app egter stop loop omdat Altijd Aan gedeaktiveer is en dit nie 'n versoek in die laaste 20 minute ontvang het nie, sal die webjob ook stop.
|
||||
- **Geaktiveer**: Loop op aanvraag of gebaseer op 'n skedule. Dit is die beste geskik vir periodieke take, soos batch data-opdaterings of onderhoudsroetines.
|
||||
|
||||
Webjobs is baie interessant vanuit 'n aanvallers perspektief, aangesien dit gebruik kan word om **kode** in die omgewing uit te voer en **regte op te skaal** na die aangehegte bestuurde identiteite.
|
||||
|
||||
Boonop is dit altyd interessant om die **logs** wat deur die Webjobs gegenereer word, na te gaan, aangesien dit **sensitiewe inligting** kan bevat.
|
||||
|
||||
### Slots
|
||||
|
||||
Azure App Service Slots word gebruik om **verskillende weergawes van die toepassing** na dieselfde App Service te ontplooi. Dit stel ontwikkelaars in staat om nuwe funksies of veranderinge in 'n aparte omgewing te toets voordat hulle dit na die produksie omgewing ontplooi.
|
||||
|
||||
Boonop is dit moontlik om 'n **persentasie van die verkeer** na 'n spesifieke slot te lei, wat nuttig is vir **A/B toetsing**, en vir agterdeurdoeleindes.
|
||||
|
||||
### Azure Funksie Apps
|
||||
|
||||
Basies **Azure Funksie apps is 'n subset van Azure App Service** in die web en as jy na die webkonsol gaan en al die app dienste lys of `az webapp list` in az cli uitvoer, sal jy in staat wees om **die Funksie apps ook hier gelys te sien**.
|
||||
|
||||
Werklik, sommige van die **veiligheidsverwante funksies** wat App services gebruik (`webapp` in die az cli), word **ook deur Funksie apps gebruik**.
|
||||
|
||||
### Enumerasie
|
||||
|
||||
@@ -40,9 +89,10 @@ Foutopsporing
|
||||
```bash
|
||||
# List webapps
|
||||
az webapp list
|
||||
|
||||
## Less information
|
||||
az webapp list --query "[].{hostName: defaultHostName, state: state, name: name, resourcegroup: resourceGroup}"
|
||||
az webapp list --query "[].{hostName: defaultHostName, state: state, name: name, resourcegroup: resourceGroup}" -o table
|
||||
## Get SCM URL of each webapp
|
||||
az webapp list | grep '"name"' | grep "\.scm\." | awk '{print $2}' | sed 's/"//g'
|
||||
|
||||
# Get info about 1 app
|
||||
az webapp show --name <name> --resource-group <res-group>
|
||||
@@ -51,18 +101,24 @@ az webapp show --name <name> --resource-group <res-group>
|
||||
az webapp list-instances --name <name> --resource-group <res-group>
|
||||
## If you have enough perm you can go to the "consoleUrl" and access a shell inside the instance form the web
|
||||
|
||||
# Get configured Auth information
|
||||
az webapp auth show --name <app-name> --resource-group <res-group>
|
||||
|
||||
# Get access restrictions of an app
|
||||
az webapp config access-restriction show --name <name> --resource-group <res-group>
|
||||
|
||||
# Remove access restrictions
|
||||
az webapp config access-restriction remove --resource-group <res-group> -n <name> --rule-name <rule-name>
|
||||
|
||||
# Get connection strings of a webapp
|
||||
az webapp config connection-string list --name <name> --resource-group <res-group>
|
||||
|
||||
# Get appsettings of an app
|
||||
az webapp config appsettings list --name <name> --resource-group <res-group>
|
||||
|
||||
# Get SCM and FTP credentials
|
||||
az webapp deployment list-publishing-profiles --name <name> --resource-group <res-group>
|
||||
|
||||
# Get configured Auth information
|
||||
az webapp auth show --name <app-name> --resource-group <res-group>
|
||||
|
||||
# Get backups of a webapp
|
||||
az webapp config backup list --webapp-name <name> --resource-group <res-group>
|
||||
|
||||
@@ -75,61 +131,39 @@ az webapp config snapshot list --resource-group <res-group> -n <name>
|
||||
# Restore snapshot
|
||||
az webapp config snapshot restore -g <res-group> -n <name> --time 2018-12-11T23:34:16.8388367
|
||||
|
||||
# Get connection strings of a webapp
|
||||
az webapp config connection-string list --name <name> --resource-group <res-group>
|
||||
# Get slots
|
||||
az webapp deployment slot list --name <AppName> --resource-group <ResourceGroupName> --output table
|
||||
az webapp show --slot <SlotName> --name <AppName> --resource-group <ResourceGroupName>
|
||||
|
||||
# Get traffic-routing
|
||||
az webapp traffic-routing show --name <AppName> --resource-group <ResourceGroupName>
|
||||
|
||||
# Get used container by the app
|
||||
az webapp config container show --name <name> --resource-group <res-group>
|
||||
|
||||
# Get storage account configurations of a webapp
|
||||
az webapp config storage-account list --name <name> --resource-gl_group
|
||||
az webapp config storage-account list --name <name> --resource-group <res-group>
|
||||
|
||||
# Get configured container (if any) in the webapp, it could contain credentials
|
||||
az webapp config container show --name <name> --resource-group <res-group>
|
||||
|
||||
# Get Webjobs
|
||||
az webapp webjob continuous list --resource-group <res-group> --name <app-name>
|
||||
az webapp webjob triggered list --resource-group <res-group> --name <app-name>
|
||||
|
||||
# Read webjobs logs with Azure permissions
|
||||
az rest --method GET --url "<SCM-URL>/vfs/data/jobs/<continuous | triggered>/rev5/job_log.txt" --resource "https://management.azure.com/"
|
||||
az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/rev5/job_log.txt" --resource "https://management.azure.com/"
|
||||
|
||||
# List all the functions
|
||||
az functionapp list
|
||||
# Read webjobs logs with SCM credentials
|
||||
curl "https://windowsapptesting-ckbrg3f0hyc8fkgp.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/lala/job_log.txt" \
|
||||
--user '<username>:<password>' -v
|
||||
|
||||
# Get info of 1 funciton (although in the list you already get this info)
|
||||
az functionapp show --name <app-name> --resource-group <res-group>
|
||||
## If "linuxFxVersion" has something like: "DOCKER|mcr.microsoft.com/..."
|
||||
## This is using a container
|
||||
# Get connections of a webapp
|
||||
az webapp conection list --name <name> --resource-group <res-group>
|
||||
|
||||
# Get details about the source of the function code
|
||||
az functionapp deployment source show \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group>
|
||||
## If error like "This is currently not supported."
|
||||
## Then, this is probalby using a container
|
||||
|
||||
# Get more info if a container is being used
|
||||
az functionapp config container show \
|
||||
--name <name> \
|
||||
--resource-group <res-group>
|
||||
|
||||
# Get settings (and privesc to the sorage account)
|
||||
az functionapp config appsettings list --name <app-name> --resource-group <res-group>
|
||||
|
||||
# Check if a domain was assigned to a function app
|
||||
az functionapp config hostname list --webapp-name <app-name> --resource-group <res-group>
|
||||
|
||||
# Get SSL certificates
|
||||
az functionapp config ssl list --resource-group <res-group>
|
||||
|
||||
# Get network restrictions
|
||||
az functionapp config access-restriction show --name <app-name> --resource-group <res-group>
|
||||
|
||||
# Get more info about a function (invoke_url_template is the URL to invoke and script_href allows to see the code)
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions?api-version=2024-04-01"
|
||||
|
||||
# Get source code with Master Key of the function
|
||||
curl "<script_href>?code=<master-key>"
|
||||
## Python example
|
||||
curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=<master-key>" -v
|
||||
|
||||
# Get source code
|
||||
az rest --url "https://management.azure.com/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
|
||||
# Get hybrid-connections of a webapp
|
||||
az webapp hybrid-connections list --name <name> --resource-group <res-group>
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -196,6 +230,40 @@ git clone 'https://<username>:<password>@name.scm.azurewebsites.net/repo-name.gi
|
||||
../az-privilege-escalation/az-app-services-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Voorbeelde om Web Apps te genereer
|
||||
|
||||
### Python van plaaslik
|
||||
|
||||
Hierdie tutoriaal is gebaseer op die een van [https://learn.microsoft.com/en-us/azure/app-service/quickstart-python](https://learn.microsoft.com/en-us/azure/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Cazure-cli-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli).
|
||||
```bash
|
||||
# Clone repository
|
||||
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
|
||||
cd msdocs-python-flask-webapp-quickstart
|
||||
|
||||
# Create webapp from this code
|
||||
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
|
||||
```
|
||||
Inloggen op die SCM-portaal of inloggen via FTP maak dit moontlik om in `/wwwroot` die gecomprimeerde lêer `output.tar.gz` te sien wat die kode van die webapp bevat.
|
||||
|
||||
> [!TIP]
|
||||
> Net om via FTP te verbind en die lêer `output.tar.gz` te wysig, is nie genoeg om die kode wat deur die webapp uitgevoer word, te verander nie.
|
||||
|
||||
**'n Aanvaller kan hierdie lêer aflaai, dit wysig en dit weer oplaai om arbitrêre kode in die webapp uit te voer.**
|
||||
|
||||
### Python van Github
|
||||
|
||||
Hierdie tutoriaal is gebaseer op die vorige een, maar gebruik 'n Github-bewaarplek.
|
||||
|
||||
1. Fork die repo msdocs-python-flask-webapp-quickstart in jou Github-rekening.
|
||||
2. Skep 'n nuwe python Web App in Azure.
|
||||
3. In `Deployment Center` verander die bron, log in met Github, kies die geforkte repo en klik `Save`.
|
||||
|
||||
Soos in die vorige geval, maak dit moontlik om in `/wwwroot` die gecomprimeerde lêer `output.tar.gz` te sien wat die kode van die webapp bevat.
|
||||
|
||||
> [!TIP]
|
||||
> Net om via FTP te verbind en die lêer `output.tar.gz` te wysig en 'n ontplooiing weer te aktiveer, is nie genoeg om die kode wat deur die webapp uitgevoer word, te verander nie.
|
||||
|
||||
|
||||
## Verwysings
|
||||
|
||||
- [https://learn.microsoft.com/en-in/azure/app-service/overview](https://learn.microsoft.com/en-in/azure/app-service/overview)
|
||||
|
||||
Reference in New Issue
Block a user