zapamtime
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| zapamtime [2025/10/31 15:53] – mbunic | zapamtime [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 15: | Line 15: | ||
| Osim Dockerfilea, | Osim Dockerfilea, | ||
| - | Pri analizi source koda vidi se da je adminov username | + | Pri analizi source koda vidi se da je korisničko ime administratora: |
| < | < | ||
| Line 21: | Line 21: | ||
| </ | </ | ||
| - | Također se vidi da stranica koristi **secret** | + | Također se vidi da stranica koristi |
| Također se vidi da je **FLAG** definiran kao varijabla. \\ | Također se vidi da je **FLAG** definiran kao varijabla. \\ | ||
| Line 31: | Line 31: | ||
| {{ zapamtime: | {{ zapamtime: | ||
| - | U inicijalizaciji baze podataka vidi se da svaki korisnik ima **ID**, **username**, | + | U inicijalizaciji baze podataka vidi se da svaki korisnik ima **ID**, **username**, |
| Također se vidi da se administratorski korisnik postavlja s vrijednošću 1 za **isAdmin**. | Također se vidi da se administratorski korisnik postavlja s vrijednošću 1 za **isAdmin**. | ||
| Line 57: | Line 57: | ||
| Funkcija **uuidv5** je deterministička — za isti par **username** i **namespace** svaki put će generirati isti UUID. | Funkcija **uuidv5** je deterministička — za isti par **username** i **namespace** svaki put će generirati isti UUID. | ||
| - | To znači da u generaciji administratorskog tokena (slika 3) od tri varijable — **secret**, **ADMIN_NAME** i **adminId** — poznajemo **ADMIN_NAME** (“administrator0”), | + | To znači da u generaciji administratorskog tokena (slika 3) od tri varijable — **secret**, **ADMIN_NAME** i **adminId** — poznajemo **ADMIN_NAME** (“administrator0”), |
| Budući da su i **secret** i **BCRYPT_SALT** varijable konstante dok aplikacija radi, ove dvije varijable će imati istu vrijednost kada će se koristiti za generaciju tokena korisnika. | Budući da su i **secret** i **BCRYPT_SALT** varijable konstante dok aplikacija radi, ove dvije varijable će imati istu vrijednost kada će se koristiti za generaciju tokena korisnika. | ||
| Line 77: | Line 77: | ||
| secret = 22 znaka | secret = 22 znaka | ||
| ADMIN_NAME = 14 znakova (“administrator0”) | ADMIN_NAME = 14 znakova (“administrator0”) | ||
| - | adminId= 36 znakova (UUID) | + | adminId = 36 znakova (UUID) |
| </ | </ | ||
| - | Zbrajanjem 22 + 14 + 36 dobiva se 72, što je točno broj znakova koje **bcrypt.hash** uzima u obzir. | + | Zbrajanjem 22 + 14 + 36 dobiva se 72, što je točno broj znakova koje funkcija |
| --- | --- | ||
| Line 96: | Line 96: | ||
| Jedine dvije različite vrijednosti su **username** i **userId**. | Jedine dvije različite vrijednosti su **username** i **userId**. | ||
| - | Na **userId** nemamo utjecaj, ali **username** možemo kontrolirati. | + | Na vrijednost |
| + | |||
| + | Budući da je **secret** duljine 22, a **bcrypt.hash** uzima samo prvih 72 znaka, ako unesemo **username** duljine **50**, on će “izgurati” **userId** iz dijela koji **bcrypt.hash** koristi (prvih 72 znaka). | ||
| - | Budući da je **secret** duljine 22, a **bcrypt.hash** uzima samo prvih 72 znaka, ako unesemo **username** duljine **50**, on će “istisnuti” **userId** iz dijela koji **bcrypt.hash** koristi. | ||
| To znači da **userId** uopće neće ući u generiranje korisničkog tokena. | To znači da **userId** uopće neće ući u generiranje korisničkog tokena. | ||
| Na taj način imamo potpunu kontrolu nad 50 znakova (nakon **secret**), | Na taj način imamo potpunu kontrolu nad 50 znakova (nakon **secret**), | ||
| - | Pošto | + | Budući da su **secret** i **BCRYPT_SALT** isti pri generiranju oba tokena (admin i user), ako uspijemo manipulirati tih 50 znakova da budu isti kao kod administratora, |
| Da bi to bilo moguće, mora vrijediti: | Da bi to bilo moguće, mora vrijediti: | ||
| Line 143: | Line 144: | ||
| Middleware dohvaća token iz kolačića, traži prvog korisnika u bazi s tim tokenom i postavlja sesiju kao tog korisnika. | Middleware dohvaća token iz kolačića, traži prvog korisnika u bazi s tim tokenom i postavlja sesiju kao tog korisnika. | ||
| - | Pošto | + | Budući da se uzima **prvi user** u bazi, a administrator je uvijek prvi kreirani korisnik, bilo koji kasniji korisnik s istim tokenom automatski postaje administrator. |
| --- | --- | ||
| Line 169: | Line 170: | ||
| {{ zapamtime: | {{ zapamtime: | ||
| - | No to ograničenje nije implementirano na serverskoj strani, nego samo u HTML kodu (klijentskoj strani), pa se lako može zaobići — brisanjem dijela HTML-a prikazanog na slici 11. ili korištenjem **BurpSuite** alata. \\ | + | Međutim, |
| {{ zapamtime: | {{ zapamtime: | ||
zapamtime.1761926010.txt.gz · Last modified: 2025/12/01 11:40 (external edit)