6.7 KiB
WWW2Exec - GOT/PLT
Nauka hakowania 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 hakowania, przesyłając PR-y do HackTricks i HackTricks Cloud na GitHubie.
Podstawowe informacje
GOT: Globalna tabela przesunięć
Globalna tabela przesunięć (GOT) to mechanizm używany w binariach dynamicznie łączonych do zarządzania adresami funkcji zewnętrznych. Ponieważ te adresy nie są znane do czasu wykonania (ze względu na dynamiczne łączenie), GOT zapewnia sposób dynamicznego aktualizowania adresów tych symboli zewnętrznych po ich rozwiązaniu.
Każdy wpis w GOT odpowiada symbolowi w zewnętrznych bibliotekach, które binarny może wywołać. Gdy funkcja jest pierwszy raz wywołana, jej rzeczywisty adres jest rozwiązywany przez łącznik dynamiczny i przechowywany w GOT. Kolejne wywołania tej samej funkcji używają adresu przechowywanego w GOT, unikając tym samym ponownego rozwiązywania adresu.
PLT: Tabela łączenia procedur
Tabela łączenia procedur (PLT) ściśle współpracuje z GOT i służy jako trampolina do obsługi wywołań funkcji zewnętrznych. Gdy binarny wywołuje funkcję zewnętrzną po raz pierwszy, kontrola jest przekazywana do wpisu w PLT związanego z tą funkcją. Ten wpis PLT jest odpowiedzialny za wywołanie łącznika dynamicznego w celu rozwiązania adresu funkcji, jeśli nie został on jeszcze rozwiązany. Po rozwiązaniu adres jest przechowywany w GOT.
Dlatego wpisy GOT są używane bezpośrednio, gdy adres funkcji zewnętrznej lub zmiennej jest rozwiązany. Wpisy PLT są używane do ułatwienia początkowego rozwiązania tych adresów za pomocą łącznika dynamicznego.
Uzyskanie wykonania
Sprawdź GOT
Uzyskaj adres tabeli GOT za pomocą: objdump -s -j .got ./exec
Zauważ, jak po załadowaniu wykonywalnego w GEF możesz zobaczyć funkcje, które znajdują się w GOT: gef➤ x/20x 0xDIR_GOT
Korzystając z GEF, możesz rozpocząć sesję debugowania i wykonać got
aby zobaczyć tabelę got:
GOT2Exec
W binarnym GOT znajdują się adresy funkcji lub sekcji PLT, która załaduje adres funkcji. Celem tego dowolnego zapisu jest nadpisanie wpisu GOT funkcji, która zostanie wykonana później adresem PLT funkcji system
na przykład.
Idealnie, nadpiszesz GOT funkcji, która zostanie wywołana z kontrolowanymi przez ciebie parametrami (dzięki czemu będziesz mógł kontrolować parametry przesłane do funkcji system).
Jeśli system
nie jest używany przez skrypt, funkcja systemowa nie będzie miała wpisu w PLT. W takim scenariuszu będziesz musiał najpierw ujawnić adres funkcji system
a następnie nadpisać GOT, aby wskazywał na ten adres.
Możesz zobaczyć adresy PLT za pomocą objdump -j .plt -d ./vuln_binary
Wpisy GOT libc
GOT libc jest zazwyczaj kompilowany z częściowym RELRO, co czyni go atrakcyjnym celem, zakładając, że jest możliwe ustalenie jego adresu (ASLR).
Powszechne funkcje libc będą wywoływać inne funkcje wewnętrzne, których GOT można nadpisać w celu uzyskania wykonania kodu.
Znajdź więcej informacji na temat tej techniki tutaj.
Jedno narzędzie
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %} one-gadget.md {% endcontent-ref %}
Zabezpieczenia
Ochrona Full RELRO ma na celu ochronę przed tego rodzaju techniką poprzez rozwiązanie wszystkich adresów funkcji podczas uruchamiania binarnego i ustawienie tabeli GOT jako tylko do odczytu po tym:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %} relro.md {% endcontent-ref %}
Odnośniki
- https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite
- https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook
Nauka hakowania 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 hakowania, przesyłając PR-y do HackTricks i HackTricks Cloud na GitHubie.