Опубликованные статьи


Защита DLE от невидимых ссылок

После моей почти детективной истории, описанной в одной из предыдущих публикаций «Уверен, что на своем сайте зарабатываешь только ты?», на меня обрушилась масса вопросов, и предложений от моих знакомых. Разумеется, первым делом я проверил своих клиентов, счастливых обладателей DLE, а затем смог полностью окунуться в мир скуллхакеров и жалких задротов, которые до того измождены современным образованием, что без мануала фантазия уже не работает.

Где же я пропадал почти неделю? Нет, я не нажрался в говно, не бегал по кабакам и женщинам, я занимался исследованиями DLE и уничтожением уязвимостей. Самое прикольное, что было достаточно сложно только с первым сайтом, пораженным «мастерством» очередного задрота, остальные шли, словно семечки по часу на сайт. Все происходящее было похоже на азартную игру: вот ты поставил заплатки, вычистил все лишнее, и спустя пару часов видишь, что скуллхакер уже залил новое файло. Одно время стало даже интересно кто кого: умудренный жизненным опытом мозг, или задрот сидящий за компьютерным столом, нервно жамкающий мышку.

Пациенты шли потоком, и за пару дней пришлось вылечить десяток сайтов, и даже провести собственное расследование, которое я решил разбить на несколько частей, ведь разными были как взломщики, так и цели взлома сайтов на DLE. Сегодня вы услышите историю задрота zuser, которого мы будем в дальнейшем именовать просто Зюзя.

Цели и задачи нашего Зюзи, были абсолютно идентичны тому, что я описывал в вышеуказанном посте. Через уязвимость взламывается DLE, Зюзя попадает в админку, заливает шелл, и получает возможность управлять админкой и залитыми на сервер файлами удаленно. Как я выяснил, таким образом, даже создаются сетки под единым управлением, и в случае «потери бойца» ничего страшного не происходит. Но, не будем отвлекаться.

В папку uploads заливается папка с вредоносным кодом со свободной аббревиатурой. Она может иметь вид v3e4owy или любой другой подобный этому. В этой папке находится скрипт исполнения, который уже управляет функцией взаимодействия с сапой. Знаете, что меня поразило в этом скрипте? Надпись: This file is protected by copyright law and provided under license. Reverse engineering of this file is strictly prohibited. Что означает — Этот файл защищен законом об авторском праве предусмотренный лицензией. Любое изменение этого файла строго запрещено! Я охуел друзья! Задроты – взломщики заявляют об авторском праве! Сам закодированный скрипт уже отличался от предыдущих. Если ранее использовалась кодировка base64, то этот мне раскодировать не удалось. На одном из сайтов были тупо залиты скрипты, замаскированные под фото вида foto_42332.php. Вообщем наш Зюзя работал довольно изобретательно, с огоньком. Далее из админки в шаблоне main.tpl ставится код отображения ссылок. В моем случае он имел вид {lb}, но допускаю возможность размещения и иного задротского иероглифа. В работоспособном состоянии всей системы в папке engine/cache образуется еще один файлик function.php, где мы и сможем увидеть размещенные саповские ссылки.

Теперь возникает вопрос, как у Достоевского, «что делать?» Заходим в админку, и на главной странице нажимаем кнопку «Антивирус». После сканирования, вы увидите все файло, не относящееся к дистрибутиву DLE. ВНИМАНИЕ! Если вы устанавливали какие-либо модули DLE, антивирус будет считать их подозрительными файлами, поэтому будьте внимательными, иначе снесете свои модули к ебеням, а потом будете думать, почему это ничего не работает! Уничтожаем вредоносные папки и скрипты в uploads. Кстати, я попробовал закачать один из них по ftp, и при попытке открытия, Каспер удалил его, как трояна. Убираем {lb} из шаблона. Удалаем все содержимое из engine/cache и engine/cache/ system кроме файлов .htaccess. Все нужное потом там появится вновь, ну а не нужное, как вы понимаете нам и не надо.

А теперь начинаем защищать наш сайт на DLE

