34 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Print Stack Canary
{{#include ../../../banners/hacktricks-training.md}}
## Uvećaj štampanu stog
Zamislite situaciju u kojoj **program koji je ranjiv** na prelivanje stoga može izvršiti **puts** funkciju **koja pokazuje** na **deo** **prelivanja stoga**. Napadač zna da je **prvi bajt kanarija null bajt** (`\x00`) i da su ostali bajtovi kanarija **nasumični**. Tada, napadač može kreirati preliv koji **prepisuje stog sve do prvog bajta kanarija**.
Zatim, napadač **poziva puts funkcionalnost** u sredini payload-a koja će **odštampati ceo kanarij** (osim prvog null bajta).
Sa ovom informacijom, napadač može **izraditi i poslati novi napad** znajući kanarij (u istoj sesiji programa).
Očigledno, ova taktika je veoma **ograničena** jer napadač mora biti u mogućnosti da **odštampa** **sadržaj** svog **payload-a** da bi **ekstraktovao** **kanarij** i zatim biti u mogućnosti da kreira novi payload (u **istoј sesiji programa**) i **pošalje** **pravi buffer overflow**.
**CTF primeri:**
- [**https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html**](https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html)
- 64 bita, ASLR omogućeno ali bez PIE, prvi korak je popuniti preliv do bajta 0x00 kanarija da bi se zatim pozvao puts i otkrio ga. Sa kanarijem se kreira ROP gadget za pozivanje puts da se otkrije adresa puts iz GOT-a i ROP gadget za pozivanje `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 bita, ARM, bez relro, kanarij, nx, bez pie. Preliv sa pozivom na puts da se otkrije kanarij + ret2lib pozivajući `system` sa ROP lancem da se popuni r0 (arg `/bin/sh`) i pc (adresa sistema)
## Arbitrarni Čitanje
Sa **arbitrarnim čitanjem** poput onog koji pružaju formatne **nizove** može biti moguće otkriti kanarij. Pogledajte ovaj primer: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) i možete pročitati o zloupotrebi formatnih nizova za čitanje arbitrarnim memorijskim adresama u:
{{#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)
- Ova izazov zloupotrebljava na veoma jednostavan način formatni niz da pročita kanarij sa stoga
{{#include ../../../banners/hacktricks-training.md}}