Komut Çalıştırma-Command Execution

Command Execution yani Komut Yürütme zaafiyetleri bir  zaafiyeti barındıran script üzerinden sistemde dilediği şekilde kod çalıştırmasına sebep olmaktadır. Bu zaafiyet script üzerinden işletim sistemine çağrı yapar yani cmd-shell komutlarını çalıştırır bu yönüylede RCE(Remote Code Execution)‘den farklıdır.Scriptte herhangi bir denetleme  olmadığından zafiyet kaynaklanmaktadır.

Biz anlatımımda WebForPentester ve bWAPP  sanal lab ortamlarını kullanacağım…

bWAPP üzerinden başlayalım…

 

Yukarıda görüldüğü üzere DNS lookup işlemi gerçekleştiren bir scriptimiz var.Burdan anlamamız gereken bu işlemler için terminal komutlarının çalıştırıldığıdır.

Burada  kullanılan komutumuz  nslookup www.glos.ac.uk

Biz eğer şöyle bir komut yazarsak ;

www.glos.ac.uk && cat /etc/passwd  ekrana hem  lookup çıktısını hemde bizim istediğimiz /etc/passwd‘i  bastırmış olacağız.

 

Sistemde kod çalıştırabildiğimizin farkına vardık.

www.glos.ac.uk; ls  komutu ile dizinde bulunan dosyaları görebiliriz :

 

 

www.glos.ac.uk; cd .. && ls komutumuz ile bir üst dizindeki dosyaları görelim:

 

 

Diğer örneğimizi incelyelim :

; ve && karakterinin engellendiğini görüyoruz herhangi bir çıktı alamadık ;

 

PIPE ( ” | ” ) karakterini kullanarak deneme yapalım :

www.glos.ac.uk | cat /etc/passwd

 

WebForPentester‘daki örneklerimize göz atalım :

İlk örneğimize baktığımızda 127.0.0.1‘e ping atıldığını görüyoruz :

 

Adresimizi değiştirip bir deneme yapalım :

 

2 tane paket belirttiğimiz adrese gönderildiğini görüyoruz.Yani ping paketleri gönderilip alındığına göre komut çalıştırıldığının farkına vardık..

Yine bir denetleme olmamasından kaynaklanan zafiyet sonucu biz  çalıştırılan ping komutunun yanına kendi komutlarımızı yazarak işlemler gerçekleştireceğiz :

www.glos.ac.uk; cat /etc/passwd

 

Görüldüğü üzere  komutumuz çalıştı.

Bulunduğumuz dizine null.txt adlı bir metin belgesi bırakmak istiyoruz :

ping www.glos.ac.uk; echo “zafiyet mevcut.” > null.txt; cat null.txt (ping yazmamın sebebi ekranda ping komutunun çıktısını görmemek)

 

Dizinimize baktığımızda metin belgesinin oluştuğunuda göreceğiz :

 

Diğer örneğimize göz atalım:

Burada komutumuz çalışmadı ve bize Invalid IP Adress hatası aldık yani geçersiz ip adresi.Burada IP adresinin geçekten bir IP olup olmadığı kontrolü var.

 

kaynak kodumuza bakalım :

Koruma tek satır olarak uygulanmakta yani bir alt satıra geçerek komutumuzu çalıştırmayı deneyelim:

Bunun için newline(\n)‘ın encode hali %0A kullanacağız..

 

Görüldüğü üzere komutumuzu çalıştırdık.

 

Diğer Örneğimize bakalım:

Kaynak kodumuz:

127.0.0.1;ls  yazarak sonucumuza bakalım :

 

Komutumuzu yazdıktan sonra URL’de sadece 127.0.0.1 görüyoruz.Burada diğer örnekte olduğu gibi IP üzerinden bir önlem söz konusu burada  biz 127.0.0.1;ls yazdığımızda  yönlendirme yapılıyor.

Peki sizce kodlar çalışıyor mu ?

GET isteği yaparak bakmayı deneyelim :

burada yönlendirme olduğunu durum kodundan görebiliyoruz.

İsteğimizi yapalım:

 

 

Komutlarımızın çalıştığını farkettik.Kodlar çalıştıktan sonra yönlendirme yapılıyor  yeteri kadar iyi bir güvenlik mekanizması olmadığını anlıyoruz…

 

 

Leave a reply:

Your email address will not be published.

Site Footer