PIE

Reading time: 3 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Podstawowe informacje

Plik binarny skompilowany jako PIE, czyli Position Independent Executable, oznacza, że program może być ładowany w różnych lokalizacjach pamięci za każdym razem, gdy jest uruchamiany, co zapobiega twardo zakodowanym adresom.

Sztuczka do wykorzystania tych binariów polega na wykorzystaniu adresów względnych—offsety między częściami programu pozostają takie same, nawet jeśli lokalizacje bezwzględne się zmieniają. Aby obejść PIE, wystarczy wyciek jednego adresu, zazwyczaj z stosu przy użyciu luk, takich jak ataki formatu ciągu. Gdy masz adres, możesz obliczyć inne na podstawie ich stałych offsetów.

Pomocna wskazówka przy wykorzystywaniu binariów PIE to to, że ich adres bazowy zazwyczaj kończy się na 000 z powodu stron pamięci będących jednostkami losowości, o rozmiarze 0x1000 bajtów. To wyrównanie może być krytycznym sprawdzianem, jeśli exploit nie działa zgodnie z oczekiwaniami, wskazując, czy poprawny adres bazowy został zidentyfikowany.
Lub możesz to wykorzystać w swoim exploicie, jeśli wycieknie, że adres znajduje się pod 0x649e1024, wiesz, że adres bazowy to 0x649e1000 i stąd możesz po prostu obliczyć offsety funkcji i lokalizacji.

Obejścia

Aby obejść PIE, konieczne jest wycieknięcie jakiegoś adresu załadowanego binarnego, istnieje kilka opcji:

  • Wyłączony ASLR: Jeśli ASLR jest wyłączony, binarny skompilowany z PIE zawsze będzie ładowany pod tym samym adresem, dlatego PIE będzie bezużyteczne, ponieważ adresy obiektów zawsze będą w tym samym miejscu.
  • Otrzymać wyciek (częste w łatwych wyzwaniach CTF, sprawdź ten przykład)
  • Brute-force'ować wartości EBP i EIP na stosie, aż wyciekną poprawne:

{{#ref}} bypassing-canary-and-pie.md {{#endref}}

  • Użyć luki arbitralnego odczytu, takiej jak format string, aby wyciekł adres binarnego (np. ze stosu, jak w poprzedniej technice), aby uzyskać bazę binarnego i użyć offsetów stamtąd. Znajdź przykład tutaj.

Odniesienia

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks