Мы в твиттере Мы в телеграме!

Провеббер » Web » Полезные статьи » Защита сайтов от взлома by kzpromo

Набор в команду! Ведется набор в команду, для наполнения сайта новым, интересным контентом. Если у тебя есть предложения, свободное время, ты обладаешь интересным контентом, и хочешь поделиться с другими?
Обращайся к нам в ЛС группы Вконтакте.

Защита сайтов от взлома by kzpromo

Данный материал предоставлен сайтом ProWebber.cc исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Скачать бесплатно Защита сайтов от взлома by kzpromo.

Защита сайтов от взлома by kzpromo

Уже несколько лет наблюдаю как растет тенденция взломов дле сайтов. Сотни тысяч сайтов страдали от взломов, миллионы сайтов подвержены атакам.
Решил поделиться с наработками которые уже год внедрены в релиз SECURED DLE и обеспечивают нормальную работу сайта без потери информации. Многие будут осуждать меня за данную заплатку, так как кому-то я испорчу бизнес, сильно усложнив взлом. Данная наработка подходит практически к любому сайту где есть php. Я не держу обиду на тех кто не верит в защищенность релиза.
И так я расскажу как обезопасить себя от: шеллов, sql inj, php inj, xss

Первым делом представлю свой модуль, его нужно подключить перед подключением в базу

include_once("Название модуля");

---------------------------------------------------------------------------
<?php
//отражение хакерских запросов
//autor: kzpromo

//поставить еденицу если хотите включить отладку запросов
$debug = 0;

$bag_req = array("select", "eval", "echo", "UPDATE", "LIMIT", "INSERT", "INTO", "union", "CONCAT", "INFORMATION_SCHEMA", "OUTFILE", "DUMPFILE", "LOAD_FILE", "BENCHMARK", "SUBSTRING", "ASCII", "CHAR", "database", "HEX", "\\.\\/", "%00", "\\.htaccess", "config\\.php", "document\\.cookie");
$request = serialize($_GET);
$urequest = urldecode($request);
$brequest = base64_decode($request);
if($_GET)
{
foreach ($bag_req as $key => $value) {
  if(preg_match("/$value/i", $request) || preg_match("/$value/i", $urequest) || preg_match("/$value/i", $brequest))
  {
   if($debug == "1") $do_debug = "<br>В массиве найден запрос <b>$value</b> , который блокирует правильную работу<br>$request";
   die("BAD REQUEST $do_debug");
   }
}
}
if($_POST)
{
$request = str_replace("selected_language", "sl", serialize($_POST));
$urequest = urldecode($request);
$brequest = base64_decode($request);
foreach ($bag_req as $key => $value) {
  if(preg_match("/$value/i", $request) || preg_match("/$value/i", $urequest) || preg_match("/$value/i", $brequest))
   {
   if($debug == "1") $do_debug = "<br>В массиве найден запрос <b>$value</b> , который блокирует правильную работу<br>$request";
   die("BAD REQUEST $do_debug");
   }
}
}
?>


full code
http://pastebin.com/qeqZaNHx

Модуль проверяет все GET и POST запросы и при нахождении плохих блокирует, не дав уйти запросам в базу или далее.

Дальше нам необходимо защитить себя от шеллов на сайте
Нужно отредактировать php.ini и отключить следующие функции
disable_functions = eval, exec, system, passthru, scandir, popen, shell_exec, proc_open, proc_close, proc_nice, get_current_user, getmyuid, posix_getpwuid, apache_get_modules, virtual, posix_getgrgid, getmyinode, fileowner, filegroup, getmypid, apache_get_version, apache_getenv, apache_note, apache_setenv, disk_free_space, diskfreespace, dl, ini_restore, openlog, syslog, highlight_file, show_source, symlink, disk_total_space, ini_get_all, get_current_user, posix_uname

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

Для народа старался kzpromo!


Дополнительные ссылки на скачивание ТОЛЬКО для зарегистрированных


-4
Просмотры: 6 462 :: Комментарии (41) :: :: Нужна помощь? Задайте вопрос на форуме ::
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

#21Azat868

  • 28 июня 2011 23:25
  • Регистрация: 8.11.2009
  • Был(а) онлайн: 10.03.2016
  • Комментариев: 15
  • 0
Цитата: kzpromo
Можете добавить
if($_COOKIE)
{
$request = serialize($_COOKIE);
$urequest = urldecode($request);
$brequest = base64_decode($request);
foreach ($bag_req as $key => $value) {
  if(preg_match("/$value/i", $request) || preg_match("/$value/i", $urequest) || preg_match("/$value/i", $brequest))
   {
   if($debug == "1") $do_debug = "<br>В массиве найден запрос <b>$value</b> , который блокирует правильную работу<br>$request";
   die("BAD REQUEST $do_debug");
   }
}
}


После вставки этого главная страница пишет "Bad R..."

#22Julius

  • 28 июня 2011 23:34
  • Регистрация: 1.01.2011
  • Был(а) онлайн: 19.06.2016
  • Комментариев: 171
  • 0
Azat868,
После вставки этого главная страница пишет "Bad R..."

хд) а у меня после вставки этого пишет "BAD REQUEST" biggrin

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

#23Almere

  • 29 июня 2011 02:26
  • Регистрация: 14.12.2010
  • Был(а) онлайн: 13.03.2017
  • Комментариев: 22
  • 0
После подключения проверки печенек, выбивает BAD REQUEST , при любой действии.

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

#24celsoft

  • 29 июня 2011 04:41
  • Регистрация: 18.09.2010
  • Был(а) онлайн: 20.11.2024
  • Комментариев: 345
  • 0
Отлично. Спасибо.

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

#25kzpromo

  • 29 июня 2011 07:12
  • Регистрация: 11.09.2009
  • Был(а) онлайн: 10.12.2023
  • Комментариев: 90
  • 0
