İPUCU

Mail Güvenliği İstenmeyen e-postaları, kötü amaçlı yazılımları, kimlik avı girişimlerini ve gelişmiş hedefe yönelik saldırıları hakkında birçok bilgiye bu sayfamızdan ulaşabilirsiniz.

Seçenekler

PHP E-Posta Enjeksiyonu / R4V3N

R4V3N - ait Kullanıcı Resmi (Avatar)
Dergi Çeviri Editörü (Deneyimli)
Üyelik tarihi:
07/2016
Nereden:
Kocaeli
Yaş:
21
Mesajlar:
5.998
Konular:
320
Teşekkür (Etti):
683
Teşekkür (Aldı):
2052
Ticaret:
(0) %
3 Hafta önce
#1
Post
PHP E-Posta Enjeksiyonu / R4V3N
Wikipedia'da e-posta enjeksiyonunda:

"E-posta enjeksiyonu, e-posta göndermek için kullanılan internet uygulamalarında meydana gelebilecek bir güvenlik açığıdır. HTTP Header Enjeksiyonunun e-posta versiyonudur. Aynı SQL enjeksiyon saldırıları gibi, bu açık da bir programlama dilinin diğerine gömüldüğünde oluşan genel bir açık sınıfından biridir.

Bir form, web uygulamasına veri gönderen bir web sayfasına eklendiğinde; kötü niyetli bir kullanıcı gönderilen mesaja alıcıların yeni bir listesi veya tamamen farklı bir mesaj gövdesi gibi fazladan bilgi eklemek için MIME formatını exploit'leyebilir. MIME formatı, bir mesajdaki bilgiyi sınırlamak için satır başı kullandığından ve sadece ham mesaj nihai hedefini belirlediğinden, gönderilen form verisine satır başı eklemek
binlerce mesajı tek seferde kullanılmak için basit bir ziyaretçi defterine olanak verir. Kötü niyetli bir spamcı bu taktiği çok sayıda mesajı anonim olarak göndermek için kullanabilir."
yazıyor.

Direkt linki: https://en.wikipedia.org/wiki/Email_injection

E-posta enjeksiyonu, PHP gömülü mail fonksiyonunu vuran bir çeşit enjeksiyon saldırısıdır. Saldırgana BBC, CC, Konu gibi herhangi bir mail başlık alanını enjekte etmeye izin verir ki bu da hacker'a kurbanlarının mail sunucusundan iletişim formuna kadar spam yaymasını sağlar. Bu nedenden dolayı bu saldırı E-posta Enjeksiyonu yada mail form spamlaması diye geçer. Bu açık sadece PHP ile sınırlı değildir. İmkan dahilinde kullanıcıların girdileri üzerine e-postalar gönderen neredeyse tüm uygulamaları etkileyebilir. Bu saldırının asıl gerekçesi hatalı kullanıcı girdi doğrulaması yada hiç doğrulama ve filtreleme olmamasıdır.

BBC & CC nedir? https://blog.atakdomain.com/mail-yaz...-bcc-ne-nedir/

E-Posta Enjeksiyonu Nasıl Çalışır?

E-posta enjeksiyonunun nasıl çalıştığını incelemek için tamamen PHP e-posta fonksiyonunun nasıl çalıştığını bilmemiz gerekir. Aşağıdaki PHP fonksiyonuna bir göz atalım:

Kod:
manual Mail() :

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )


Gördüğünüz üzere üç tane zorunlu parametre (“to, subject, ve message”), bazı diğer seçmeli parametreler ve Boolean bir değer döndüren fonksiyonumuz var.

Şimdi de açıklı kodumuza bir göz atalım:

Kod:
<?php
 $to="webmaster@victim.com";
 if (!isset($_POST["send"])){
   ?>
   <form method="POST" action="<?=$_SERVER['PHP_SELF'];?>">
   From: <input type="text" name="sender">
   Subject : <input type="text" name="subject">
   Message :
   <textarea name="message" rows="10" cols="60" lines="20"></textarea>
   <input type="submit" name="send" value="Send">
   </form>
   <?
 }else{
   // the form has been submitted
   $from=$_POST['sender'];
   // send mail :
   if (mail($to,$_POST['subject'],$_POST['message'],"From: $from\n")){
     echo "Your mail has been sent successfully";
 }else{
]
    echo "An error has been occured !";
   }
 }
 ?>


Bu kod gösterim amaçlı kullanılacak ve açıklamak için de 3 parçaya ayıracağız.

İlk Kısım

