Uygun Şekilde Kullanılmayan PHP strcmp Fonksiyonunun İstismar Edilerek Kimlik Doğrulamasının Atlatılması

0
1079
views
Web uygulamaları sızma testleri sırasında uygulama geliştiricilerin kullandığı fonksiyonların zafiyetleri istismar edilebilir. Bu yazıda, web hizmeti veren IMF:1 sanal makinesindeki PHP strcmp fonksiyonunun geri dönüş değeri uygun şekilde kontrol edilmemesinden kaynaklı olarak kimlik doğrulaması atlatılarak oturum açılabilecektir.

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

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

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

 

IMF:1 sanal makinesinde bir takım CTF adımları ile oturum açma ekranı keşfedilebilmektedir.

http://10.10.2.181/imfadministrator/

 

İletişim sayfasında da bir takım kullanıcı isimleri keşfedilir.

rmicheals@imf.local
akeith@imf.local
estone@imf.local

Kullanıcı adı olarak “rmichaels” harici bir değer verildiğinde “Invalid username.” hatası dönmektedir. Kullanıcı adı olarak “rmichaels” verilip yanlış parola girildiğinde ise “Invalid password” hatası alınmaktadır. Ancak kaba kuvvet saldırılarına rağmen oturum açılamayabilmektedir.

 

Talep ve dönen cevap sonucu Burp Suite gibi bir vekil uygulama ile görülebilir.

 

Sayfanın kaynak kodu incelendiğinde “user” ve “pass” değişkenleri ile kimlik bilgilerinin alındığı görülmektedir.

 

Oturum açma sayfasında PHP kimlik doğrulamasını atlatma zafiyetine sebep olabilecek “strcmp” fonksiyonu kullanılmaktadır. Bu fonksiyon 2 katarı (string) küçük/büyük harf duyarlı olarak karşılaştırmak için kullanılır. PHP “strcmp” fonksiyonunun detayları için manuel sayfası incelenebilir.

https://secure.php.net/manual/en/function.strcmp.php

 

IMF:1 sanal makinesinin içerisindeki ilgili PHP kodu (index.php) aşağıdaki gibidir.

 

Bu fonksiyon parametre olarak aldığı “pass” girdi alanına karşılık gelen değer ile kullanıcının gömülü (gerçek / mevcut) parolasını karşılaştırmaktadır. Eğer karşılaştırma sonucu SIFIR (“0“) ise oturumun açılabilecektir. Ancak, karşılaştırma sırasında bir hata alınması durumunda, fonksiyonunun geri dönüş değeri “NULL” olarak dönmektedir. Bu gibi bir hata durumunda geri dönüş değeri “==” ile eşitlik şeklinde karşılaştırılırsa, bir uyarı mesajı verilir ve bunun yanında bir zafiyete sebebiyet olunabilir. Alınacak uyarı mesajı aşağıdaki gibi olabilir.

PHP Warning: strcmp() expects parameter 2 to be string, array given in …

 

Kullanılan sanal makinede kullanılan “strcmp($password, $_POST[“pass”]) == 0” şeklindeki karşılaştırma da hata alınması durumunda, “NULL == 0 = TRUE” şeklinde yorumlanarak DOĞRU sonuç verecektir. Eğer karşılaştırma işlemi “==” yerine “===” ile yapılsa idi; “NULL === 0 = FALSE” şeklinde yorumlanarak YANLIŞ sonuç verecektir. Detaylar için PHP manuelindeki yorum incelenebilir.

https://secure.php.net/manual/en/function.strcmp.php#113364

 

Zafiyetin istismarı için hataya sebebiyet verecek şekilde Katar (String) ve Dizi (Array) karşılaştırması yapılabilir. “pass” şeklindeki katar değişkeni yerine “pass[]” şeklindeki dizi değişkeni kullanılacaktır. Böylece oturum açılabilmiştir.

 

Kaynak:

https://reedphish.wordpress.com/2016/11/20/imf-walkthrough/
https://g0blin.co.uk/imf-vulnhub-writeup/

 

 

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.