PDA

Просмотр полной версии : Помогите со взломом своего же сайта


SeregaZ
12.07.2010, 01:35
суть в чем - нашел я как-то было дело хостинг на tut.su. радостный зарегистрировал сайтик. там еще php работает.
год наверное он меня радовал своим сервисом. а тут напасть случилась... закрывается он чтоли. новая регистрация не работает, фтп уже недели 2-3 не работает, через форму на сайт не заходит. соседей по несчастью по емейлам поспрашивал - тоже говорят не могут на свои сайты зайти.
все бы ничего. базу для автоматизации делопроизводства то можно скопировать. там тхт файлик. а вот на этом же сайтике лежит у меня автообновление для бота к чату. то есть если я напишу новую версию, то автообновление будет показывать что у моих клиентов самая свежая версия. многие из клиентов блондинки, догадаться зайти на сообщества в моем мире и скачать обновленную версию они в жизь не догадаются.
потом тамже на сайтике была у меня форма для "склеивания" профайлов для налоговых программ. она загружала эти самые профили, склеивала и выдавала ссылку на склееный.
так вот задача через эту форму попытаться закинуть новые файлы для автообновления, которые будут потом обновлятся с другого бесплатного хостинга. (этот я уж надеюсь не закроют. там сайтик мой уже больше 6 лет лежит. только там пхп нет, да для обновления бота он и не нужен.)
проблемы - в этой самой форме я поставил ограничение на загрузку по расширению - xml файлов. то есть задумка такая если в хмл файл вставить пхп код, и загрузить его через форму на сайт, а потом запустить зайдя на эту страничку. но вот незадача сервер не хочет хмл файл с пхп кодом обрабатывать как пхп. то есть он просто выдает содержимое пхп файла как хмл, а не исполняет его.
как можно выкрутится? админам самого хостинга писал. мертво все. сайт точно мой :)

xkor
12.07.2010, 04:14
фтп уже недели 2-3 не работаета не пробывал по ssh, вдруг прокатит)
а так надо изучать код загрузчика этих твоих xml, может и есть там дырка какаянить...

SeregaZ
12.07.2010, 14:54
ошибок вроде бы не оставил.
<body oncontextmenu="return false" align=center style="background: #EFF3FF; margin-top: 0px; margin-bottom:0px; cursor:default">
<?php

$f = htmlspecialchars($_POST['f']);

if ($f == 0) {
$data = date("mdgis");
$drname = "uploads/" . $data . "/";
$flname = "uploads/" . $data . ".txt";
mkdir($drname, 0777);

$fp = fopen($flname, "a+");
fwrite($fp, "");
fclose($fp);
}
else {
$data = $f;
$drname = "uploads/" . $data . "/";
$flname = "uploads/" . $data . ".txt";
}



$fname = ($_FILES['userfile']['name']);
$infachk = @file($flname);
$masivchk = "";


if ($fname == "MEGAPROFILE.xml") {
echo ("<script language=\"javascript\">alert(\"Профайл с именем MEGAPROFILE.xml загружать нельзя. Переименуйте его на любое другое имя, например test.xml и попробуйте загрузить еще раз.\");</script>");
echo ("<center><input type=button onclick=window.open('center.php?f=$data','main'); value='получить ссылку для скачивания мегапрофайла'></center>");
echo ("переименуйте MEGAPROFILE.xml в любое другое название и загрузите повторно");
exit();
}


foreach($infachk as $valchk) {
if ($valchk == $fname . "\r\n") {
echo ("<script language=\"javascript\">alert(\"Профайл с таким именем уже загружен. Если вы точно уверены что это профайл другой фирмы, переименуйте его и попробуйте загрузить еще раз.\");</script>");
echo ("<center><input type=button onclick=window.open('center.php?f=$data','main'); value='получить ссылку для скачивания мегапрофайла'></center>");
echo ("профайл с таким именем уже загружен!");
exit();
}
}


$uploaddir = $drname; // Папка куда закачивать файлы
$extentions = array(".xml"); // Массив разрешенных форматов файлов
$userfilesize = $_FILES['userfile']['size']; // Вычисление размера загружаемого файла
$maxfilesize = 20000; // Максимально допустимый размер файла
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);






if((in_array(strrchr($_FILES['userfile']['name'], "."),$extentions)) && ($maxfilesize >= $userfilesize)) //
{

// Если копирование произведено удачно, выводим сообщения
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) //
{
$fname = ($_FILES['userfile']['name']); // Вычисление имени файла и присвоение переменной
echo ("<script language=\"javascript\">alert('Файл $fname успешно закачан!');</script>");


$flname2 = '"' . $data . '"';

echo ("<script>top.up.upl.reset();top.up.upl.f.value=$flname2;</script>");

$fp = fopen($flname, "a+");
fwrite($fp, $fname . "\r\n");
fclose($fp);

echo ("<center><input type=button onclick=window.open('center.php?f=$data','main'); value='получить ссылку для скачивания мегапрофайла'></center>");
echo ("загруженные профайлы: ");
$infa = @file($flname);
$masiv = "";
foreach($infa as $val) {$masiv = $masiv . $val . ", ";}
echo ($masiv);

}
else
{
echo ("<script language=\"javascript\">alert(\"Ошибка при передаче файла на сервер!\");</script>");

}
}
// Если превышен максимальный размер файла
elseif ($maxfilesize < $userfilesize)
{
echo ("<script language=\"javascript\">alert(\"Превышен максимальный размер файла!\");</script>");

}
else
{
// Если расширение файла имеет недопустимое расширение
echo ("<script language=\"javascript\">alert('Файл имеет недопустимое расширение!');</script>");

exit();
}
?>
</body>

xkor
13.07.2010, 01:50
SeregaZ, можно попробовать в качестве имени файла передать строку оканчивающуюся нулевым символом (или может ещё каким управляющим символом), возможно тогда расширение обрежется