"опасные" функции и команды

Discussion in 'PHP' started by Abra, 14 Dec 2006.

  1. Abra

    Abra Member

    Joined:
    17 Sep 2005
    Messages:
    278
    Likes Received:
    51
    Reputations:
    29
    Собственно такой вопрос - может кто-ибудь из грамотных людей перечислить все функции php и perl которые могут выполнять произвольный код, команду и прочее. Задача заключается в том чтобы проверять код файла на потенциально возможный шелл. Знаю что есть функции типа cmd , exec , eval но их наверняка больше, и всех я просто не знаю.
     
  2. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    escapeshellarg - строка обрабатывается шеллом
    escapeshellcmd - почти тоже самое )
    exec - выполнение
    passthru - аналогично
    proc_open - выполняет комманду и открывает поинтэра файла для ввода-вывода
    shell_exec - комманды через bash
    system - опять же выполняет и выводит результат

    include()
    include_once()
    require()
    require_once()
    инклуд файлов
     
    #2 darky, 14 Dec 2006
    Last edited: 14 Dec 2006
    1 person likes this.
  3. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Лучше запретить еще eval и preg_replace, файл можно прочитать и выполнить через eval, что аналогично include'у
     
    1 person likes this.
  4. Abra

    Abra Member

    Joined:
    17 Sep 2005
    Messages:
    278
    Likes Received:
    51
    Reputations:
    29
    угу, про eval я выше писал. А preg_replace разве может как-то использоваться злонамерно? Не знал.
    Спасибо обоим!
     
  5. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    PHP:
    $code "phpinfo();";
    preg_replace("#a#e"$code"a");
    выполнит код, содержащийся в $code
     
  6. ShAnKaR

    ShAnKaR Пачка маргарина

    Joined:
    14 Jul 2005
    Messages:
    904
    Likes Received:
    297
    Reputations:
    553
    ты имел ввиду popen наверно
    http://phpclub.ru/manrus/f/popen.html
     
    #6 ShAnKaR, 14 Dec 2006
    Last edited: 14 Dec 2006
  7. SMiX

    SMiX Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    227
    Likes Received:
    55
    Reputations:
    29
    proc_open в отличие от popen открывает 2 хендлера - на чтение и на запись.
     
  8. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    ShAnKaR именно proc_open, т.е аналог stream_select() но также выполняющий любые комманды..
    синтаксис вроде
    proc_open ( цмд , дескрипторы строки , куча еще всего )

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

    Code:
    <?php
    $hackdafack = popen("/bin/uname", "r");
    ?>
     
  9. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,148
    Reputations:
    430
    echo
    Опасна лишь при таком использовании:
    PHP:
     <?php
    echo('Дракула, Выйу, Ктулху - Power Rangers:), з0хват, мир,  лазерный испепелитель, мегабластер, ,Интернет, Kосмос');
    ?>
     
    #9 Ch3ck, 15 Dec 2006
    Last edited: 15 Dec 2006
    1 person likes this.
  10. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    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')' и снова полдучаем текущий ид
     
    1 person likes this.
Loading...