2.6 KiB
Drukowanie Stack Canary
{{#include ../../../banners/hacktricks-training.md}}
Powiększenie drukowanego stosu
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.
Przykłady CTF:
- https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html
- 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') - https://guyinatuxedo.github.io/14-ret_2_system/hxp18_poorCanary/index.html
- 32 bity, ARM, bez relro, canary, nx, bez pie. Przepełnienie z wywołaniem puts, aby wyciekł canary + ret2lib wywołujący
systemz łańcuchem ROP do zrzucenia r0 (argument/bin/sh) i pc (adres system)
Dowolne Odczyty
Z dowolnym odczytem jak ten zapewniony 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:
{{#ref}} ../../format-strings/ {{#endref}}
- https://guyinatuxedo.github.io/14-ret_2_system/asis17_marymorton/index.html
- To wyzwanie nadużywa w bardzo prosty sposób ciągu formatowego do odczytu canary ze stosu
{{#include ../../../banners/hacktricks-training.md}}