# 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}}