Print Stack Canary
Yazdırılan Yığını Genişlet
Bir yığın taşması açığına sahip bir programın, yığın taşmasının bir kısmına işaret eden bir puts işlevini çalıştırabileceği bir durumu hayal edin. Saldırgan, canary'nin ilk baytının bir null bayt (\x00
) olduğunu ve canary'nin geri kalanının rastgele baytlar olduğunu bilir. Daha sonra, saldırgan, yığın taşmasını oluşturabilir ve yalnızca canary'nin ilk baytına kadar yığını üzerine yazabilir.
Ardından, saldırgan, payloadun ortasında puts işlevini çağırır ve bu, canary'nin tamamını yazdıracaktır (ilk null bayt hariç).
Bu bilgiyle saldırgan, canary'yi bilerek (aynı program oturumunda) yeni bir saldırı oluşturabilir ve gönderebilir.
Bu taktik açıkça çok sınırlıdır, çünkü saldırganın, payloadunun içeriğini yazdırabilmesi, canary'yi dışarı çıkarabilmesi ve ardından aynı program oturumunda gerçek tampon taşmasını gönderebilmesi gerekir.
CTF örnekleri:
64 bit, ASLR etkin ancak PIE etkin değil, ilk adım, canary'nin 0x00 baytına kadar taşmasıyla doldurulması ve ardından puts çağrısı yaparak sızdırmaktır. Canary ile puts'un GOT'tan adresini sızdırmak için bir ROP cihazı oluşturulur ve ardından
/bin/sh
'yi çağırmak içinsystem('/bin/sh')
'yi çağırmak için bir ROP cihazı32 bit, ARM, relro yok, canary, nx, pie yok. Yığını sızdırmak için puts çağrısıyla taşma + canary'yi sızdırmak ve ROP zinciriyle
system
'ı çağırmak için ret2lib çağrısı
Keyfi Okuma
Format dizileri tarafından sağlanan bir keyfi okuma ile canary'yi sızdırmak mümkün olabilir. Bu örneği kontrol edin: https://ir0nstone.gitbook.io/notes/types/stack/canaries ve keyfi bellek adreslerini okumak için format dizilerini kötüye kullanma hakkında okuyabilirsiniz:
pageFormat StringsBu zorluk, yığın üzerinden canary'yi okumak için format dizisini çok basit bir şekilde kötüye kullanır
Last updated