Print Stack Canary
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wyobraź sobie sytuację, w której program podatny na przepełnienie stosu może wykonać funkcję puts wskazującą na część przepełnienia stosu. Napastnik wie, że pierwszy bajt canary to bajt null (\x00
), a reszta canary to losowe bajty. Następnie napastnik może stworzyć przepełnienie, które nadpisuje stos aż do pierwszego bajtu canary.
Następnie napastnik wywołuje funkcjonalność puts w środku ładunku, co wydrukuje całą canary (z wyjątkiem pierwszego bajtu null).
Dzięki tym informacjom napastnik może stworzyć i wysłać nowy atak, znając canary (w tej samej sesji programu).
Oczywiście, ta taktyka jest bardzo ograniczona, ponieważ napastnik musi być w stanie wydrukować zawartość swojego ładunku, aby wyekstrahować canary, a następnie być w stanie stworzyć nowy ładunek (w tej samej sesji programu) i wysłać prawdziwe przepełnienie bufora.
CTF examples:
64 bity, ASLR włączone, ale bez PIE, pierwszym krokiem jest wypełnienie przepełnienia aż do bajtu 0x00 canary, aby następnie wywołać puts i wyciek. Z canary tworzony jest gadżet ROP do wywołania puts, aby wyciekł adres puts z GOT, a następnie gadżet ROP do wywołania system('/bin/sh')
32 bity, ARM, bez relro, canary, nx, bez pie. Przepełnienie z wywołaniem puts, aby wyciekł canary + ret2lib wywołujący system
z łańcuchem ROP do wypchnięcia r0 (argument /bin/sh
) i pc (adres system)
Z dowolnym odczytem takim jak ten dostarczany przez ciągi formatowe może być możliwe wyciekanie canary. Sprawdź ten przykład: https://ir0nstone.gitbook.io/notes/types/stack/canaries i możesz przeczytać o nadużywaniu ciągów formatowych do odczytu dowolnych adresów pamięci w:
Format StringsTo wyzwanie nadużywa w bardzo prosty sposób ciągu formatowego do odczytu canary ze stosu
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)