diff --git a/.gitignore b/.gitignore
index 8d12fbb76..9e7a262f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,3 +34,4 @@ Temporary Items
book
book/*
hacktricks-preprocessor.log
+hacktricks-preprocessor-error.log
diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py
index 0077da80f..af5949449 100644
--- a/hacktricks-preprocessor.py
+++ b/hacktricks-preprocessor.py
@@ -7,7 +7,14 @@ from os import path
from urllib.request import urlopen, Request
logger = logging.getLogger(__name__)
-logging.basicConfig(filename='hacktricks-preprocessor.log', filemode='w', encoding='utf-8', level=logging.DEBUG)
+logger.setLevel(logging.DEBUG)
+handler = logging.FileHandler(filename='hacktricks-preprocessor.log', mode='w', encoding='utf-8')
+handler.setLevel(logging.DEBUG)
+logger.addHandler(handler)
+
+handler2 = logging.FileHandler(filename='hacktricks-preprocessor-error.log', mode='w', encoding='utf-8')
+handler2.setLevel(logging.ERROR)
+logger.addHandler(handler2)
def findtitle(search ,obj, key, path=(),):
@@ -45,19 +52,29 @@ def ref(matchobj):
try:
if href.endswith("/"):
href = href+"README.md" # Fix if ref points to a folder
- chapter, _path = findtitle(href, book, "source_path")
- logger.debug(f'Recursive title search result: {chapter["name"]}')
- title = chapter['name']
+ if "#" in href:
+ chapter, _path = findtitle(href.split("#")[0], book, "source_path")
+ title = " ".join(href.split("#")[1].split("-")).title()
+ logger.debug(f'Ref has # using title: {title}')
+ else:
+ chapter, _path = findtitle(href, book, "source_path")
+ logger.debug(f'Recursive title search result: {chapter["name"]}')
+ title = chapter['name']
except Exception as e:
try:
dir = path.dirname(current_chapter['source_path'])
logger.debug(f'Error getting chapter title: {href} trying with relative path {path.normpath(path.join(dir,href))}')
- chapter, _path = findtitle(path.normpath(path.join(dir,href)), book, "source_path")
- logger.debug(f'Recursive title search result: {chapter["name"]}')
- title = chapter['name']
+ if "#" in href:
+ chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
+ title = " ".join(href.split("#")[1].split("-")).title()
+ logger.debug(f'Ref has # using title: {title}')
+ else:
+ chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
+ title = chapter["name"]
+ logger.debug(f'Recursive title search result: {chapter["name"]}')
except Exception as e:
- logger.debug(f'Error getting chapter title: {path.normpath(path.join(dir,href))}')
- print(f'Error getting chapter title: {path.normpath(path.join(dir,href))}')
+ logger.debug(e)
+ logger.error(f'Error getting chapter title: {path.normpath(path.join(dir,href))}')
sys.exit(1)
@@ -85,13 +102,11 @@ def files(matchobj):
except Exception as e:
logger.debug(e)
- logger.debug(f'Error searching file: {href}')
- print(f'Error searching file: {href}')
+ logger.error(f'Error searching file: {href}')
sys.exit(1)
if title=="":
- logger.debug(f'Error searching file: {href}')
- print(f'Error searching file: {href}')
+ logger.error(f'Error searching file: {href}')
sys.exit(1)
template = f"""{title}"""
@@ -134,10 +149,11 @@ if __name__ == '__main__':
for chapter in iterate_chapters(book['sections']):
logger.debug(f"Chapter: {chapter['path']}")
current_chapter = chapter
- regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
+ # regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
+ regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n#]*(?:#(.*))?)(?:\n)?{{[\s]*#endref[\s]*}}'
new_content = re.sub(regex, ref, chapter['content'])
regex = r'{{[\s]*#file[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endfile[\s]*}}'
- new_content = re.sub(regex, files, chapter['content'])
+ new_content = re.sub(regex, files, new_content)
new_content = add_read_time(new_content)
chapter['content'] = new_content
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md
index 7c7e7b3c3..f4abd2262 100644
--- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md
+++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md
@@ -59,12 +59,12 @@ Dakle, ako imate dozvole navedene za ove fajlove, postoji vektorski napad koji v
Pratite opis u sekciji *Zloupotreba Terraform State Fajlova* na stranici *Terraform Security* za direktno upotrebljiv kod za eksploataciju:
{{#ref}}
-terraform-security.md#abusing-terraform-state-files
+pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files
{{#endref}}
### `s3:PutBucketPolicy`
-Napadač, koji treba da bude **iz istog naloga**, inače će se aktivirati greška `The specified method is not allowed`, sa ovom dozvolom će moći da sebi dodeli više dozvola nad bucket-ima omogućavajući mu da čita, piše, modifikuje, briše i izlaže buckete.
+Napadač, koji mora biti **iz istog naloga**, inače će se aktivirati greška `The specified method is not allowed`, sa ovom dozvolom će moći da sebi dodeli više dozvola nad bucket-ima omogućavajući mu da čita, piše, modifikuje, briše i izlaže buckete.
```bash
# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket
@@ -123,7 +123,7 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket
diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md
index c57a271fa..827771b0c 100644
--- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md
+++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md
@@ -7,12 +7,12 @@
Za više informacija o Azure App uslugama, proverite:
{{#ref}}
-../az-services/az-app-service.md
+../az-services/az-app-services.md
{{#endref}}
### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read
-Ove dozvole omogućavaju pristup **SSH shell-u** unutar web aplikacije. Takođe omogućavaju **debug** aplikacije.
+Ove dozvole omogućavaju pristup **SSH shell** unutar web aplikacije. Takođe omogućavaju **debug** aplikacije.
- **SSH u jednoj komandi**:
```bash
@@ -32,16 +32,16 @@ az webapp create-remote-connection --name --resource-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
```
-- **Debug the application**:
+- **Debugujte aplikaciju**:
1. Instalirajte Azure ekstenziju u VScode.
2. Prijavite se u ekstenziju sa Azure nalogom.
3. Prikazujte sve App usluge unutar pretplate.
-4. Izaberite App uslugu koju želite da debagujete, kliknite desnim tasterom i izaberite "Start Debugging".
-5. Ako aplikacija nema omogućeno debagovanje, ekstenzija će pokušati da ga omogući, ali vaš nalog treba da ima dozvolu `Microsoft.Web/sites/config/write` da bi to uradio.
+4. Izaberite App uslugu koju želite da debugujete, desni klik i izaberite "Start Debugging".
+5. Ako aplikacija nema omogućeno debugovanje, ekstenzija će pokušati da ga omogući, ali vaš nalog treba da ima dozvolu `Microsoft.Web/sites/config/write` da bi to uradio.
-### Obtaining SCM Credentials & Enabling Basic Authentication
+### Dobijanje SCM kredencijala i omogućavanje osnovne autentifikacije
-Da biste dobili SCM akreditive, možete koristiti sledeće **komande i dozvole**:
+Da biste dobili SCM kredencijale, možete koristiti sledeće **komande i dozvole**:
- Dozvola **`Microsoft.Web/sites/publishxml/action`** omogućava pozivanje:
```bash
@@ -124,14 +124,14 @@ az webapp deployment user set \
--user-name hacktricks \
--password 'W34kP@ssw0rd123!'
```
-Zatim, možete koristiti ove kredencijale da **pristupite SCM i FTP platformama**. Ovo je takođe odličan način da održite postojanost.
+Zatim, možete koristiti ove kredencijale da **pristupite SCM i FTP platformama**. Ovo je takođe odličan način za održavanje postojanosti.
Zapamtite da za pristup SCM platformi sa **veb-a morate pristupiti `/BasicAuth`**.
> [!WARNING]
-> Imajte na umu da svaki korisnik može konfigurisati svoje kredencijale pozivajući prethodnu komandu, ali ako korisnik nema dovoljno dozvola za pristup SCM-u ili FTP-u, kredencijali neće raditi.
+> Imajte na umu da svaki korisnik može konfigurisati svoje kredencijale pozivajući prethodnu komandu, ali ako korisnik nema dovoljno dozvola za pristup SCM ili FTP, kredencijali neće raditi.
-- Ako vidite da su ti kredencijali **REDAKTOVANI**, to je zato što **morate omogućiti opciju osnovne autentifikacije SCM** i za to vam je potrebna druga dozvola (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`):
+- Ako vidite da su ti kredencijali **REDAKTOVANI**, to je zato što **morate omogućiti opciju osnovne autentifikacije za SCM** i za to vam je potrebna druga dozvola (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`):
```bash
# Enable basic authentication for SCM
az rest --method PUT \
@@ -216,7 +216,7 @@ Ova dozvola omogućava listanje **connection strings** i **appsettings** usluge
az webapp config connection-string list --name --resource-group
az webapp config appsettings list --name --resource-group
```
-### Pročitajte Konfigurisane Akreditive Treće Strane
+### Pročitajte Konfigurisane Treće Strane Akreditive
Pokretanjem sledeće komande moguće je **pročitati akreditive treće strane** konfigurisane u trenutnom nalogu. Imajte na umu da, na primer, ako su neki Github akreditive konfigurisani za drugog korisnika, nećete moći da pristupite tokenu iz drugog.
```bash
@@ -250,13 +250,13 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
```
### Ažurirajte kod aplikacije iz izvora
-- Ako je konfigurisani izvor treća strana kao što su Github, BitBucket ili Azure Repository, možete **ažurirati kod** usluge aplikacije kompromitovanjem izvornog koda u repozitorijumu.
-- Ako je aplikacija konfigurisana koristeći **daljinski git repozitorijum** (sa korisničkim imenom i lozinkom), moguće je dobiti **URL i osnovne autentifikacione podatke** za kloniranje i slanje izmena sa:
+- Ako je konfigurisan izvor treće strane kao što su Github, BitBucket ili Azure Repository, možete **ažurirati kod** usluge aplikacije kompromitovanjem izvornog koda u repozitorijumu.
+- Ako je aplikacija konfigurisana koristeći **daljinski git repozitorij** (sa korisničkim imenom i lozinkom), moguće je dobiti **URL i osnovne autentifikacione podatke** za kloniranje i slanje izmena sa:
- Koristeći dozvolu **`Microsoft.Web/sites/sourcecontrols/read`**: `az webapp deployment source show --name --resource-group `
- Koristeći dozvolu **`Microsoft.Web/sites/config/list/action`**:
- `az webapp deployment list-publishing-credentials --name --resource-group `
- `az rest --method POST --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`
-- Ako je aplikacija konfigurisana da koristi **lokalni git repozitorijum**, moguće je **klonirati repozitorijum** i **slati izmene** u njega:
+- Ako je aplikacija konfigurisana da koristi **lokalni git repozitorij**, moguće je **klonirati repozitorij** i **slati izmene** u njega:
- Koristeći dozvolu **`Microsoft.Web/sites/sourcecontrols/read`**: Možete dobiti URL git repozitorijuma sa `az webapp deployment source show --name --resource-group `, ali će to biti isto kao SCM URL aplikacije sa putanjom `/.git` (npr. `https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`).
- Da biste dobili SCM akreditive, potrebna vam je dozvola:
- **`Microsoft.Web/sites/publishxml/action`**: Zatim pokrenite `az webapp deployment list-publishing-profiles --resource-group -n `.
@@ -270,7 +270,7 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read`
-Ovo je skup dozvola koje omogućavaju **modifikaciju kontejnera koji se koristi** od strane webapp-a. Napadač bi mogao da zloupotrebi to da natera webapp da izvrši zlonamerni kontejner.
+Ovo je skup dozvola koji omogućava **modifikaciju kontejnera koji se koristi** od strane webapp-a. Napadač bi mogao da zloupotrebi to da natera webapp da izvrši zlonamerni kontejner.
```bash
az webapp config container set \
--name \
diff --git a/src/pentesting-cloud/azure-security/az-services/az-function-apps.md b/src/pentesting-cloud/azure-security/az-services/az-function-apps.md
index f109e2b82..69516c5f7 100644
--- a/src/pentesting-cloud/azure-security/az-services/az-function-apps.md
+++ b/src/pentesting-cloud/azure-security/az-services/az-function-apps.md
@@ -2,51 +2,51 @@
{{#include ../../../banners/hacktricks-training.md}}
-## Osnovne Informacije
+## Osnovne informacije
-**Azure Function Apps** su **serverless compute service** koje vam omogućavaju da pokrećete male delove koda, nazvane **functions**, bez upravljanja osnovnom infrastrukturom. Dizajnirane su da izvršavaju kod kao odgovor na različite okidače, kao što su **HTTP zahtevi, tajmeri ili događaji iz drugih Azure servisa** poput Blob Storage ili Event Hubs. Function Apps podržavaju više programskih jezika, uključujući C#, Python, JavaScript i Java, što ih čini svestranim za izgradnju **event-driven applications**, automatizaciju radnih tokova ili integraciju servisa. Ekonomične su, jer obično plaćate samo za vreme obrade kada se vaš kod izvršava.
+**Azure Function Apps** su **serverless compute service** koje vam omogućavaju da pokrećete male delove koda, nazvane **functions**, bez upravljanja osnovnom infrastrukturom. Dizajnirane su da izvršavaju kod kao odgovor na različite okidače, kao što su **HTTP zahtevi, tajmeri ili događaji iz drugih Azure servisa** poput Blob Storage ili Event Hubs. Function Apps podržavaju više programskih jezika, uključujući C#, Python, JavaScript i Java, što ih čini svestranim za izgradnju **aplikacija vođenih događajima**, automatizaciju radnih tokova ili integraciju servisa. Troškovi su efikasni, jer obično plaćate samo vreme obrade kada se vaš kod izvršava.
> [!NOTE]
> Imajte na umu da su **Functions podskup App Services**, stoga će mnoge funkcije o kojima se ovde govori koristiti i aplikacije kreirane kao Azure Apps (`webapp` u cli).
-### Različiti Planovi
+### Različiti planovi
-- **Flex Consumption Plan**: Nudi **dinamičko, event-driven skaliranje** sa plaćanjem po korišćenju, dodajući ili uklanjajući instance funkcija na osnovu potražnje. Podržava **virtual networking** i **pre-provisioned instances** kako bi se smanjili hladni startovi, što ga čini pogodnim za **varijabilne radne opterećenja** koja ne zahtevaju podršku kontejnera.
-- **Traditional Consumption Plan**: Podrazumevani serverless izbor, gde **plaćate samo za resurse obrade kada funkcije rade**. Automatski se skalira na osnovu dolaznih događaja i uključuje **optimizacije hladnog starta**, ali ne podržava implementacije kontejnera. Idealno za **intermittent workloads** koje zahtevaju automatsko skaliranje.
-- **Premium Plan**: Dizajniran za **dosledne performanse**, sa **prewarmed workers** kako bi se eliminisali hladni startovi. Nudi **produžene vreme izvršenja, virtual networking**, i podržava **custom Linux images**, što ga čini savršenim za **mission-critical applications** koje zahtevaju visoke performanse i napredne funkcije.
-- **Dedicated Plan**: Radi na posvećenim virtuelnim mašinama sa **predvidljivim naplatama** i podržava ručno ili automatsko skaliranje. Omogućava pokretanje više aplikacija na istom planu, pruža **compute isolation**, i osigurava **siguran pristup mreži** putem App Service Environments, što ga čini idealnim za **long-running applications** koje zahtevaju doslednu alokaciju resursa.
-- **Container Apps**: Omogućava implementaciju **containerized function apps** u upravljanom okruženju, zajedno sa mikroservisima i API-ima. Podržava prilagođene biblioteke, migraciju nasleđenih aplikacija, i **GPU processing**, eliminišući upravljanje Kubernetes klasterima. Idealno za **event-driven, scalable containerized applications**.
+- **Flex Consumption Plan**: Nudi **dinamičko, događajima vođeno skaliranje** sa plaćanjem po korišćenju, dodajući ili uklanjajući instance funkcija na osnovu potražnje. Podržava **virtuelno umrežavanje** i **pre-provisioned instances** kako bi se smanjili hladni startovi, što ga čini pogodnim za **varijabilne radne opterećenja** koja ne zahtevaju podršku kontejnera.
+- **Traditional Consumption Plan**: Podrazumevani serverless izbor, gde **plaćate samo za resurse obrade kada funkcije rade**. Automatski se skalira na osnovu dolaznih događaja i uključuje **optimizacije hladnog starta**, ali ne podržava implementacije kontejnera. Idealno za **povremena radna opterećenja** koja zahtevaju automatsko skaliranje.
+- **Premium Plan**: Dizajniran za **dosledne performanse**, sa **prewarmed workers** kako bi se eliminisali hladni startovi. Nudi **produžene vreme izvršenja, virtuelno umrežavanje**, i podržava **prilagođene Linux slike**, što ga čini savršenim za **aplikacije od kritične važnosti** koje zahtevaju visoke performanse i napredne funkcije.
+- **Dedicated Plan**: Radi na posvećenim virtuelnim mašinama sa **predvidljivim naplatama** i podržava ručno ili automatsko skaliranje. Omogućava pokretanje više aplikacija na istom planu, pruža **izolaciju obrade**, i osigurava **siguran pristup mreži** putem App Service Environments, što ga čini idealnim za **dugotrajne aplikacije** koje zahtevaju doslednu alokaciju resursa.
+- **Container Apps**: Omogućava implementaciju **kontejnerizovanih funkcija** u upravljanom okruženju, zajedno sa mikroservisima i API-ima. Podržava prilagođene biblioteke, migraciju nasleđenih aplikacija, i **GPU obradu**, eliminišući upravljanje Kubernetes klasterima. Idealno za **događajima vođene, skalabilne kontejnerizovane aplikacije**.
### **Storage Buckets**
Kada kreirate novu Function App koja nije kontejnerizovana (ali daje kod za izvršavanje), **kod i drugi podaci vezani za funkciju biće pohranjeni u Storage nalogu**. Podrazumevano, web konzola će kreirati novi nalog po funkciji za pohranu koda.
-Štaviše, modifikovanjem koda unutar bucket-a (u različitim formatima u kojima može biti pohranjen), **kod aplikacije će biti modifikovan na novi i izvršen** sledeći put kada se funkcija pozove.
+Štaviše, modifikovanjem koda unutar kante (u različitim formatima u kojima može biti pohranjen), **kod aplikacije će biti modifikovan na novi i izvršen** sledeći put kada se funkcija pozove.
> [!CAUTION]
-> Ovo je veoma zanimljivo iz perspektive napadača jer **pristup za pisanje preko ovog bucket-a** omogućava napadaču da **kompromituje kod i eskalira privilegije** na upravljane identitete unutar Function App-a.
+> Ovo je veoma zanimljivo iz perspektive napadača jer **pristup za pisanje preko ove kante** omogućava napadaču da **kompromituje kod i eskalira privilegije** na upravljane identitete unutar Function App-a.
>
> Više o ovome u **odeljku o eskalaciji privilegija**.
-Takođe je moguće pronaći **master i functions ključeve** pohranjene u storage nalogu u kontejneru **`azure-webjobs-secrets`** unutar foldera **``** u JSON datotekama koje možete pronaći unutra.
+Takođe je moguće pronaći **master i funkcijske ključeve** pohranjene u storage nalogu u kontejneru **`azure-webjobs-secrets`** unutar foldera **``** u JSON datotekama koje možete pronaći unutra.
-Imajte na umu da Functions takođe omogućavaju pohranu koda na udaljenoj lokaciji jednostavno označavajući URL do nje.
+Imajte na umu da Functions takođe omogućavaju pohranu koda na udaljenoj lokaciji jednostavno ukazujući na URL.
-### Mrežno Povezivanje
+### Mrežno umrežavanje
Korišćenjem HTTP okidača:
- Moguće je dati **pristup funkciji sa celog Interneta** bez potrebe za bilo kakvom autentifikacijom ili dati pristup na osnovu IAM-a. Iako je takođe moguće ograničiti ovaj pristup.
-- Takođe je moguće **dati ili ograničiti pristup** Function App-u iz **internetske mreže (VPC)**.
+- Takođe je moguće **dati ili ograničiti pristup** Function App-u iz **internih mreža (VPC)**.
> [!CAUTION]
-> Ovo je veoma zanimljivo iz perspektive napadača jer bi moglo biti moguće **pivotirati na interne mreže** iz ranjive funkcije izložene Internetu.
+> Ovo je veoma zanimljivo iz perspektive napadača jer bi moglo biti moguće **pivotsati na interne mreže** iz ranjive funkcije izložene Internetu.
-### **Podešavanja Function App-a & Varijable Okruženja**
+### **Podešavanja Function App-a i promenljive okruženja**
-Moguće je konfigurisati varijable okruženja unutar aplikacije, koje mogu sadržati osetljive informacije. Štaviše, podrazumevano se kreiraju varijable okruženja **`AzureWebJobsStorage`** i **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (među ostalima). Ove su posebno zanimljive jer **sadrže ključ naloga za kontrolu sa POTPUNIM dozvolama nad storage nalogom koji sadrži podatke aplikacije**. Ova podešavanja su takođe potrebna za izvršavanje koda iz Storage naloga.
+Moguće je konfigurisati promenljive okruženja unutar aplikacije, koje mogu sadržati osetljive informacije. Štaviše, podrazumevano se kreiraju promenljive okruženja **`AzureWebJobsStorage`** i **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (među ostalima). Ove su posebno zanimljive jer **sadrže ključ naloga za kontrolu sa POTPUNIM dozvolama nad storage nalogom koji sadrži podatke aplikacije**. Ova podešavanja su takođe potrebna za izvršavanje koda iz Storage naloga.
-Ove varijable okruženja ili parametri konfiguracije takođe kontrolišu kako funkcija izvršava kod, na primer, ako **`WEBSITE_RUN_FROM_PACKAGE`** postoji, to će označiti URL gde se kod aplikacije nalazi.
+Ove promenljive okruženja ili parametri konfiguracije takođe kontrolišu kako funkcija izvršava kod, na primer, ako **`WEBSITE_RUN_FROM_PACKAGE`** postoji, to će ukazivati na URL gde se kod aplikacije nalazi.
### **Function Sandbox**
@@ -54,14 +54,14 @@ Unutar linux sandbox-a, izvorni kod se nalazi u **`/home/site/wwwroot`** u datot
U **Windows** funkciji koja koristi NodeJS, kod se nalazio u **`C:\home\site\wwwroot\HttpTrigger1\index.js`**, korisničko ime je bilo **`mawsFnPlaceholder8_f_v4_node_20_x86`** i bio je deo **grupa**: `Mandatory Label\High Mandatory Level Label`, `Everyone`, `BUILTIN\Users`, `NT AUTHORITY\INTERACTIVE`, `CONSOLE LOGON`, `NT AUTHORITY\Authenticated Users`, `NT AUTHORITY\This Organization`, `BUILTIN\IIS_IUSRS`, `LOCAL`, `10-30-4-99\Dwas Site Users`.
-### **Upravljane Identitete & Metapodaci**
+### **Upravljane identitete i metapodaci**
-Baš kao i [**VMs**](vms/), Functions mogu imati **Upravljane Identitete** od 2 tipa: Sistem dodeljen i Korisnik dodeljen.
+Baš kao i [**VMs**](vms/index.html), Functions mogu imati **Upravljane identitete** od 2 tipa: Sistem dodeljen i Korisnik dodeljen.
-**Sistem dodeljen** će biti upravljani identitet koji **samo funkcija** kojoj je dodeljen može koristiti, dok su **korisnik dodeljeni** upravljani identiteti upravljani identiteti koje **bilo koja druga Azure usluga može koristiti**.
+**Sistem dodeljen** će biti upravljani identitet koji **samo funkcija** koja ga ima dodeljenog može koristiti, dok su **korisnik dodeljeni** upravljani identiteti upravljani identiteti koje **bilo koja druga Azure usluga može koristiti**.
> [!NOTE]
-> Baš kao u [**VMs**](vms/), Functions mogu imati **1 sistem dodeljen** upravljani identitet i **several korisnik dodeljenih** identiteta, tako da je uvek važno pokušati pronaći sve njih ako kompromitujete funkciju jer biste mogli biti u mogućnosti da eskalirate privilegije na nekoliko upravljanih identiteta iz samo jedne funkcije.
+> Baš kao i u [**VMs**](vms/index.html), Functions mogu imati **1 sistem dodeljen** upravljeni identitet i **several korisnik dodeljenih**, tako da je uvek važno pokušati pronaći sve njih ako kompromitujete funkciju jer biste mogli biti u mogućnosti da eskalirate privilegije na nekoliko upravljanih identiteta iz samo jedne funkcije.
>
> Ako se ne koristi sistemski upravljani identitet, ali su jedan ili više korisničkih upravljanih identiteta povezani sa funkcijom, podrazumevano nećete moći dobiti nijedan token.
@@ -69,42 +69,42 @@ Moguće je koristiti [**PEASS skripte**](https://github.com/peass-ng/PEASS-ng) z
{% embed url="https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm" %}
-Imajte na umu da treba da pronađete način da **proverite sve Upravljane Identitete koje funkcija ima povezane** jer ako to ne naznačite, metapodataka krajnja tačka će **koristiti samo podrazumevani** (proverite prethodni link za više informacija).
+Imajte na umu da treba da pronađete način da **proverite sve upravljane identitete koje funkcija ima povezane** jer ako to ne naznačite, metapodataka krajnja tačka će **koristiti samo podrazumevani** (proverite prethodni link za više informacija).
-## Ključevi Pristupa
+## Ključevi pristupa
> [!NOTE]
-> Imajte na umu da ne postoje RBAC dozvole za davanje pristupa korisnicima da pozivaju funkcije. **Poziv funkcije zavisi od okidača** odabranog prilikom kreiranja i ako je odabran HTTP okidač, možda će biti potrebno koristiti **ključ pristupa**.
+> Imajte na umu da ne postoje RBAC dozvole za davanje pristupa korisnicima za pozivanje funkcija. **Pozivanje funkcije zavisi od okidača** odabranog prilikom kreiranja i ako je odabran HTTP okidač, možda će biti potrebno koristiti **ključ pristupa**.
Kada kreirate krajnju tačku unutar funkcije koristeći **HTTP okidač**, moguće je naznačiti **nivo autorizacije ključa pristupa** potreban za aktiviranje funkcije. Dostupne su tri opcije:
- **ANONYMOUS**: **Svi** mogu pristupiti funkciji putem URL-a.
-- **FUNCTION**: Krajnja tačka je dostupna samo korisnicima koji koriste **ključ funkcije, host ili master ključ**.
+- **FUNCTION**: Krajnja tačka je dostupna samo korisnicima koji koriste **ključ funkcije, hosta ili master ključa**.
- **ADMIN**: Krajnja tačka je dostupna samo korisnicima sa **master ključem**.
**Tipovi ključeva:**
-- **Ključevi funkcije:** Ključevi funkcije mogu biti ili podrazumevani ili korisnički definisani i dizajnirani su da omogućavaju pristup isključivo **određenim krajnjim tačkama funkcije** unutar Function App-a, omogućavajući finiju kontrolu pristupa nad krajnjim tačkama.
-- **Host Ključevi:** Host ključevi, koji takođe mogu biti podrazumevani ili korisnički definisani, pružaju pristup **svim krajnjim tačkama funkcije unutar Function App-a sa FUNCTION nivoom pristupa**.
-- **Master Ključ:** Master ključ (`_master`) služi kao administrativni ključ koji nudi povišene dozvole, uključujući pristup svim krajnjim tačkama funkcije (uključujući ADMIN nivo pristupa). Ovaj **ključ se ne može opozvati.**
-- **Sistemski Ključevi:** Sistemski ključevi su **upravljani specifičnim ekstenzijama** i potrebni su za pristup webhook krajnjim tačkama koje koriste interni komponenti. Primeri uključuju Event Grid okidač i Durable Functions, koji koriste sistemske ključeve za sigurno interagovanje sa svojim API-ima.
+- **Funkcijski ključevi:** Funkcijski ključevi mogu biti ili podrazumevani ili korisnički definisani i dizajnirani su da omogućavaju pristup isključivo **određenim funkcijskim krajnjim tačkama** unutar Function App-a, omogućavajući finiju kontrolu pristupa nad krajnjim tačkama.
+- **Host ključevi:** Host ključevi, koji takođe mogu biti podrazumevani ili korisnički definisani, pružaju pristup **svim funkcijskim krajnjim tačkama unutar Function App-a sa nivoom pristupa FUNCTION**.
+- **Master ključ:** Master ključ (`_master`) služi kao administrativni ključ koji nudi povišene dozvole, uključujući pristup svim funkcijskim krajnjim tačkama (uključujući ADMIN nivo pristupa). Ovaj **ključ se ne može opozvati.**
+- **Sistemski ključevi:** Sistemski ključevi su **upravljački od strane specifičnih ekstenzija** i potrebni su za pristup webhook krajnjim tačkama koje koriste interni komponenti. Primeri uključuju Event Grid okidač i Durable Functions, koji koriste sistemske ključeve za sigurno interagovanje sa svojim API-ima.
> [!TIP]
> Primer za pristup funkciji API krajnjoj tački koristeći ključ:
>
> `https://.azurewebsites.net/api/?code=`
-### Osnovna Autentifikacija
+### Osnovna autentifikacija
-Baš kao u App Services, Functions takođe podržavaju osnovnu autentifikaciju za povezivanje sa **SCM** i **FTP** za implementaciju koda koristeći **korisničko ime i lozinku u URL-u** koji pruža Azure. Više informacija o tome u:
+Baš kao i u App Services, Functions takođe podržavaju osnovnu autentifikaciju za povezivanje sa **SCM** i **FTP** za implementaciju koda koristeći **korisničko ime i lozinku u URL-u** koji pruža Azure. Više informacija o tome u:
{{#ref}}
-az-app-service.md
+az-app-services.md
{{#endref}}
-### Github Zasnovane Implementacije
+### Github zasnovane implementacije
-Kada se funkcija generiše iz Github repozitorijuma, Azure web konzola omogućava **automatsko kreiranje Github Workflow-a u specifičnom repozitorijumu** tako da kada god se ovaj repozitorijum ažurira, kod funkcije se ažurira. U stvari, Github Action yaml za python funkciju izgleda ovako:
+Kada se funkcija generiše iz Github repozitorijuma, Azure web konzola omogućava **automatsko kreiranje Github Workflow-a u specifičnom repozitorijumu** tako da kada se ovaj repozitorijum ažurira, kod funkcije se ažurira. U stvari, Github Action yaml za python funkciju izgleda ovako:
@@ -192,14 +192,14 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
```
-Pored toga, **Upravljeni Identitet** se takođe kreira kako bi Github Akcija iz repozitorijuma mogla da se prijavi u Azure. To se postiže generisanjem Federisane kredencijale preko **Upravljenog Identiteta** koja omogućava **Izdavaču** `https://token.actions.githubusercontent.com` i **Identifikatoru Subjekta** `repo:/:ref:refs/heads/`.
+Pored toga, **Upravljani identitet** se takođe kreira kako bi Github akcija iz repozitorijuma mogla da se prijavi u Azure. To se postiže generisanjem Federated kredencijala preko **Upravljanog identiteta** koji omogućava **Izdavaču** `https://token.actions.githubusercontent.com` i **Identifikatoru subjekta** `repo:/:ref:refs/heads/`.
> [!CAUTION]
-> Stoga, svako ko kompromituje taj repozitorijum će moći da kompromituje funkciju i Upravljene Identitete povezane s njom.
+> Stoga, svako ko kompromituje taj repozitorijum će moći da kompromituje funkciju i Upravljene identitete povezane s njom.
### Implementacije zasnovane na kontejnerima
-Nisu svi planovi omogućeni za implementaciju kontejnera, ali za one koji to omogućavaju, konfiguracija će sadržati URL kontejnera. U API-ju, podešavanje **`linuxFxVersion`** će imati nešto poput: `DOCKER|mcr.microsoft.com/...`, dok će u web konzoli konfiguracija prikazivati **podešavanja slike**.
+Nisu svi planovi omogućili implementaciju kontejnera, ali za one koji to rade, konfiguracija će sadržati URL kontejnera. U API-ju, podešavanje **`linuxFxVersion`** će imati nešto poput: `DOCKER|mcr.microsoft.com/...`, dok će u web konzoli konfiguracija prikazivati **podešavanja slike**.
Pored toga, **niti jedan izvorni kod neće biti pohranjen u skladištu** povezanu sa funkcijom jer to nije potrebno.