2011-11-20 19 views
5

Belirli bir güvenlik açığından etkilenen kod için arabellek taşma saldırısı yapmaya çalışıyorum. Ama yanlış görünüyor gibi görünüyor, Her ne kadar benim istismar dizeleri yığın bozuk değil, ben (benim istismar gömülü gömülü) benim derleme kodumu hiç işe yaramaz.Seçilen fonksiyon için program sayacını içermiyor

Saldırmak istediğim programın 'ret' talimatının uygulanmasından önceki bellek değerlerinin bir kısmı. o yığını pop ve attı değere% eip noktasını yapamaz çünkü bu noktada

0x55683984:  0x5568398c 0x...(old r.a)  0x68e322a1  0x0000c31c 
0x55683994:  0xf7fa9400  0x0804a3d7  0x556839c0  0xf7e518d0 

, şeyler ters gidebilir? Bu nedenle, benim istismar derleme kodum çalışmıyor. (0x68e322a1 0x0000c31c) Gdb diyor Seçili çerçeve için hiçbir program program sayacını içermiyor. ve hata ayıklama olmadan çalıştırmayı denediğimde, bir segmentasyon hatasına neden olur.

Bu sorunun derlememin uzunluğuyla ilgili bir ilgisi var mı? (bu durumda 6)?

Program received signal SIGSEGV, Segmentation fault. 
0x5568398c in ??() 
(gdb) x 0x5568398c 
0x5568398c: 0x68e322a1 

Bu, segfault neden olan adresin içinde ne olduğunu görebildiğimde nasıl olur?

+0

Sen 'disassemble' kullanabilirsiniz çağrı yığını. Çalıştırmaya çalıştığınız kodu gösterdiğinizde yardımcı olmak daha kolay olacaktır (Eğer 68 e3 ise, gömülü bir sıfır bayt içerir). BTW, eğer bu ev ödevi içinse, bu şekilde işaretlemelisiniz. – user786653

+0

Neler olup bittiğini görmek için düzen asmını kullandım. Ayrıca, şimdi benim exploit kodum bir c3 (ret komutu anlamına gelir) ile sona erdi, başıboş sıfır bayt sorun değil. Burada önemli olan nokta yanlışlıkla yanlışlıkla tanımlanmamış bir hafıza adresine ulaşmaya çalışmaktır. – bfaskiplar

cevap

3

Tamam, burada, montaj kodumdaki movl komutundaki adresin önüne bir '$' koymayı unuttum. Böylece program, bölümleme hatasına neden olan tanımlanmamış bir bellek adresine erişmeye çalışıyordu.

Ama GDB diyerek bu durumu bildirir şekilde sevmiyorum sadece disassemble baskılar akım fonksiyonunun kod dışarı Varsayılan olarak

+0

Teşekkürler dostum, sen benim pastamı kurtardın – JustGage

5

'İşlevsiz seçilen çerçeve için program sayacı içeriyor'. Sizin durumunuzda, program sayacı bir yere yığmak için işaret eder ve gdb geçerli fonksiyonun sınırlarının nerede olduğunu anlamaz. Bu yüzden hata mesajı.

Ama elle bir adres aralığı sökmeye belirtebilirsiniz: ya `x/10i $ eip` o hata alıyor ve kodunu görmek için` bt` görüntülemek için

(gdb) disassemble 0x7fffffffbb00,0x7fffffffbbff 
+1

Çok hoş bir numara. Alternatif olarak, yığın çerçevenizin nerede olduğunu bulmakta zorluk çeken $ rip, $ rip + offset'i kullanabilirsiniz. – Eric