Kayıtlar

vulnerability etiketine sahip yayınlar gösteriliyor

TR | Rom-0 Zafiyeti

Resim
Merhabalar, Bu yazımızda sizlerle Allegro RomPager da bulunan başka bir zafiyeti inceleyeceğiz. Bu zafiyet önceki Misfortune Cookie yazısında incelediğimiz zafiyete benzer şekilde saldırganın yönetim paneline erişimini sağlıyor. Zafiyetin nedeni modem ayarlarının yedeğini aldığınızda oluşan "rom-0" isimli backup dosyasının password protected olmamasıdır. URL üzerinden dosyaya erişmeye çalıştığımız takdirde hiçbir şifre talep edilmeden bu dosya indirilebilecektir. Elde edilen bu dosyanın içeriği LZS algoritmasıyla sıkıştırılmış olup online decoderlar ile çözüldükten sonra içeriğine rahatça erişilebilir. Peki bu dosyanın içerisinde hangi bilgiler var? Router'ın konfigurasyon bilgileri ve daha da önemlisi giriş için kullanılan kullanıcı adı ve parola! Bu bilgileri elde ettikten sonra yönetim paneline erişmemiz ise an meselesi. Gördüğünüz üzere zafiyetin istismarı bu kadar basit. Etki alanını tahmin etmek isterseniz bu shodan raporuna bakmanız yeterli. ...

TR | Misfortune Cookie (CVE-2014-9222) Analizi

Resim
Bu yazımızda sizlerle etki alanı oldukça geniş olan ve yüksek risk içeren bir zafiyeti inceleyeceğiz. Misfortune Cookie olarak adlandırılan zafiyet routerlarda web arayüzü sunmak için kullanılan Allegro Rompager adlı gömülü web server uygulamasında bulunuyor. Bu yazılımın birçok marka/model routerda kullanılması zafiyetin etki alanını bir hayli genişletiyor. Zafiyet aracılığıyla saldıgan herhangi bir şifreye ihtiyaç duymadan router'ın web kontrol paneline erişim sağlayabiliyor. Bu da zafiyeti oldukça riskli bir hale getiriyor. Hadi incelemeye başlayalım. NOT: Yazıda kullanılan kod parçaları ve görseller alıntıdır.   0x00: Zafiyet Tespiti Zafiyetimizin istismar vektörü, adından da anlaşılacağı gibi, cookie verisi. Gelin önce sunucuya gönderilen cookie değerine bir bakalım. Gönderilen cookie'nin formatı "CX=value" şeklinde. Bunun sebebini web server'ın cookie'yi parse eden kısmına bakınca daha iyi anlıyoruz. ROM:8010E5B0 loc_8010E5B0: ...

SmashTheTux v1.0

Resim
Selamlar, Yakın zamanlarda dahil olduğum Canyoupwn.me projesi için hazırladığım sanal makine olan SmashTheTux dosyasını indirmek için  tıklayın. Bu VM, Binary exploitation dünyasına adım atmak isteyenleri hedeflemektedir. Toplamda 9 aşama bulunan SmashTheTux'da her aşama farklı bir zafiyeti veya istismar yöntemini tanıtmaktadır. Sorular temel seviye olup daha gelişmiş istismar teknikleri serinin 2. makinesinde ele alınacaktır. Bu açıdan yeni başlayacaklar için ideal bir alıştırma ortamı olacağını düşünmekteyim.

Useful Resources

Converting a snapshot file to memory dump using the vmss2core tool (2003941)  Memory forensics: Using Volatility Toolkit to extract malware samples from memory dump  Local Linux Enumeration & Privilege Escalation Cheatsheet Searching code vulnerabilities with MSFrop

Burada Heap'in Borusu Öter!

