За последнее время участились случаи взлома сайтов на CMS DataLife Engine, это связано с новоиспеченной уязвимостью в популярном движке. Думаю пора открыть завесу тайны и рассказать как использовать эту дыру и как уберечь свой сайт. Почему я это делаю спросите Вы, отвечаю - больше половины проектов обновились до DLE 9.0, а на старые версии поставлены заплатки. Не расстраиваетесь, еще можно отыскать "дырявые" сайты, администратор которых не следит за выходом исправлений. В полной новости вы узнаете как взломать сайт на DLE и как уберечь свой проект от покушений.
Взлом сайта на DLE версии ниже 9.0, инструкция (Работаем через браузер Opera 10).
1. Заходим на сайт жертвы
2. Регистрируемся и авторизуемся на сайте
3. Переходим по ссылке http://site.ru/engine/images.php (где site.ru - адрес жертвы)
4. Открываем исходный код открытой нами страницы и после:
Quote
<input type="hidden" name="area" value=''>
(строка может немного отличаться и повторяться 2 раза, вставляем после 1й)
вставляем:
Quote
<input type="hidden" name="serverfile" value='../../engine/data/dbconfig.php'>
Нажимаем в браузере, под вкладками Применить изменения
5. После этих действий необходимо проверить работоспособность дырки, для этого на странице http://site.ru/engine/images.php, чей исходный код мы редактировали пунктом выше, нажимаем Загрузить. В списке загруженных файлов должен появиться dbconfig.php, мы можем продолжить...
Что бы скачать файл конфига мы должны навести на него указатель мыши и посмотреть ID, затем через Исходный код страницы / Применить изменения мы вставляем в любое место страницы сайта жертвы ссылку вида:
Quote
<a href='http://site.ru/engine/download.php?id=ID_файла'>[download]</a>
и скачиваем файл dbconfig.php с данными для входа в phpMyAdmin, адрес которой обычно site.ru/phpmyadmin/ или site.ru/myadmin/
Только что я рассказал Вам как взломать сайт на DataLife Engine, удачи.
Сейчас настало время перейти к рассмотрению способа защиты от взлома, описанного выше:
1. Открываем файл engine/inc/files.php и находим:
Quote
$serverfile = trim( htmlspecialchars( strip_tags( $_POST['serverfile'] ) ) );
заменяем на:
Quote
if ($member_id['user_group'] == 1) $serverfile = trim( htmlspecialchars( strip_tags( $_POST['serverfile'] ) ) ); else $serverfile = '';
if ( $serverfile != '' ) {
$serverfile = str_replace( "\", "/", $serverfile );
$serverfile = str_replace( "..", "", $serverfile );
$serverfile = str_replace( "/", "", $serverfile );
$serverfile_arr = explode( ".", $serverfile );
$type = totranslit( end( $serverfile_arr ) );
$curr_key = key( $serverfile_arr );
unset( $serverfile_arr[$curr_key] );
if ( in_array( strtolower( $type ), $allowed_files ) )
$serverfile = totranslit( implode( ".", $serverfile_arr ) ) . "." . $type;
else $serverfile = '';
}
if( $serverfile == ".htaccess") die("Hacking attempt!");
2. Открываем файл engine/classes/thumb.class.php и находим:
Quote
$this->img['des'] = imagecreatetruecolor( $this->img['lebar_thumb'], $this->img['tinggi_thumb'] );
добавляем выше этой строки:
Quote
if ($this->img['lebar_thumb'] < 1 ) $this->img['lebar_thumb'] = 1;
if ($this->img['tinggi_thumb'] < 1 ) $this->img['tinggi_thumb'] = 1;
Готово.