BF Addresses in the Stack
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Eğer bir canary ve PIE (Pozisyona Bağımsız İkili) ile korunmuş bir ikili ile karşılaşıyorsanız, bunları aşmanın bir yolunu bulmanız gerekecektir.
checksec
'in bir ikilinin canary ile korunduğunu bulamayabileceğini unutmayın, eğer bu statik olarak derlenmişse ve fonksiyonu tanımlama yeteneği yoksa.
Ancak, bir fonksiyon çağrısının başında yığında bir değerin kaydedildiğini ve bu değerin çıkmadan önce kontrol edildiğini bulursanız bunu manuel olarak fark edebilirsiniz.
PIE'yi aşmak için bazı adresleri sızdırmanız gerekiyor. Ve eğer ikili herhangi bir adres sızdırmıyorsa, en iyi yol, savunmasız fonksiyondaki yığında kaydedilen RBP ve RIP'yi brute-force yapmaktır. Örneğin, bir ikili hem canary hem de PIE kullanılarak korunuyorsa, önce canary'yi brute-force yapmaya başlayabilirsiniz, ardından sonraki 8 Byte (x64) kaydedilen RBP ve sonraki 8 Byte kaydedilen RIP olacaktır.
Yığında bulunan dönüş adresinin ana ikili koduna ait olduğu varsayılmaktadır; bu, eğer zafiyet ikili kodda yer alıyorsa genellikle böyle olacaktır.
İkili dosyadan RBP ve RIP'yi brute-force yapmak için, program bir şey çıktığında veya sadece çökmediğinde geçerli bir tahmin edilen byte'ın doğru olduğunu anlayabilirsiniz. Canarı brute-force yapmak için sağlanan aynı fonksiyonu RBP ve RIP'yi brute-force yapmak için kullanabilirsiniz:
Son PIE'yi yenmek için ihtiyacınız olan son şey, sızan adreslerden yararlı adresleri hesaplamaktır: RBP ve RIP.
RBP'den, yığın içinde shell'inizi nereye yazdığınızı hesaplayabilirsiniz. Bu, yığın içinde "/bin/sh\x00" dizesini nereye yazacağınızı bilmek için çok yararlı olabilir. Sızan RBP ile shellcode'unuz arasındaki mesafeyi hesaplamak için, RBP'yi sızdırdıktan sonra bir kesme noktası koyabilir ve shellcode'unuzun nerede bulunduğunu kontrol edebilirsiniz, ardından shellcode ile RBP arasındaki mesafeyi hesaplayabilirsiniz:
RIP'ten PIE ikili dosyasının temel adresini hesaplayabilirsiniz, bu da geçerli bir ROP zinciri oluşturmak için gerekecektir.
Temel adresi hesaplamak için sadece objdump -d vunbinary
komutunu çalıştırın ve en son adresleri kontrol edin:
Bu örnekte, tüm kodu bulmak için yalnızca 1 Byte ve yarım gerektiğini görebilirsiniz, bu durumda temel adres sızdırılan RIP ama "000" ile biten olacaktır. Örneğin, 0x562002970ecf
sızdırdıysanız, temel adres 0x562002970000
'dır.
bu gönderiden bazı gözlemlere göre, RBP ve RIP değerlerini sızdırırken, sunucunun bazı doğru olmayan değerlerle çökmesi mümkün olmayabilir ve BF scripti doğru olanları aldığını düşünebilir. Bunun nedeni, bazı adreslerin tam olarak doğru olmasa bile bunu kırmamasıdır.
O blog gönderisine göre, sunucuya yapılan istekler arasında kısa bir gecikme eklenmesi önerilmektedir.
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)