Resim
Dün nereden çıktıysa bilmiyorum bi heap overflow'a girişesim geldi.  Protostar'ın heap challengeları ile başlayayım dedim. Unutursam diye çözümlerinide buraya yazıyorum. Heap 0 #include <stdlib.h> #include <unistd.h> #include <string.h> #include <stdio.h> #include <sys/types.h> struct data { char name[64]; }; struct fp { int (*fp)(); }; void winner() { printf("level passed\n"); } void nowinner() { printf("level has not been passed\n"); } int main(int argc, char **argv) { struct data *d; struct fp *f; d = malloc(sizeof(struct data)); f = malloc(sizeof(struct fp)); f->fp = nowinner; printf("data is at %p, fp is at %p\n", d, f); strcpy(d->name, argv[1]); f->fp(); } İki adet struct var ve main içerisinde malloc ile bunlara heap'ten yer ayırıldı...

Today's Learning

CTF çözdüğüm sıralarda öğrendiğim ufak tefek ama kritik bilgileri unutmamak maksadıyla burada paylaşıyorum. Bugün neler öğrendim Bir string'in boyutu değiştiğinde bellekteki adresi de değişir.   Debugger ile bir fonksiyonu incelemeye başlamadan önce fonksiyonun stack frame'ini öğren. Bunu bilmek sana stack'i analiz ederken kolaylık sağlar. Bir uygulama, dosya çağıracağı vakit dosyayı aramaya başlayacağı yer uygulamanın çalıştırıldığı dizindir.  Bir uygulamayı analiz ederken _init_ ve _finit_ fonksiyonlarını analiz etmekte fayda var. Böylece program açıldığı ve kapandığı sırada hangi işlemler yapıldığını bilebiliriz..  Bellek taşırma zafiyetini istismar ederken şayet stack'te yeteri kadar buffer alanı yoksa, shelcode'un başına sub esp, 0xN yönergesini yerleştirerek gerekli buffer alanını tahsis edebiliriz. (N: bize gereken byte miktarının hexadecimal karşılığı) Bellek taşırma zafiyetini istismar ederken şayet stack'te yeteri kadar buffer alanı yoksa ...

Exploit Analizi

Zamanında yabancı bir forum için yazdığım bir yazıyı arkadaşım Türkçe'ye çevirip yayımlamıştı. Faydalı bir yazı olduğunu düşündüğümden burada da paylaşmak istiyorum. Bugün sizinle bir exploitin işleyişini anlamak ve kullandığı güvenlik açığı hakkında daha fazla bilgi edinmek amacıyla exploit analizi yapacağız. Exploit analizi yapabilmek en az exploit geliştirmek kadar önemli bir konudur. Bazen exploit geliştiricileri zafiyet hakkında yeterli bilgi vermeyebilir veya siz zafiyet hakkında daha fazlasını bilmek isteyebilirsiniz. Exploit analizi yapabilmek, bu durumlarda yararlı olacaktır. Ayrıca exploitlerin genel anlamda nasıl çalıştığını anlamanıza da katkı sağlayacaktır. Exploit geliştirmede kullanılan en yaygın dillerden bazıları: Python, Perl, Ruby, PHP, C Bu dillerden en az birini bilmekte fayda var. WordPress’i ele geçirmek için PHP dilinde yazılmış basit bir RFU (uzaktan dosya yükleme) exploit’ini inceleyeceğiz. Hadi başlayalım. Analiz edeceğimiz exploit: http://1...

GDB ile Vakit Öldürmeceler

Resim
Dün GNU Debugger ile yaptığım alıştırmalar sırasında öğrendiklerimi gerek tekrar için gerekse geçerken gören olursa onlarda öğrensinler diye buraya yazıyorum. Herşey arkadaşımla OverTheWire'ın Narnia level 5 sorusunu çözerken başladı. #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv){ int i = 1; char buffer[64]; snprintf(buffer, sizeof buffer, argv[1]); buffer[sizeof (buffer) - 1] = 0; printf("Change i's value from 1 -> 500. "); if(i==500){ printf("GOOD\n"); system("/bin/sh"); } printf("No way...let me give you a hint!\n"); printf("buffer : [%s] (%d)\n", buffer, strlen(buffer)); printf ("i = %d (%p)\n", i, &i); return 0; } Bizden isteneni gerçekleştir...