Merhabalar, bu konumda sizlere @Maveraün Nehr hocamın isteği ile deneyeceğim BufferOverflow açığını C dili üzerinde anlatacağım. Öncelikle açığı anlatayım. BufferOverflow bellek taşması ile gerçekleşen bir açıktır. İnternette araştırırsanız linux için bir sürü video bulabilirsiniz ben Windows için anlatacağım. Öncelikle bu açıkta örnek olarak kullanıcıdan bir input alacağız. malloc ile bellek üzerinde çok küçük bi yer ayırıyoruz. Sonra koşulla mallocta ayırdığımız alanın üstünde input alınırsa gizliKomut() çalıştır diyoruz. Diyebilirsiniz ki, direkt kod çalıştırsak daha iyi değil mi? Ben burada size farklı bir yol anlatıyorum en iyi yol bu değildir.
Kod Yazımı
Öncelikle ben burada C ile deniyorum. İlerleyen zamanlarda Python, C++ gibi dillerde de paylaşmayı düşünüyorum. Şimdi başlayalım. Aşağıdaki şekilde include satırlarımız.
Ardından gizliKomut() oluşturalım.
Ben test için Merhaba yazdıran bir komut yazdım. Burada cmd için kod yazmanız gerektiğini unutmayın. Şimdi diyebilirsiniz ki ben rat indirip çalıştırtmak istiyorum. Ya da farklı işlemler yapmak istiyorum. Gidin ChatGPTden yapmak istediğiniz işlemi yazın ve cmd kodu isteyin tek satırlık. Kendisi gayet güzel şekilde verecektir. Ayrıca bu kodun benim size verdiğim kod için olduğunu söylemeniz gerekiyor zira C syntaxında PATH yolları \ şeklinde değil // şeklinde geçiyor.
Şimdi ana fonksiyonu yazalım. Yani bellek ayarı input vs. burada yapılacak.
Malumunuz gets kullanınca VS bile uyarı veriyor. Çünkü ciddi bir açık bu. Şimdi de çalıştırma kodunu yazalım.
Toplam kodu vereyim.
Evet. Öncelikle bu mükemmel fikri verdiği için @Maveraün Nehr hocama teşekkür ederim. İyi kullanımlar dilerim.
Kod Yazımı
Öncelikle ben burada C ile deniyorum. İlerleyen zamanlarda Python, C++ gibi dillerde de paylaşmayı düşünüyorum. Şimdi başlayalım. Aşağıdaki şekilde include satırlarımız.
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
C:
void gizliKomut() {
// Burada çalıştırmak istediğimiz işlemi gerçekleştiriyoruz.
system("echo Merhaba");
}
Şimdi ana fonksiyonu yazalım. Yani bellek ayarı input vs. burada yapılacak.
C:
void ana() {
char *tampon = (char *)malloc(0 * sizeof(char)); // 0 karakterlik yer ayırıyoruz ki komutun çalışma olasılığı bu testte maksimum olsun.
printf("Lütfen adınızı girin:");
gets(tampon); // Buffer overflow açığı için gets kullanıyoruz.
printf("Adınız: %s\n", tampon);
// Inputa 0dan fazla karakter girilirse gizlikomut çalıştırılacak.
if (strlen(tampon) > 0) {
gizliKomut();
}
free(tampon);
}
C:
int main() {
ana();
return 0;
}
Toplam kodu vereyim.
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void gizliKomut() {
// Burada çalıştırmak istediğimiz işlemi gerçekleştiriyoruz.
system("echo Merhaba");
}
void ana() {
char *tampon = (char *)malloc(0 * sizeof(char)); // 0 karakterlik yer ayırıyoruz ki komut her türlü çalışsın.
printf("Lütfen adınızı girin:");
gets(tampon); // Buffer overflow açığı için gets kullanıyoruz.
printf("Adınız: %s\n", tampon);
// Inputa 0dan fazla karakter girilirse gizlikomut çalıştırılacak.
if (strlen(tampon) > 0) {
gizliKomut();
}
free(tampon);
}
int main() {
ana();
return 0;
}
Evet. Öncelikle bu mükemmel fikri verdiği için @Maveraün Nehr hocama teşekkür ederim. İyi kullanımlar dilerim.