модули админки нужно исправлять! включайте процесс отладки
исправляйте запросы в модуле!

У кого вылетает по непонятным причинам Bad request включайте процесс отладки
$debug=1;

#26rashpil

  • 29 июня 2011 23:30
  • Регистрация: 25.12.2009
  • Был(а) онлайн: 4.04.2016
  • Комментариев: 123
  • 0
Заметил за скриптом такую тенденцию. При передаче логин хеша он блокирует массив GET. Но ведь так довольно много модулей в дле работают

#27kzpromo

  • 30 июня 2011 08:32
  • Регистрация: 11.09.2009
  • Был(а) онлайн: 10.12.2023
  • Комментариев: 90
  • 0
скидывайте коды ошибок из дебага, будем разбирать

#28rashpil

  • 30 июня 2011 11:01
  • Регистрация: 25.12.2009
  • Был(а) онлайн: 4.04.2016
  • Комментариев: 123
  • 0
Например это. Опять же возникло при попытке передачи логин хеша методом пост

BAD REQUEST
В массиве найден запрос select , который блокирует правильную работу
a:2:{s:14:"dle_allow_hash";s:32:"472def6b454beaf8825a37bf4c241e50
";s:11:"selected_pm";a:1:{i:0;s:2:"19";}}

#29kzpromo

  • 30 июня 2011 12:00
  • Регистрация: 11.09.2009
  • Был(а) онлайн: 10.12.2023
  • Комментариев: 90
  • 0
selected_pm нужно его заменить

#30RSD

  • 30 июня 2011 22:10
  • Регистрация: 21.04.2011
  • Был(а) онлайн: 13.05.2018
  • Комментариев: 69
  • 0
насчет проверки GET и POST все понятно, почерпнул для себя полезную инфу.
но вот никак не пойму для чего отключать apache_get_version ?
как через него можно залить шелл?

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

#31Almere

  • 30 июня 2011 22:44
  • Регистрация: 14.12.2010
  • Был(а) онлайн: 13.03.2017
  • Комментариев: 22
  • 0
При сохранении конфига выдаёт в админке: BAD REQUEST
В массиве найден запрос CHAR , который блокирует правильную работу
a:4:{s:8:"save_con";a:124:{s:10:"home_title";s:112:"Мон
иторинг сервер Cs 1.6, скачать Counter-Strike 1.6, FA

При изменении профиля через админку :
[21:20:38] Тима: BAD REQUEST
В массиве найден запрос LIMIT , который блокирует правильную работу
a:19:{s:8:"editmail";s:19:"kjubycfib@

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

#32kzpromo

  • 1 июля 2011 06:17
  • Регистрация: 11.09.2009
  • Был(а) онлайн: 10.12.2023
  • Комментариев: 90
  • 0
как через него можно залить шелл?

подобрать эксплоит, это не так уж и важно
Almere, удаляйте любые совпадения CHAR и Limit
Заменяйте на свое

#33ShapeShifter

  • 1 июля 2011 19:28
  • Регистрация: 19.09.2010
  • Был(а) онлайн: 23.03.2017
  • Комментариев: 52
  • 0
Вся проблема "модуля" как раз в том, что помимо фильтрации вы кучу проблем получите, как уже приводилось выше.
Стоит вам в посте, новости или где-то ещё написать select или echo - появится ошибка и ничего не даст добавить.

Я в первой версии форума такой фильтр сделал, правда не фильтруя каждый раз массив входящих данных, только проверял во время создания запроса к базе и удалял "плохие" символы/комнды, но потом столкнулся с такой же проблемой - удаляется часть текста.

Странно, что kzpromo ничего не знал про это, учитывая его специализацию...

Добавьте к новости сообщение, что будут блокироваться все данные с указанными "плохими" командами.

P.S. зачем прогонять массив используя связку ключ => значение, когда ключ не используется, да и вообще он не нужен.

#34kzpromo

  • 2 июля 2011 07:10
  • Регистрация: 11.09.2009
  • Был(а) онлайн: 10.12.2023
  • Комментариев: 90
  • 0
можешь написать свой вариант защиты! я лишь дал идею для размышления
ключ не проверил) прошу прощения

#35dimaxa

  • 3 июля 2011 17:53
  • Регистрация: 26.01.2011
  • Был(а) онлайн: 25.03.2013
  • Комментариев: 26
  • 0
Спасибо!!......

#36FireHead16

  • 4 июля 2011 23:34
  • Регистрация: 12.06.2011
  • Был(а) онлайн: 14.10.2012
  • Комментариев: 34
  • 0
подключить перед подключением?))))))))

#37kzpromo

  • 5 июля 2011 13:07
  • Регистрация: 11.09.2009
  • Был(а) онлайн: 10.12.2023
  • Комментариев: 90
  • 0
include before include mysql database, lol

#38123

  • 9 июля 2011 13:56
  • Регистрация: 3.02.2010
  • Был(а) онлайн: 14.11.2012
  • Комментариев: 1
  • 0
kzpromo,
я не очень понял куда устанавлять инструкцию можете дать:?

#39kzpromo

  • 14 июля 2011 12:10
  • Регистрация: 11.09.2009
  • Был(а) онлайн: 10.12.2023
  • Комментариев: 90
  • 0
читайте комментарии

#40Molen

  • 22 июля 2011 13:19
  • Регистрация: 22.07.2011
  • Был(а) онлайн: 22.11.2012
  • Комментариев: 53
  • 0
судя по комментам, просто куча ошибок...

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Архив новостей
Ноябрь 2024 (9)
Октябрь 2024 (169)
Сентябрь 2024 (13)
Август 2024 (60)
Июль 2024 (12)
Июнь 2024 (30)