WikePage 2005.3 Güvenlik Açığı [Ilgili Kod] { index.php ~ 439 - ... } if( $HTTP_POST_VARS['wiki'] == $page_admin ){ if($HTTP_POST_VARS['password0'] == "" ){ //İlk defa şifre değiþtirme modu. if($HTTP_POST_VARS['password1'] != "" && $HTTP_POST_VARS['password2'] != "" ){ if($HTTP_POST_VARS['password1'] == $HTTP_POST_VARS['password2']){ $passworks="1"; $fp = fopen("passwd.php","w+"); fwrite ($fp, ' $adminpassword = "'.crypt($HTTP_POST_VARS['password1'], "CW").'"; $passworks="'.$passworks.'";?>'); die("$lang_passsuccess
$lang_returnhomepage"); [Sorun] Daha onceden bir admin sifresi belirlenmis olsa da, "password0" POST metodu ile "" olarak aktarilirsa, _direk_ "ilk defa sifre degistirme modu"na gecis yapilabilir. Bunun sonucunda onceden belirlenmis bir admin sifresi olsa dahi, kullanici bu sifreye gereksinim duymadan istedigi bir sifreyi atayabilir. [Uygulama] wiki=Admin password0= password1=DENEME password2=DENEME seklindeki bilgileri index.php'ye POST metodu ile aktaran herhangi bir sayfa sifreyi degistirmek icin kullanilabilir. veya anasayfadan erisilebilen "Administration" sayfasinda bulunan formdaki ilk kisim bos birakilip yeni sifreler girildiginde de ayni sey basarilabilir. [Cozum Onerisi] Kodlarda su sekilde bir degisiklik yapilabilir: if( $HTTP_POST_VARS['wiki'] == $page_admin ){ if($HTTP_POST_VARS['password0'] == "" ){ / *********************************** if( isset($adminpassword) ) die("Eski sifre bolumunu doldurunuz!"); / *********************************** //İlk defa şifre değiþtirme modu. if($HTTP_POST_VARS['password1'] != "" && $HTTP_POST_VARS['password2'] != "" ){ if($HTTP_POST_VARS['password1'] == $HTTP_POST_VARS['password2']){ $passworks="1"; $fp = fopen("passwd.php","w+"); fwrite ($fp, ' $adminpassword = "'.crypt($HTTP_POST_VARS['password1'], "CW").'"; $passworks="'.$passworks.'";?>'); die("$lang_passsuccess
$lang_returnhomepage"); Tabii ki cozum sizin takdirinize bagli.