hacktricks/cryptography/electronic-code-book-ecb.md

5.8 KiB

{% hint style="success" %} Učite i vežbajte hakovanje AWS-a:HackTricks Obuka AWS Crveni Tim Stručnjak (ARTE)
Učite i vežbajte hakovanje GCP-a: HackTricks Obuka GCP Crveni Tim Stručnjak (GRTE)

Podržite HackTricks
{% endhint %}

ECB

(ECB) Elektronski kodni blok - simetrična šema šifrovanja koja zamenjuje svaki blok čistog teksta sa blokom šifrovanog teksta. To je najjednostavnija šema šifrovanja. Osnovna ideja je da se podeli čisti tekst u blokove od N bitova (zavisi od veličine bloka ulaznih podataka, algoritma šifrovanja) i zatim da se šifruje (dešifruje) svaki blok čistog teksta koristeći jedini ključ.

Korišćenje ECB ima višestruke sigurnosne implikacije:

  • Blokovi iz šifrovanje poruke mogu biti uklonjeni
  • Blokovi iz šifrovane poruke mogu biti premesteni

Otkrivanje ranjivosti

Zamislite da se prijavljujete na aplikaciju nekoliko puta i uvek dobijate isti kolačić. To je zato što je kolačić aplikacije <korisničkoime>|<lozinka>.
Zatim, generišete dva nova korisnika, oba sa istom dugom lozinkom i skoro istim korisničkim imenom.
Otkrijete da su blokovi od 8B gde je informacija oba korisnika ista jednaki. Tada, pretpostavljate da se to možda dešava jer se koristi ECB.

Kao u sledećem primeru. Posmatrajte kako ova 2 dekodirana kolačića imaju nekoliko puta blok \x23U\xE45K\xCB\x21\xC8

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

Ovo je zato što su korisničko ime i lozinka tih kolačića sadržali više puta slovo "a" (na primer). Blokovi koji su različiti su blokovi koji su sadržali barem 1 različit karakter (možda razdelnik "|" ili neka neophodna razlika u korisničkom imenu).

Sada napadač samo treba da otkrije da li je format <korisničko ime><razdelnik><lozinka> ili <lozinka><razdelnik><korisničko ime>. Da bi to uradio, može jednostavno generisati nekoliko korisničkih imena sa sličnim i dugim korisničkim imenima i lozinkama dok ne otkrije format i dužinu razdelnika:

Dužina korisničkog imena: Dužina lozinke: Dužina korisničkog imena+Lozinke: Dužina kolačića (nakon dekodiranja):
2 2 4 8
3 3 6 8
3 4 7 8
4 4 8 16
7 7 14 16

Iskorišćavanje ranjivosti

Uklanjanje celih blokova

Znajući format kolačića (<korisničko ime>|<lozinka>), kako bi se predstavio kao korisnik admin, kreirajte novog korisnika pod imenom aaaaaaaaadmin i dobijte kolačić, zatim ga dekodirajte:

\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

Možemo videti obrazac \x23U\xE45K\xCB\x21\xC8 koji je prethodno kreiran sa korisničkim imenom koje je sadržalo samo a.
Zatim, možete ukloniti prvi blok od 8B i dobićete validan kolačić za korisničko ime admin:

\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

Pomeranje blokova

U mnogim bazama podataka isto je tražiti WHERE username='admin'; ili WHERE username='admin '; (Primetite dodatne razmake)

Dakle, još jedan način da se predstavite kao korisnik admin bio bi:

  • Generišite korisničko ime koje: len(<username>) + len(<delimiter) % len(block). Sa veličinom bloka od 8B možete generisati korisničko ime nazvano: username , sa delimiterom | isečak <username><delimiter> će generisati 2 bloka od 8B.
  • Zatim, generišite lozinku koja će popuniti tačan broj blokova koji sadrže korisničko ime koje želimo da predstavimo i razmake, kao što je: admin

Kolačić ovog korisnika će biti sastavljen od 3 bloka: prva 2 bloka su blokovi korisničkog imena + delimitera, a treći je lozinka (koja predstavlja korisničko ime): username |admin

Zatim, jednostavno zamenite prvi blok sa poslednjim i predstavljate korisnika admin: admin |username

Reference