Kod:
<?php
 $to="webmaster@victim.com";
 if (!isset($_POST["send"])){
?>


Bu kod, formun gönderilip gönderilmediğini kontrol edecek. Kodun "True veya False" olması halinde farklı cevap gelecek. Eğer "True" dönerse, form gönderilmemiş demektir. Form tekrar çıkacaktır karşımıza ve kullanıcı girişini bekleyecektir. Diğer yandan eğer "False" dönerse, form gönderilmiş ve e-posta gönderilecektir demektir.

İkinci Kısım

Kod:
 <form method="POST" action="<?=$_SERVER['PHP_SELF'];?>">
   From: <input type="text" name="sender">
   Subject : <input type="text" name="subject">
   Message :
   <textarea name="message" rows="10" cols="60" lines="20"></textarea>
   <input type="submit" name="send" value="Send">
   </form>


Bu kod, ilk kısım "True" döndürürse kullanıcı girişi isteyecek olan HTML form kısmıdır.

Üçüncü Kısım

Kod:
}else{
   // the form has been submitted
   $from=$_POST['sender'];
   // send mail :
   if (mail($to,$_POST['subject'],$_POST['message'],"From: $from\n")){
     echo "Your mail has been sent successfully";
 }else{
]
    echo "An error has been occured !";
   }
 }
 ?>


Özellikle mail($to,$_POST[‘subject’],$_POST[‘message’],”From: $from\n”) kısmına bakarsanız, mail fonksiyonu konusunu mesajını ve formunu parametrelerden alıyor ve maili gönderiyor. Eğer başarılı bir şekilde gönderirse, "Your mail has been sent successfully,” (Mailiniz başarılı bir şekilde gönderilmiştir) çıktısı veriyor ve eğer bir hata olursa "An error has been occurred." (Bir hata oluştu) diyor.

O zaman sorun nerede? Sadece "E-Posta Enjeksiyonu" için değil herhangi bir enjeksiyon saldırısı için asıl problem, kullanıcı girişine veya hatalı giriş doğrulamaya güvenmektir. Kodun üçüncü kısmında da görebileceğiniz üzere mail fonksiyonu, değişkenini herhangi bir girdi doğrulaması olmadan kullanıcıdan direkt olarak alıyor. Yani saldırgan, geliştiricinin direkt olarak kullanabileceği konu, mesaj ve form parametrelerinin değerlerini kontrol edebiliyor.

E-Posta Enjeksiyonu Açıklaması

Bu işi açıklamak için yukarıdaki zafiyetli kodu kullanacağız. Ayrıca aşağıdaki değerli bir mail fonksiyon parametresi göndereceğiz:

Kod:
mail(“admin@website.com” , “Call me urgent” , “Hi,\nPlease call me ASAP.\nBye” , “From: TrustSender@domain.com\n”)


Çıktısı aşağıdaki gibi olacaktır:



(
Kime: yönetici@website.com
Konu: Beni Acil Ara
Kimden: gönderen@domain.com
Merhaba,
Beni lütfen olabildiğince çabuk ara.
Hoşçakal
)


Saldırgan gözünden, mail başlığına enjekte edilebilecek birçok ilave alan var. Detaylı bilgi için RFC 822. Örneğin, saldırgana mesaj için daha fazla alıcı eklemeyi sağlayan CC veya BCC enjekte edebiliriz. Ama yeni bir değişken eklemeden önce her bir alanı diğerinden ayıracak yeni bir satır eklememiz gerekir. Yeni satırın onaltılık değeri "0x0A"dır. Misal:

Gönderen değişkeninden sonra CC ve BCC enjekte etme:

Kod:
From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com


Böylece mesaj, eklenen alıcılara gidecektir.

Değişkene enjekte etme:

Kod:
From:sender@domain.com%0ATo:attacker@domain.com


Böylece mesaj, asıl alıcısına ve saldırgana gidecektir.

Konu değişkeni enjekte etme:

Kod:
From:sender@domain.com%0ASubject:This’s%20Fake%20Subject


Bu sahte başlık, orijinal başlığa eklenecektir veya bazı durumlarda da onunla yer değiştirecektir. Tamamen mail servisine kalmış bir şey.

Mesajın gövdesini değiştirme:

İki yeni satır enjekte edin sonrasında mesajın gövdesini değiştirecek mesajınızı yazın.

Kod:
From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.


Çözüm Önerileri

- Asla kullanıcı girdi alanlarına güvenmeyin. Tüm kullanıcı girdileri güvenilmez ve potansiyel olarak kötücül düşünülmelidir. Güvenilmeyen girdileri işleyen uygulamalar; Buffer Overflows, SQL Injection, OS Commanding, Denial of Service ve Email Injection gibi saldırılara karşı savunmasız olabilirler.
- Kullanıcı verisini filtrelemek için Regex (Düzenli İfadeler) kullanın. Misal, girdi metninde (\r veya \n) arayabiliriz.
- ZEND mail, PEAR mail and swift mailer gibi bu sorunlara karşı koruma sağlayan dış bileşenler ve kütüphaneler kullanın.
- ModSecurity de sunucu seviyesinde e-posta enjeksiyonuna bir son verebilir. ModSecurity ile POST veya GET gövdesinde BCC, CC veya To taramak ve bunları içeren tüm şeyleri reddetmek mümkündür.
---------------------
If opportunity doesn't knock, build a door.

