Buffer Overflow Zaafiyeti Olan Program Geliştirme

Burak Tahtacı
2 min readJan 2, 2021

--

Bu yazıda basitçe buffer overflow zaafiyetine sebep olabilecek örnek bir C programı yazımı anlatılacak ve daha sonra exploit edebilmek amacıyla çeşitli yorumlar yapılacaktır.

Photo by Danial RiCaRoS on Unsplash

Programı basitçe anlatmak gerekirse bir tane komut satırı parametresi alacak ve bunu bir karakter dizisinde saklayacak, ardından sakladığı bu değeri ekrana basacaktır.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int bar(char *arg, char *out)
{
strcpy(out, arg);
return 0;
}
void foo(char *argv[])
{
char buf[256];
bar(argv[1], buf);
fprintf(stdout,"%s",buf);
}
int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "target1: argc != 2\n");
exit(EXIT_FAILURE);
}
setuid(0);
foo(argv);
return 0;
}

Fonksiyonlara hızlıca göz atacak olursak foofonksiyonu komut satırı parametrelerini alıp bar fonksiyonunu çağırıyor. Bu fonksiyon da strcpy fonksiyonunu kullanarak kullanıcının girmiş olduğu komut satırı parametresini ilgili bellek alanına kopyalamaktadır.

İşte buffer overflow zaafiyetine sebep olan durum da burada gözükmektedir. Kullanıcıdan gelen değerin uzunluğu 256'dan fazlaysa bellek taşacak ve kullanıcı izni olmayan alanlara erişebilecektir. Buffer overflow saldırısına hedef olabilecek bir C programının kaynak kodlarını inceledik yazı dizisinin ilerleyen adımlarında bu uygulamada bulunan zaafiyeti nasıl keşfedip kullanacağımıza değineceğiz.

Buffer overflow’un ne olduğu ile ilgili temel bilgileri almak için daha önce yazdığım blog yazısını ve Stanford CS155 dersinin materyallerini takip edebilirsiniz.

--

--

Burak Tahtacı
Burak Tahtacı

Written by Burak Tahtacı

TA1KNT / Computer Engineer / RC Hobbyist / Data Science and Machine Learning Lover also interested in Information Security

No responses yet