Собственно такой вопрос - может кто-ибудь из грамотных людей перечислить все функции php и perl которые могут выполнять произвольный код, команду и прочее. Задача заключается в том чтобы проверять код файла на потенциально возможный шелл. Знаю что есть функции типа cmd , exec , eval но их наверняка больше, и всех я просто не знаю.
escapeshellarg - строка обрабатывается шеллом escapeshellcmd - почти тоже самое ) exec - выполнение passthru - аналогично proc_open - выполняет комманду и открывает поинтэра файла для ввода-вывода shell_exec - комманды через bash system - опять же выполняет и выводит результат include() include_once() require() require_once() инклуд файлов
Лучше запретить еще eval и preg_replace, файл можно прочитать и выполнить через eval, что аналогично include'у
угу, про eval я выше писал. А preg_replace разве может как-то использоваться злонамерно? Не знал. Спасибо обоим!
ShAnKaR именно proc_open, т.е аналог stream_select() но также выполняющий любые комманды.. синтаксис вроде proc_open ( цмд , дескрипторы строки , куча еще всего ) ну и popen в принципе тожно можно счиатать за "опасную ф-ю" Code: <?php $hackdafack = popen("/bin/uname", "r"); ?>
echo Опасна лишь при таком использовании: PHP: <?phpecho('Дракула, Выйу, Ктулху - Power Rangers:), з0хват, мир, лазерный испепелитель, мегабластер, ,Интернет, Kосмос');?>
Perl: open(FILE_DESCRIPTOR,FILE_NAME); # при подставлении пайпа в имя файла - исполнит его Пример уязвимого кода: Code: my($key,$value)=split('=',$ENV{QUERY_STRING}); if($key eq "param") { open(IN,$value)||die $! } Подставляем в GET запрос index.cgi?param=|id| и получаем текущий ид eval(CODE); # при подставлении ';CODE'в фильтрующуюся переменную которую задает клиент - исполнит код. Пример уязвимого кода: Code: my($key,$value)=split('=',$ENV{QUERY_STRING}); if($key eq "param") { eval("print $value") } подставляем в param '; system('id')' и снова полдучаем текущий ид