Просмотр полной версии : "опасные" функции и команды
Собственно такой вопрос - может кто-ибудь из грамотных людей перечислить все функции php и perl которые могут выполнять произвольный код, команду и прочее. Задача заключается в том чтобы проверять код файла на потенциально возможный шелл. Знаю что есть функции типа cmd , exec , eval но их наверняка больше, и всех я просто не знаю.
blackybr
14.12.2006, 22:38
escapeshellarg - строка обрабатывается шеллом
escapeshellcmd - почти тоже самое )
exec - выполнение
passthru - аналогично
proc_open - выполняет комманду и открывает поинтэра файла для ввода-вывода
shell_exec - комманды через bash
system - опять же выполняет и выводит результат
include()
include_once()
require()
require_once()
инклуд файлов
Лучше запретить еще eval и preg_replace, файл можно прочитать и выполнить через eval, что аналогично include'у
угу, про eval я выше писал. А preg_replace разве может как-то использоваться злонамерно? Не знал.
Спасибо обоим!
$code = "phpinfo();";
preg_replace("#a#e", $code, "a");
выполнит код, содержащийся в $code
proc_open - выполняет комманду и открывает поинтэра файла для ввода-вывода
ты имел ввиду popen наверно
http://phpclub.ru/manrus/f/popen.html
proc_open в отличие от popen открывает 2 хендлера - на чтение и на запись.
blackybr
15.12.2006, 10:01
ShAnKaR именно proc_open, т.е аналог stream_select() но также выполняющий любые комманды..
синтаксис вроде
proc_open ( цмд , дескрипторы строки , куча еще всего )
ну и popen в принципе тожно можно счиатать за "опасную ф-ю"
<?php
$hackdafack = popen("/bin/uname", "r");
?>
echo
Опасна лишь при таком использовании:
<?php
echo('Дракула, Выйу, Ктулху - Power Rangers:), з0хват, мир, лазерный испепелитель, мегабластер, ,Интернет, Kосмос');
?>
Perl:
open(FILE_DESCRIPTOR,FILE_NAME);
# при подставлении пайпа в имя файла - исполнит его
Пример уязвимого кода:
my($key,$value)=split('=',$ENV{QUERY_STRING});
if($key eq "param") { open(IN,$value)||die $! }
Подставляем в GET запрос index.cgi?param=|id|
и получаем текущий ид
eval(CODE);
# при подставлении ';CODE'в фильтрующуюся переменную которую задает клиент - исполнит код.
Пример уязвимого кода:
my($key,$value)=split('=',$ENV{QUERY_STRING});
if($key eq "param") { eval("print $value") }
подставляем в param '; system('id')' и снова полдучаем текущий ид
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot