8.8 KiB
Oracle z dopełnieniem
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud na GitHubie.
CBC - Szyfrowanie blokowe w trybie łańcucha
W trybie CBC poprzedni zaszyfrowany blok jest używany jako IV do operacji XOR z następnym blokiem:
Aby odszyfrować CBC, wykonuje się odwrotne operacje:
Zauważ, że potrzebne są klucz szyfrowania i IV.
Dopełnienie wiadomości
Ponieważ szyfrowanie odbywa się w blokach o stałym rozmiarze, zazwyczaj potrzebne jest dopełnienie w ostatnim bloku, aby uzupełnić jego długość.
Zazwyczaj używany jest PKCS7, który generuje dopełnienie powtarzając ilość bajtów potrzebną do uzupełnienia bloku. Na przykład, jeśli brakuje 3 bajtów w ostatnim bloku, dopełnienie będzie \x03\x03\x03
.
Przyjrzyjmy się więcej przykładom z 2 blokami o długości 8 bajtów:
bajt #0 | bajt #1 | bajt #2 | bajt #3 | bajt #4 | bajt #5 | bajt #6 | bajt #7 | bajt #0 | bajt #1 | bajt #2 | bajt #3 | bajt #4 | bajt #5 | bajt #6 | bajt #7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 6 | 0x02 | 0x02 |
P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 0x03 | 0x03 | 0x03 |
P | A | S | S | W | O | R | D | 1 | 2 | 3 | 0x05 | 0x05 | 0x05 | 0x05 | 0x05 |
P | A | S | S | W | O | R | D | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 |
Zauważ, jak w ostatnim przykładzie ostatni blok był pełny, więc wygenerowano kolejny tylko z dopełnieniem.
Oracle z dopełnieniem
Gdy aplikacja deszyfruje zaszyfrowane dane, najpierw odszyfrowuje dane; następnie usuwa dopełnienie. Podczas usuwania dopełnienia, jeśli nieprawidłowe dopełnienie wywołuje wykrywalne zachowanie, mamy do czynienia z lukiem w oracle z dopełnieniem. Wykrywalne zachowanie może być błędem, brakiem wyników lub wolniejszą odpowiedzią.
Jeśli wykryjesz to zachowanie, możesz odszyfrować zaszyfrowane dane i nawet zaszyfrować dowolny tekst jawnie.
Jak wykorzystać
Możesz użyć https://github.com/AonCyberLabs/PadBuster, aby wykorzystać ten rodzaj podatności lub po prostu użyj
sudo apt-get install padbuster
Aby sprawdzić, czy ciasteczko witryny jest podatne, możesz spróbować:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Kodowanie 0 oznacza, że jest używany base64 (ale inne są dostępne, sprawdź menu pomocy).
Możesz również wykorzystać tę podatność do szyfrowania nowych danych. Na przykład, wyobraź sobie, że zawartość ciasteczka to "user=MyUsername", wtedy możesz zmienić ją na "_user=administrator_" i eskalować uprawnienia wewnątrz aplikacji. Możesz to również zrobić, używając paduster
i określając parametr -plaintext:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
Jeśli witryna jest podatna, padbuster
automatycznie spróbuje znaleźć błąd w dopełnieniu, ale możesz także wskazać komunikat o błędzie, używając parametru -error.
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
Teoria
W skrócie, możesz zacząć deszyfrować zaszyfrowane dane, zgadując poprawne wartości, które mogą być użyte do stworzenia wszystkich różnych dopełnień. Następnie atak padding oracle zacznie deszyfrowywać bajty od końca do początku, zgadując, jaka będzie poprawna wartość, która tworzy dopełnienie 1, 2, 3, itd.
Wyobraź sobie, że masz zaszyfrowany tekst zajmujący 2 bloki utworzone przez bajty od E0 do E15.
Aby odszyfrować ostatni blok (E8 do E15), cały blok przechodzi przez "deszyfrowanie szyfru blokowego", generując bajty pośrednie I0 do I15.
W końcu, każdy bajt pośredni jest XORowany z poprzednimi zaszyfrowanymi bajtami (E0 do E7). Więc:
C15 = D(E15) ^ E7 = I15 ^ E7
C14 = I14 ^ E6
C13 = I13 ^ E5
C12 = I12 ^ E4
- ...
Teraz możliwe jest zmodyfikowanie E7
aż C15
będzie 0x01
, co również będzie poprawnym dopełnieniem. W tym przypadku: \x01 = I15 ^ E'7
Znalezienie E'7 pozwala obliczyć I15: I15 = 0x01 ^ E'7
Co pozwala nam obliczyć C15: C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7
Znając C15, teraz możliwe jest obliczenie C14, ale tym razem metodą brute-force dla dopełnienia \x02\x02
.
Ten BF jest równie skomplikowany jak poprzedni, ponieważ możliwe jest obliczenie E''15
, którego wartość to 0x02: E''7 = \x02 ^ I15
, więc wystarczy znaleźć E'14
, który generuje C14
równy 0x02
.
Następnie wykonaj te same kroki, aby odszyfrować C14: C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6
Podążaj tą ścieżką, aż odszyfrujesz cały zaszyfrowany tekst.
Wykrywanie podatności
Zarejestruj konto i zaloguj się na to konto.
Jeśli logujesz się wiele razy i zawsze otrzymujesz ten sam ciasteczko, prawdopodobnie jest coś nie tak z aplikacją. Ciasteczko wysłane z powrotem powinno być unikalne za każdym razem, gdy się logujesz. Jeśli ciasteczko jest zawsze takie samo, prawdopodobnie zawsze będzie ważne i nie będzie możliwości jego unieważnienia.
Teraz, jeśli spróbujesz zmodyfikować ciasteczko, zobaczysz, że otrzymujesz błąd od aplikacji.
Ale jeśli użyjesz BF do dopełnienia (korzystając na przykład z padbuster), uda ci się uzyskać inne ciasteczko ważne dla innego użytkownika. Ten scenariusz jest bardzo prawdopodobnie podatny na padbuster.
Referencje
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.