mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
34 lines
2.7 KiB
Markdown
34 lines
2.7 KiB
Markdown
# Print Stack Canary
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|
||
|
||
## Büyütülmüş yazdırılmış yığın
|
||
|
||
Bir **yığın taşması** için **kırılgan** olan bir **programın** **stack overflow**'un **bir kısmına** **işaret eden** bir **puts** fonksiyonunu çalıştırabileceği bir durumu hayal edin. Saldırgan, **kanaryanın ilk baytının bir null baytı** olduğunu (`\x00`) ve kanaryanın geri kalanının **rastgele** baytlar olduğunu bilir. Ardından, saldırgan **kanaryanın ilk baytına kadar yığını** **aşan** bir taşma oluşturabilir.
|
||
|
||
Sonra, saldırgan **yükün** ortasında **puts fonksiyonunu** çağırır ve bu, **kanaryanın tümünü** (ilk null bayt hariç) **yazdırır**.
|
||
|
||
Bu bilgiyle saldırgan, kanaryayı (aynı program oturumunda) bilerek **yeni bir saldırı oluşturup gönderebilir**.
|
||
|
||
Açıkça, bu taktik çok **kısıtlıdır** çünkü saldırganın **kanaryayı** **sızdırmak** için **yükünün** **içeriğini** **yazdırabilmesi** ve ardından **yeni bir yük** oluşturup (aynı program oturumunda) **gerçek tampon taşmasını** **gönderebilmesi** gerekir.
|
||
|
||
**CTF örnekleri:**
|
||
|
||
- [**https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html**](https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html)
|
||
- 64 bit, ASLR etkin ama PIE yok, ilk adım kanaryanın 0x00 baytına kadar bir taşma doldurmak ve ardından puts'u çağırarak sızdırmaktır. Kanarya ile bir ROP aparatı oluşturulur, puts'u çağırarak GOT'tan puts'un adresini sızdırır ve ardından `system('/bin/sh')` çağıran bir ROP aparatı.
|
||
- [**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 bit, ARM, relro yok, kanarya, nx, pie yok. Kanaryayı sızdırmak için üzerine puts çağrısı ile taşma ve r0'ı (arg `/bin/sh`) ve pc'yi (system adresi) pop eden bir ROP zinciri ile `system` çağıran ret2lib.
|
||
|
||
## Keyfi Okuma
|
||
|
||
**Format** **dizeleri** tarafından sağlanan bir **keyfi okuma** ile kanaryayı sızdırmak mümkün olabilir. Bu örneğe bakın: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) ve keyfi bellek adreslerini okumak için format dizelerini kötüye kullanma hakkında okuyabilirsiniz:
|
||
|
||
{{#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)
|
||
- Bu zorluk, yığından kanaryayı okumak için çok basit bir şekilde bir format dizesini kötüye kullanıyor.
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|