Telegram: @r4v3nnn
Konu R4V3N tarafından ( 3 Hafta önce Saat 23:52 ) değiştirilmiştir.
"P4RS - ait Kullanıcı Resmi (Avatar)
Green Team (Kıdemli)
Üyelik tarihi:
01/2017
Nereden:
Balkes
Yaş:
18
Mesajlar:
3.965
Konular:
369
Teşekkür (Etti):
707
Teşekkür (Aldı):
1530
Ticaret:
(0) %
3 Hafta önce
#2
Cevap: PHP E-Posta Enjeksiyonu / R4V3N
Güzel bir konu olmuş ellerinize sağlık.
---------------------
SolidStar

Twitter Telegram

Geldim, gidicem, hep de değişicem!
Şu kısacık hayatı kana kana içicem!
R4V3N - ait Kullanıcı Resmi (Avatar)
Dergi Çeviri Editörü (Deneyimli)
Üyelik tarihi:
07/2016
Nereden:
Kocaeli
Yaş:
21
Mesajlar:
5.998
Konular:
320
Teşekkür (Etti):
683
Teşekkür (Aldı):
2052
Ticaret:
(0) %
3 Hafta önce
#3
Cevap: PHP E-Posta Enjeksiyonu / R4V3N
Alıntı:
"P4RS´isimli üyeden Alıntı Mesajı göster
Güzel bir konu olmuş ellerinize sağlık.
Eyvallah whitered

Alıntı:
NoteBox´isimli üyeden Alıntı Mesajı göster
Raven abimiz geldiğine göre, artık kollarımızı sıvayalım
Est .d
---------------------
If opportunity doesn't knock, build a door.

Telegram: @r4v3nnn
Efy
Efy - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
12/2015
Nereden:
Öteki Taraf
Mesajlar:
5.683
Konular:
658
Teşekkür (Etti):
45
Teşekkür (Aldı):
1668
Ticaret:
(0) %
3 Hafta önce
#4
Cevap: PHP E-Posta Enjeksiyonu / R4V3N
Ne yaptın olmadığın dönemde makale biriktirip acısını mı çıkarıyorsun (: Emeğine sağlık.
R4V3N - ait Kullanıcı Resmi (Avatar)
Dergi Çeviri Editörü (Deneyimli)
Üyelik tarihi:
07/2016
Nereden:
Kocaeli
Yaş:
21
Mesajlar:
5.998
Konular:
320
Teşekkür (Etti):
683
Teşekkür (Aldı):
2052
Ticaret:
(0) %
3 Hafta önce
#5
Cevap: PHP E-Posta Enjeksiyonu / R4V3N
Alıntı:
Efy´isimli üyeden Alıntı Mesajı göster
Ne yaptın olmadığın dönemde makale biriktirip acısını mı çıkarıyorsun (: Emeğine sağlık.
Yok beaaa nerdee :s

Dün çevirdim attım, arada paylaşırım.
---------------------
If opportunity doesn't knock, build a door.

Telegram: @r4v3nnn
CH4M3 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2017
Nereden:
php island
Mesajlar:
1.766
Konular:
91
Teşekkür (Etti):
530
Teşekkür (Aldı):
527
Ticaret:
(0) %
3 Hafta önce
#6
Cevap: PHP E-Posta Enjeksiyonu / R4V3N
Siteler, içinde frontend (ön tarafı) ve backend (arka tarafı) olarak ikiye ayrılıyor. Frontend herkese görünen kısım, backend ise kimsenin göremeyeceği sunucu taraflı arka tarafta çalışan kodlar.

Dolayısıyla burada dikkat edilmesi gereken ve Siteler kodlanırken yapılan, hatta zamanında benim de küçük çaplı yaptığım en yanlış husus, sunucu taraflı kodları, FrontEnde (html, javascript) göre kodlamaktır. yani Önlemini Html javascript kodlarında değil, sunucu taraflı çalışan kodlarında (php, asp artık her ne ise) yapman gerekiyor. Çünkü Frontend değiştirilebilir, oynanabilir, baştan düzenlenebilir. En aşina olduğunuz örneklerden biri, zamanında çoğu kişinin "Bak kanka şimdi şifreni buraya yaz." dedikten sonra input tagındaki "type" attribute ü kaldırıp hackerlık yapması örneğidir

Ellerine sağlık Hocam, Bunu gördüysek devamı bol bol gelecek demektir

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı