Merhaba arkadaşlar;

Bu gün boş vaktimde codderin yazdığı account sistemini incelerken bir çok açık ile karşılaştım. Genel anlamda ufak bir çok güvenlik açığını engelliyor olsa da bir profesyönel için şu anda çerez durumunda diyebilirim. Script 2004 tarihinde yazıldığı için pek de codderi suçlamak istemiyorum ancak şu anki yeni teknlojiye ve php5 in bir çok güvenlik önlemine sahip olan fonksyonlarının yanında pek de masum durmuyor. Birazdan açıklardan bahsediceğim ama tabiki hackleme yöntemini hiç bir şekilde vermiyeceğim.

Gelelim açıklarımıza :
1 - En önemli açıklardan birisi : Session HiJacking.
* Kodları biraz incelediğimiz zaman yapılan tüm işlemler session nesnesindeki id değerine göre yapıldığını görebilirsiniz
örnek :
Case "bilgilerim":
if (!is_numeric([b]$_SESSION[userid][/b])) { die("Buraya login olmadan erişemezsiniz"); } 
	echo "<table width=310><tr><th><a href=$PHP_SELF>Görünüşüm </a> | <a href=$PHP_SELF?islem=bilgilerim>Bilgilerim</a> | <a href=$PHP_SELF?islem=logout>Çıkış</a></th></tr></table><br>";

if (isset($_POST[isim])) {
	$hata ="";
	$_POST[isim] = trim($_POST[isim]);
	$_POST[password] = trim($_POST[password]);
	$_POST[email] = trim($_POST[email]);
	$_POST[tel] = trim($_POST[tel]);
	$_POST[icq] = trim($_POST[icq]);
	extract(mysql_fetch_assoc(mysql_query("select * from uye where id='$_SESSION[userid]'")));

Bu örnekde gördüğünüz gibi eğer sessiondaki değeri değiştirebilirsek ( ki değiştirmek orta seviye bir hackerin rahatlıkla yapabileceği birşey ) girdiğimiz herhangi bir iddeki kullanıcının bilgilerine ulaşıp şifre girmeden bütün işlemleri yapabiliriz.

2. açık : SQL Injection
- Bu açık ise alttaki kod bölümünde istediğimiz bir kullanıcının şifresini kendimize mail attırmasını sağlıyor.
Case "unuttum":
if (isset($_POST[email])) {
    echo("select * from uye where email='$_POST[email]'");
$sorgu = mysql_query("select * from uye where email='$_POST[email]'");
if (!mysql_num_rows($sorgu)) {
	echo "Böyle bir email bulunamadı";
} else {
	mail_sifre_hatırlat($sorgu);
	echo tablogoster("Şifre hatırlatma mailınız gönderildi");
}

PHPdeki trim ve strip_slashes ne kadar sağlam çalıştığına inandırsa da bypass edilebilir durumdadır. Alternatif sistemleri denemenizde fayda var. Veyahut eğer bir php geliştiricisiyseniz kodu geliştirmenizde fayda var.


@Ekleme --
Lainin account sistemine henüz bakıyorumki tamamen giriş seviyesinde bi php programcısın kırabileceği bir sistemdir. Hiç bir şekilde girilen veriler trimlenmemiş.
teşekkürler bilgi için..
Üyelik sıstemlerının nerdeyse tamamında açık var , işi bılen adam 2dakıkada açığı bulabılıyor.Acc sistemi kullanmayi hiç sevmıyorum bu yüzden.
belki boş bir zamanımda bu açığı doldurabilecek bir script hazırlarım :)
Ultio : belki boş bir zamanımda bu açığı doldurabilecek bir script hazırlarım :)

Bence php bilen bir kişi adam gibi account sistemi yazsa daha ii olur..
Açık yakalayabilecek kadar iyi biliyorum :)
@Ultio;

Selam,

2. Sql inj için verdiğin örnekde POST method'da script ve or komutları ' " parametrelerini kullanamazsınız. Get method olmadığı için sistem hata vericekdir. Get Method olsaydı pekala ama post method php5 sürüm olan bi serverda hiç bi işlem yapmaz diye düşünüyorum (kendi yazdığım portaldan biliyorum. Otomatik addslashes ekliyor. strip_tags,mysql_spacial_chars,addslashes gibi şeyler gerekiyor bu arada Trim komutunun işlevini biliyormusun bilmiyorum bilmeyen arkadaşlara bahsedeyim trim($komut) dediğinizde değişken içindeki sağdaki ve soldaki boşlukları siler trim_left($degisken,"-"); yaparsaniz sağ tarafda boşluk varsa - olarak değiştirir.


1.Açık için bişey diyemicem çünkü session domain'e yönelik oluşturduğum için ini_set den bu konuda işlem hiç yapmıyorum.

Bilgilendirme için sağol kullanan arkadaşlara yardımcı olmuş olabilir.
Programlama bilen bir kişi "0" dan bir account sistemi yazarsa daha iyi olur bence..

hemde sunucu açanlar faydalanır.
Xearth : Programlama bilen bir kişi "0" dan bir account sistemi yazarsa daha iyi olur bence..

hemde sunucu açanlar faydalanır.

Kımse bunu durduk yere yazmaz.Yazsa bile belli bir ücret alir.Bukadar kolay değıl herşey.
@Ultio, seni kırmak veya yadırgamak gibi bir niyetim yok, Lai Üyeliği kurup kırmayı denedin mi ? guvenlik.php içinde sanırım gerekli güvenlik önlemleri alınmıştı.
@Tukrok

girisdogrula.php

$skullanici =@$HTTP_POST_VARS["skullanici"];
$ssifre = md5($HTTP_POST_VARS["ssifre"]);
$skullanici = strtolower($skullanici);

$sorgu = "SELECT * FROM uyeler WHERE uyeadi='$skullanici'";
(: Valla işin aslı güvenlik işiyle ilgili pek bilgim yok. (Sanırım herkesin benim gibi dürüst olmasını beklemekten olsa gerek ) Bir arkadaşım güvenlik scripti yazmış include ettim.

@Ultio gözden kaçmış, bir de askerlik psikolojisi vardı.. Yüklenmeyin bana :D
Ben genel anlamda bi teste sunmuşdum hani amacım hiç kimseyi karalamak değilki :). Yine de emeğine sağlık modifiye edip kullanılabilir. Ancak arkadaşların bu açıklar hakkında bilgisi olması önemli. Çünki account sistemi sunucunun bel kemiğidir.
session id değerlerinin userid ile alakası olmadığından nası kırabilceğinde merak konusu. nerden bulupda kırıcaksın.

Üye Ol veya Giriş Yap

Bu forum başlığına mesaj atmak istiyorsanız hemen üye olun veya giriş yapın.