Как мы понимаем, дополнительных заплаток, о которых я писал ранее часто бывает недостаточно, поэтому применим дополнительные меры защиты нашего сайта на DLE. Первым делом в нашей папке /backup, если у нас старая версия скрипта создаем .htaccess с содержимым:

1
2
Order Deny,Allow
Deny from all

Это позволит защитить нашу базу данных от скачивания через админку. Скачать бэкап можно будет только через ftp или панель управления на хостинге. Старайтесь чаще бэкапиться и не оставлять бэкап вашего сайта на сервере. Собственно, если у вас сайт не очень популярной тематики, может и не стоит бояться, но если у вас варезник, адалт сайт, то я бы принял дополнительные меры предосторожности, судя по тому, насколько часто продают на популярных форумах различные базы данных.

Теперь мы переименовываем свою админку в админке, и сам файл admin.php на сервере. Это защитит вас от лоха. Как вы обозвали свою админку в принципе можно легко узнать. Но следующей мерой мы ограничим в нее доступ по IP. Если у вас нет журналистов, то не будет вообще никаких проблем, но и с журналистами в принципе все достаточно решаемо. Открываем файл .htaccess в корне сайта. Находим:

1
RewriteEngine On

И ниже добавляем:

1
2
3
4
5
6
7
8
ErrorDocument 403 "<h1>Forbidden</h1>"
 
<Files "имя вашей админки.php">
Deny from all
Allow From 55.56. #Администратор
Allow From 55.56. #Журналист 1
Allow From 109.667. #Журналист 2
</files>

И этого должно быть достаточно для защиты вашего сайта от злоумышленника. Вы и ваши журналисты без проблем попадете в админку сайта, посторонние (а хрен там делать посторонним?) получат: Forbidden. Кроме того запретите зарегистрированным пользователям загружать на сайт файлы и картинки. Эта опция настраивается в «Список всех разделов» -> «Настройка групп пользователей».

Если эти меры не помогут, то существуют еще более радикальные способы защиты вашего сайта на DLE. Но сама тема все еще осталась не совсем раскрыта, поэтому в следующей публикации мы будем ловить Зюзю, так что подписывайтесь на RSS и вы узнаете еще много интересного!



Поделись с друзьями!

    Получай обновления сайта прямо на e-mail!

    Введите Ваш email:

    Кроме того, интересно почитать:

Comments16 комментариев

 

  1. Дле- вообще движок-дырка

  2. @ pavka:

    Дырки есть в любом движке…

  3. gin:

    @ webwm:
    Как с вами можно связатся? Контакт неработает.

  4. gin говорит, что:
    Контакт неработает.

    Откуда такое мнение? :-D Я получил два письма. Отвечу, не переживайте.

  5. baku:

    а че за 55.56. немпонял я %)

  6. baku говорит, что:
    а че за 55.56

    Подсеть IP администратора =)
    Можно и полностью указать — 55.56.555.333 (или иной), но в случае динамического IP, а по большей части все внешние IP провайдера динамические, сам администратор в админку не попадет :-D

  7. Очень помогло

  8. @ Алекс:

    Удачи, рад что пост был полезен =)

  9. Николай:

    @ webwm: , Спасибо, тебе за интересные и полезные посты.

    Кстати, если заменить некоторые чисто душевные выражении (не литературные), можешь выпустить в виде электронной книги со ссылкой на свой блог (как минимум). А я в свою очередь, могу разместить в своей электронной библиотеке.

    Классный ты парень, удачи тебе в DLE исследованиях.

  10. Николай говорит, что:
    Классный ты парень, удачи тебе в DLE исследованиях.

    Николай, спасибо конечно :-D но при написании всех этих постов я рассчитывал на то, что они помогут многим владельцам DLE в защите своих сайтов. И как показывает время они помогают =) А это главное!

    Что касается книги… то наверное тут не столько трудов чтобы хватило на книгу, и даже маловато для мануала =) И спецы есть гораздо круче меня по этому движку, так что книгу мы оставим ближе к пенсии =)

  11. Алекс:

    В 9.2 в файле htaccess так и должно быть?

    # Редиректы
    RewriteRule ^page/(.*)$ index.php?cstart=$1 [L]

    # Сам пост
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]

    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$4&news_page=$2&cstart=$3 [L]
    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$2 [L]
    RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$2&newsid=$3 [L]
    RewriteRule ^([^.]+)/([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2 [L]

    RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$1&cstart=$2 [L]
    RewriteRule ^page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2&news_page=$1 [L]
    RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$1&newsid=$2 [L]
    RewriteRule ^([0-9]+)-(.*).html(/?)+$ index.php?newsid=$1 [L]

    # За день
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2&day=$3 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&day=$3&cstart=$4 [L]
    # За весь месяц
    RewriteRule ^([0-9]{4})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&cstart=$3 [L]
    # Вывод за весь год
    RewriteRule ^([0-9]{4})(/?)+$ index.php?year=$1 [L]
    RewriteRule ^([0-9]{4})/page/([0-9]+)(/?)+$ index.php?year=$1&cstart=$2 [L]
    # вывод отдельному тегу
    RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
    RewriteRule ^tags/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]
    # вывод для отдельного юзера
    RewriteRule ^user/([^/]*)/rss.xml$ engine/rss.php?subaction=allnews&user=$1 [L]
    RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]
    RewriteRule ^user/([^/]*)/page/([0-9]+)(/?)+$ index.php?subaction=userinfo&user=$1&cstart=$2 [L]
    RewriteRule ^user/([^/]*)/news(/?)+$ index.php?subaction=allnews&user=$1 [L]
    RewriteRule ^user/([^/]*)/news/page/([0-9]+)(/?)+$ index.php?subaction=allnews&user=$1&cstart=$2 [L]
    RewriteRule ^user/([^/]*)/news/rss.xml(/?)+$ engine/rss.php?subaction=allnews&user=$1 [L]
    # вывод всех последних новостей
    RewriteRule ^lastnews/(/?)+$ index.php?do=lastnews [L]
    RewriteRule ^lastnews/page/([0-9]+)(/?)+$ index.php?do=lastnews&cstart=$1 [L]
    # вывод в виде каталога
    RewriteRule ^catalog/([^/]*)/rss.xml$ engine/rss.php?catalog=$1 [L]
    RewriteRule ^catalog/([^/]*)(/?)+$ index.php?catalog=$1 [L]
    RewriteRule ^catalog/([^/]*)/page/([0-9]+)(/?)+$ index.php?catalog=$1&cstart=$2 [L]
    # вывод непрочитанных статей
    RewriteRule ^newposts(/?)+$ index.php?subaction=newposts [L]
    RewriteRule ^newposts/page/([0-9]+)(/?)+$ index.php?subaction=newposts&cstart=$1 [L]
    # Статистические страницы
    RewriteRule ^static/(.*).html(/?)+$ index.php?do=static&page=$1 [L]
    # вывод избранных статей
    RewriteRule ^favorites(/?)+$ index.php?do=favorites [L]
    RewriteRule ^favorites/page/([0-9]+)(/?)+$ index.php?do=favorites&cstart=$1 [L]

    RewriteRule ^rules.html$ index.php?do=rules [L]
    RewriteRule ^statistics.html$ index.php?do=stats [L]
    RewriteRule ^addnews.html$ index.php?do=addnews [L]
    RewriteRule ^rss.xml$ engine/rss.php [L]
    RewriteRule ^sitemap.xml$ uploads/sitemap.xml [L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^.]+)/page/([0-9]+)(/?)+$ index.php?do=cat&category=$1&cstart=$2 [L]
    RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^.]+)/rss.xml$ engine/rss.php?do=cat&category=$1 [L]
    RewriteRule ^page,([0-9]+),([^/]+).html$ index.php?do=static&page=$2&news_page=$1 [L]
    RewriteRule ^print:([^/]+).html$ engine/print.php?do=static&page=$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/]+).html$ index.php?do=static&page=$1 [L]

  12. @ Алекс:

    Я не знаю девятку, вообще не ковырял. Что мои что клиентские все на восьмой линейке. Я обновляться особо не вижу смысла, тк задачи сайтов весьма специфические. В одних случаях это визитка, в других новостники, ну и еще по мелочи =)

  13. Nancysuess:

    Ума ему было не занимать: рыл всегда себе на уме.

    ——
    вклады по банкам ростов

    Я поняла, что нельзя оборачиваться назад, нельзя даже пытаться оборачиваться назад. Жизнь — это улица с односторонним движением.

    ——
    этикетки для термотрансферной печати купить

    Рекомендую Вам зайти на сайт, где есть много статей на интересующую Вас тему.

    ——
    как собрать стол трансформер

    Matchless theme, it is very interesting to me :)

    ——
    https://best-torrent.net/load/filmy/dokumentalnye/pavarotti_2019_32/118-1-0-22608

    У Бога добавки не просят.

    ——
    https://torrent-fat.ru/multfilmy/27087-istoriya-igrushek-4-2019-37.html

    Самопожертвование следовало бы запретить законом. Оно развращает тех, кому приносят жертву. Они всегда сбиваются с пути.

    ——
    https://torrent-fine.ru/load/filmy/serialy/24297-drugaya-zhizn-1-sezon-2019-2.html

    Excuse, I have removed this idea :)

    ——
    torrent-ideal

  14. Провести отдых возле синим морем за доступные стоимости, совместно с отличным сервисом — желание каждого человека. Особенно поэтому наш портал презентуем для Вас наилучший варинат отдыха летом по этом квартале — городской поселок http://www.gelendzhic.ru/ Геленджик, который находится непосредственно на Черноморском берегу, известный созданной привлекательностью к тому же комфортом для блестящего остановки семьей либо парой. Городок Геленджик заключает обилие достопремечательностей, скверы также цивилизованные океанариум, каковы отдыхающим придутся на предпочтению. Здесь отдыхающие смогут определить именно для самого себя лучший отдых: море плюс песком, историчный местность или бурлящие анимационные шоу. По презентованному портале геленджик организация презентует под туристов объемное воспроизведение комплексов также видных уголков специально для отдыха, недорогое жилье вблизи побережья, пути путешествия также всякое иное. Заказать гостинницу по доступными расценкам, выбрать посещение и развлечения Вы получают шанс на указанном интернет-сайте Геленджика.

  15. Robinanymn:

    Законы не мешали бы каждому жить, как ему угодно, если бы один не вредил другому.

    ——
    https://torrent-boom.net/load/serialy/marginal_3_sezon_1_2_3_4_5_6_7_8_serija_2019/40-1-0-6799

    Война — преступление, которое не искупается победой.

    ——
    https://torrent-chic.ru/33294-dorogoy-papa-2019-119.html

    То, что кажется странным, редко остается необъясненным.

    ——
    https://torrent-enta.net/load/filmy/dokumentalnye/pavarotti_2019_32/6-1-0-4771

    В журналистике каждому разрешается делать что-то одно.

    ——
    https://torrent-giant.ru/load/serialy/jelloustoun_2_sezon_2019_serii_16/26-1-0-13656

    Самая большая ошибка — пытаться быть приятнее, чем ты есть.

    ——
    https://torrent-legend.ru/load/torrent_filmy/multfilmy/77231-taynaya-zhizn-domashnih-zhivotnyh-2-2019-67.html

    Ваше благополучие зависит от ваших собственных решений

    ——
    https://torrent-sheer.ru/load/filmy_besplatno/melodramy/vita_i_virdzhinija_2019_45/299-1-0-15267

    Бальзак не больше реалист, чем был Гольбейн. Он созидал жизнь, а не воспроизводил ее.

    ——
    https://torrent-sole.ru/load/films/uzhasy/solncestojanie_2019_42/14-1-0-32474

    Каждый человек, которого я встречаю, меня в чем-то превосходит, и в этом смысле я могу у него поучиться.

    ——
    https://torrent-solid.ru/load/fantastika/godzilla_2_korol_monstrov_46/5-1-0-12591

    О силе страсти всегда судят по совершенным во имя нее безрассудствам.

    ——
    https://torrent-total.ru/load/filmy/serialy/sirena_2_sezon_2019_11/22-1-0-4932

Комментировать