mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
35 lines
2.6 KiB
Markdown
35 lines
2.6 KiB
Markdown
# 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**](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**](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 `system` z ł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**](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](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}}
|