Обзор типов уязвимостей

Вроде мы хотели, чтобы пользователь выбрал действие - one или two и вызвалась соотв. функция. Но мы попробуем сценарий вызвать так: phpinc.php?action=system('id');// Таким образом, выпонится команда id на сервере. Нам даже не помеха magic_quotes_gpc, которая экранирует кавычки - достаточно изменить запрос так: phpinc.php?action=system($_GET['cmd']);//&cmd=id Однако нам помешает другая "вредная" директива - Safe_mode. Она запрещает функцию system() и ряд других. Зщита от данной уязвимости - полный отказ от использования eval() VI. Remote Command Execution в перл-скриптах в open() Этот пример будет на перле, т.к. бага существует именно с скриптах, написанных на нем (замечу: в СКРИПТАХ - из-за криворукости кодера, интерпретатор перла тут не при чем). Сначала пойдет теоритическая часть В перле для открытия файлов существует функция open(). Ее используют так: open(DESCRIPTOR, "filename"); , где DESCRIPTOR - создаваемый дескриптор файла, а filename - имя файла. При чем, если указать просто имя вроде "database.dat", то файл открется для чтения. Если указать в виде ">file.txt", то для записи, ">>file" - для добавления. А теперь самое интересное - если указать "|id", то откроется канал (pipe) с указанной программой (id). Таким образом, можно выполнять команды на сервере. А теперь пример уязвимого скрипта: Code: #!/usr/bin/perl use CGI qw( :standard ); # подключаем библиотеку CGI print header; # выводим заголовлок (Content-type) open(FILE, param('file')); # открываем файл, имя файла - переданный параметр file while($str=) # читаем из файла. Операция означает: прочесть строку из файла # она возвращает false, когда подошел конец файла, таким образом этим циклом while мы обходим весь файл { print $str; # выводим прочитанное } close(FILE); # закрываем дескриптор Я специально не стал сокращать и писать вроде while(){print;} , дабы не запутать не знающих этого языка. Специально для них даны комментарии (они начинаются с #, кроме первой строки - там указан путь к интерпретатору перла). А мы же попробуем вызвать сценарий так: open.pl?file=|id И у нас вместо файла откроется канал с процессом id, и результаты будут выведены на экран. Последствия: исполнение любых команд (в пределах привиллегий демона httpd) на сервере. Защита - фильтрование | в параметрах. На этом позволю себе откланяться. Не серчайте сильно, если что упустил Great (cribble[at]mail.ru, icq# 893-894), 16.11.2005 ВНИМАНИЕ! Автор статьи не несет ответственности за какое-либо использование данного материала в незаконных целях и за прочиненный этим вред! Great (02.12.05, 22:01:02) Совсем забыл, сорьки. Уязвимость php-including так же есть и в функции preg_replace($mask,$replacement,$string). Если указан модификатор /e, то после замены параметр $replacement будет расценен как рнр-код и выполнен интерпретатором. Таким образом поимели phpBB 2.0.15 Автор: Great
Скачать файл txt fb2