mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
34 lines
2.5 KiB
Markdown
34 lines
2.5 KiB
Markdown
# 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}}
|