php güvenliği etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
php güvenliği etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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