SecureBlog

 
 

Защита директорий и файлов от несакционированного доступа

 

Дата: 04.05.2008, Категория: Взлома и защита

 

В продолжение к этому посту.

Есть несколько вариантов решения проблемы.

Первый, включить директиву safe_mode в php.ini


В случае, если директива safe_mode установлена значением on, php проверит, совпадает ли владелец скрипта и владелец файла или директории, которыми оперирует скрипт. Например, имеем такие права:

-rw-rw-r-- 1 user user 33 Feb 1 20:43 test.php
-rw-r--r-- 1 root root 1116 May 26 17:06 /etc/passwd


В случае выполнения скрипта test.php с содержимым

<?
readfile('/etc/passwd');
?>


Мы получим примерно такую ошибку:

Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /home/user/script.php on line 2

В данном случае осуществляется проверка на соответствие UID. Так же можно использовать более "мягкую" проверку на соответствие GID.
Для этого нужно использовать директиву safe_mode_gid.


Вторым вариантом решения, может послужить опция open_basedir


В этом случае, все выполняемые скрипты будут ограничены заданной директорией. Для этого правим в httpd.conf примерно так:


php_admin_value open_basedir /home/user


В этом случае, при попытке выполнения нашего test.php, мы увидим следующую ошибку:

Warning: open_basedir restriction in effect. File is in wrong directory in /home/user/script.php on line 2

Третий способ, выключение потенциально опасных функций в php



К таковым относятся, например:

dl,exec,passthru,proc_open,proc_close,shell_exec,system и т.д.

Запретить их выполнение можно в php.ini

disable_functions = readfile, dl, exec, passthru, proc_open, proc_close, shell_exec, system

В этом случае, результатом выполнения нашего test.php будет следующая ошибка:

Warning: readfile() has been disabled for security reasons in /home/user/script.php on line 2

Так же не стоит забывать о так называемых псевдонимах функций (alias) [http://securityvulns.ru/news/PHP/alias-pb.html], которые могут помочь злоумышленнику "обмануть" директиву disable_functions. Например:

highlight_file() - show_source()
fwrite() - fputs()
ini_set() - ini_alter()


Пример кода, эксплуатирующего эту брешь:

<?
if(function_exists('highlight_file')) {
  echo '<br>highlight_file - enable';
} else {
  echo '<br>highlight_file - disable';
}
if(function_exists('show_source')) {
  echo '<br>show_source - enable';
} else {
  echo '<br>show_source - disable';
}
if(function_exists('ini_set')) {
  echo '<br>ini_set - enable';
} else {
  echo '<br>ini_set - disable';
}
if(function_exists('ini_alter')) {
  echo '<br>ini_alter - enable';
} else {
  echo '<br>ini_alter - disable';
}
?>

 


Silver Ghost 04.05.2008
А если использовать комбинацию 2 и 3?
Т.е. мне надо чтоб были включены функции работы с файлами, но при этом крипты не могли выходить за пределы своих каталогов?


c0nst 04.05.2008
Silver Ghost, думаю в этом случае нужно запретить лишь те функции, которые потенциально опасны (system,exec,passthru,etc..) и не нужны обычному пользователью, а такие как fopen, fread, file - которые могут потребоваться для работоспособности скриптов, оставить.
Ну и соответственно включить директиву open_basedir, чтобы злоумышленник не мог читать файлы/просматривать директории других пользователей.
Так же упустил момент с allow_url_fopen. Желательно отключить эту опцию для того, чтобы злоумышленник не мог заинклудить веб-шелл или другой скрипт.
Включается в php.ini
allow_url_fopen on


Elekt 31.08.2008
-> ..не стоит забывать о так называемых псевдонимах функций (alias)..

я буду рад увидеть свой копирайт
http://securityvulns.ru/news/PHP/alias-pb.html


Добавить комментарий

Заполните обязательные поля формы

Имя (*) Сайт

 

О блоге

  • Освещение проблем безопасности web приложений и серверов. Поисковая оптимизация.
    Ник: c0nst
    icq: 331699888

 

Рубрики

Сигнализация и видеонаблюдение

RSS-лента

Друзья и партнеры

ландшафтный фонтан

Счетчики

  • Rambler's Top100
  • Рейтинг@Mail.ru
ביטוח רכב מחירים. постельное белье ооо. Нижнее белье, женское нижнее белье, интернет магазин нижнего белья, нижнее белье триумф. нижнее белье опт прибалтика. проститутки. МАЗ, самосвалы МАЗ. эмаль хв 110|
© SecureBlog | Coded by c0nst