Symbolic Execution

|--> [ , , , , , ]

Symbolic execution, bir programın girdi seçeneklerini belirlemek için kullanılan bir analiz tekniğidir. Temel amaç, programın normal çalışmasını sağlayan somut (concrete) girdiler yerine sembolik değerler ile soyut bir yorumlama yolunu izlemektir. Girilen her sembolik değer ile birlikte programda bulunan her koşul biriminde mümkün olan her bir dallanma için bir sembolik ifade (veya denklem) oluşur. En sonunda programa ait bir akış grafiği (flow graph) meydana gelir. Bu aşamaları otomatik olarak symbolic execution motoru gerçekleştirir.

Dlmalloc Unlink Exploitation

|--> [ , , , , ]

Merhaba arkadaşlar. Uzun bir süredir üzerinde çalıştığım konu hakkında bir şeyler anlatabilecek seviyeye gelmenin heyecanı ile bu yazıya başlıyorum. Yazıya geçmeden önce söylemem gereken şeyler var… Buffer Overflow saldırıları teoride çok basit gözükse de, iş uygulamaya geldiğinde fazlasıyla kompleks hale gelebiliyor. Özellikle bu, dinamik hafıza alanı bozma olunca ve üstüne üstlük linked list’lerin iyice işin içerisine girdiği zaman beyin nöronları teker teker intihar etmeye başlıyor  Bu noktada “hatasız kul olmaz” diyor ve böylesine soyut bir konuda herkesin hata yapabileceğini belirtiyoruz. Fark ettiğiniz her türlü hatalı anlatım durumunda iletişime geçmeniz, benim ve diğer arkadaşlar için hayati önem taşıdığını söyleyip ufaktan konumuza geçelim. Önceki yazımızda olduğu gibi bu konunun anlatımında farklı bir kaynaktaki egzersizi kullanacağız. İlgili siteye buradan erişebilirsiniz.

Vortex11 (Heap Overflow)

|--> [ , , ]

Merhaba arkadaşlar, bu yazıda vortex CTF oyununun 11.levelinin çözüm adımlarını anlatacağım. İlgileneceğimiz oyun, dinamik alan tahsilatları ile ilgili. Bir önceki yazıda değindiğimiz malloc’lardan ayrı olarak burada ‘phkmalloc’ kullanılmış. Konuyu ve oyunu anlayabilmemiz açısından, phkmalloc kaynak kodu ve diğer ek materyalleri incelememiz sağlıklı olacaktır.

Verilen bilgiye göre; phkmalloc tarafından tahsis işlemi yapılan programın heap alanını bozup keyfimize göre kontrol edebilir hale getirmeliyiz. Heap alanını bozmaktan kastımız, ilgili alan için ayrılmış bölüme istenilenden fazla veri gönderip taşırmak. İşte biz buna Heap Overflow zafiyeti diyoruz.

Linked List

|--> [ , ]

Linked List’ler yani bağlı listeler, C Programlama Dilinde kullanılan kendine dönüşlü bir yapıdır(struct). “Kendine dönüşlü nasıl oluyo ? ” diyenler için azıcık daha açarsak : Bağlı listeler, içerisinde kendi türünden bir gösterici (pointer) içeren yapılardır diyebiliriz. Yine de kafanızda tam olarak şekillenmediyse endişelenmeyin konunun devamında tam olarak anlaşılacaktır. Gelecek konulara yabancı kalmamak için ‘pointer’ ve ‘struct’ terimlerinin anlamlarının ve işlevlerinin iyi bir şekilde anlaşılması gerekiyor. Eksiği olanlar BURADAKİ yazıyı inceleyebilir.