Double Free
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Eğer bir bellek bloğunu birden fazla kez serbest bırakırsanız, bu, ayırıcı verilerini bozabilir ve saldırılara kapı açabilir. İşte bu nasıl olur: bir bellek bloğunu serbest bıraktığınızda, bu, serbest parçaların bir listesine geri döner (örneğin, "hızlı kutu"). Eğer aynı bloğu ardışık olarak iki kez serbest bırakırsanız, ayırıcı bunu tespit eder ve bir hata fırlatır. Ancak eğer araya başka bir parçayı serbest bırakırsanız, çift serbest kontrolü atlanır, bu da bozulmaya neden olur.
Artık yeni bellek talep ettiğinizde (malloc
kullanarak), ayırıcı size iki kez serbest bırakılmış bir bloğu verebilir. Bu, iki farklı işaretçinin aynı bellek konumuna işaret etmesine yol açabilir. Eğer bir saldırgan bu işaretçilerden birini kontrol ederse, o bellek içeriğini değiştirebilir, bu da güvenlik sorunlarına neden olabilir veya hatta kod çalıştırmalarına izin verebilir.
Örnek:
Bu örnekte, tcache'i birkaç serbest bırakılmış parça (7) ile doldurduktan sonra, kod h
parçasını serbest bırakır, ardından i
parçasını serbest bırakır ve sonra tekrar h
parçasını serbest bırakarak bir double free oluşturur (aynı zamanda Fast Bin dup olarak da bilinir). Bu, yeniden tahsis ederken üst üste binen bellek adresleri alma olasılığını açar, bu da iki veya daha fazla işaretçinin aynı bellek konumuna işaret edebileceği anlamına gelir. Bir işaretçi aracılığıyla verileri manipüle etmek, diğerini etkileyebilir ve bu da kritik bir güvenlik riski ve potansiyel bir istismar olanağı yaratır.
Bunu yürütürken, i1
ve i2
aynı adresi aldı olduğunu not edin:
Sadece 0x70
boyutunun dışında Fast-Bin boyutunda parçalar tahsis edebiliriz, bu da olağan __malloc_hook
üzerine yazmayı engeller.
Bunun yerine, Fast Bin dup için hedef olarak 0x56
ile başlayan PIE adreslerini kullanıyoruz (1/2 şansı).
PIE adreslerinin saklandığı yerlerden biri main_arena
içindedir, bu Glibc içindedir ve __malloc_hook
'a yakındır.
Orada bir parça tahsis etmek için main_arena
'nın belirli bir ofsetini hedef alıyoruz ve __malloc_hook
'a ulaşana kadar parçalar tahsis etmeye devam ediyoruz.
Tcache kutularını ve bir null-byte taşmasını kullanarak bir double-free durumu elde edebiliriz:
0x110
boyutunda üç parça tahsis ediyoruz (A
, B
, C
)
B
'yi serbest bırakıyoruz
A
'yı serbest bırakıyoruz ve null-byte taşmasını kullanmak için tekrar tahsis ediyoruz
Artık B
'nin boyut alanı 0x100
, 0x111
yerine, bu yüzden tekrar serbest bırakabiliriz
0x110
boyutunda bir Tcache-bin ve aynı adrese işaret eden 0x100
boyutunda bir tane var. Yani bir double free'miz var.
Tcache poisoning kullanarak double free'yi değerlendiriyoruz.
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)