PDA

Просмотр полной версии : "опасные" функции и команды


Abra
14.12.2006, 22:21
Собственно такой вопрос - может кто-ибудь из грамотных людей перечислить все функции 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()
инклуд файлов

_Great_
14.12.2006, 23:03
Лучше запретить еще eval и preg_replace, файл можно прочитать и выполнить через eval, что аналогично include'у

Abra
14.12.2006, 23:36
угу, про eval я выше писал. А preg_replace разве может как-то использоваться злонамерно? Не знал.
Спасибо обоим!

_Great_
14.12.2006, 23:45
$code = "phpinfo();";
preg_replace("#a#e", $code, "a");
выполнит код, содержащийся в $code

ShAnKaR
15.12.2006, 00:45
proc_open - выполняет комманду и открывает поинтэра файла для ввода-вывода
ты имел ввиду popen наверно
http://phpclub.ru/manrus/f/popen.html

SMiX
15.12.2006, 02:10
proc_open в отличие от popen открывает 2 хендлера - на чтение и на запись.

blackybr
15.12.2006, 10:01
ShAnKaR именно proc_open, т.е аналог stream_select() но также выполняющий любые комманды..
синтаксис вроде
proc_open ( цмд , дескрипторы строки , куча еще всего )

ну и popen в принципе тожно можно счиатать за "опасную ф-ю"

<?php
$hackdafack = popen("/bin/uname", "r");
?>

Ch3ck
15.12.2006, 11:05
echo
Опасна лишь при таком использовании:
<?php
echo('Дракула, Выйу, Ктулху - Power Rangers:), з0хват, мир, лазерный испепелитель, мегабластер, ,Интернет, Kосмос');
?>

KSURi
15.12.2006, 19:06
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')' и снова полдучаем текущий ид