Годные для использования функции PHP

277
задан 4 revs, 2 users 65% 19 October 2010 в 06:28
поделиться

7 ответов

Как насчет опасных синтаксических элементов?

Функция "переменная переменная" ($$var) найдет переменную в текущей области видимости по имени $var. При неправильном использовании удаленный пользователь может изменить или прочитать любую переменную в текущей области видимости. По сути, это более слабый eval.

Например: вы пишете код $$uservar = 1;, затем удаленный пользователь устанавливает $uservar в "admin", в результате чего $admin устанавливается в 1 в текущей области видимости.

9
ответ дан 23 November 2019 в 02:06
поделиться

Мой VPS настроен на отключение следующих функций:

root@vps [~]# grep disable_functions /usr/local/lib/php.ini
disable_functions = dl, exec, shell_exec, system, passthru, popen, pclose, proc_open, proc_nice, proc_terminate, proc_get_status, proc_close, pfsockopen, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid

PHP имеет достаточно потенциально разрушаемых функций, чтобы ваш список мог быть слишком большим для поиска. Например, в PHP есть chmod и chown, которые могут быть использованы для простой деактивации веб-сайта.

EDIT: Возможно, вы захотите создать сценарий bash, который ищет в файле массив функций, сгруппированных по степени опасности (функции, которые плохи, функции, которые еще хуже, функции, которые никогда не следует использовать), а затем вычисляет относительную степень опасности, которую представляет файл, в процентах. Затем выведите это в дерево каталога с процентными метками рядом с каждым файлом, если он превышает порог, скажем, 30% опасности.

17
ответ дан 23 November 2019 в 02:06
поделиться

Plattform-specific, но также теоретические exec векторы:

  • dotnet_load()
  • new COM("WScript. Shell")
  • new Java("java.lang.Runtime")
  • event_new() - очень рано

И еще много маскирующих методов:

  • proc_open - псевдоним для popen
  • call_user_func_array("exE". chr(99), array("/usr/bin/damage", "--all"));
  • file_put_contents("/cgi-bin/nextinvocation.cgi") && chmod(...)
  • PharData::setDefaultStub - еще немного работы по исследованию кода в . phar файлах
  • runkit_function_rename("exec", "innocent_name") или APD rename_function
14
ответ дан 23 November 2019 в 02:06
поделиться

Вам придется сканировать на наличие include ($ tmp) и require (HTTP_REFERER), а также * _once. Если сценарий эксплойта может записывать во временный файл, он может просто включить его позже. В основном двухэтапный eval.

И даже можно скрыть удаленный код с помощью обходных приемов, например:

 include("data:text/plain;base64,$_GET[code]");

Кроме того, если ваш веб-сервер уже был скомпрометирован, вы не всегда увидите незакодированное зло. Часто оболочка эксплойта кодируется с помощью gzip. Подумайте о include ("zlib: script2.png.gz"); Никакого eval здесь, все тот же эффект.

59
ответ дан 23 November 2019 в 02:06
поделиться

Я бы особенно хотел добавить в этот список unserialize(). Она имеет долгую историю различных уязвимостей, включая выполнение произвольного кода, отказ в обслуживании и утечку информации из памяти. Ее никогда не следует вызывать на данных, предоставленных пользователем. Многие из этих уязвимостей были исправлены в релизах за последние несколько лет, но на момент написания статьи в нем все еще сохраняется пара неприятных уязвимостей.

Для получения другой информации о сомнительных функциях/использовании php обратитесь к Hardened PHP Project и его рекомендациям. Также недавние проекты Month of PHP Security и Month of PHP Bugs 2007 года

Также обратите внимание, что, по замыслу, отсериализация объекта приведет к выполнению функций конструктора и деструктора; еще одна причина не вызывать ее на данных, предоставленных пользователем.

19
ответ дан 23 November 2019 в 02:06
поделиться

Оператор обратного апострофа Обратный апостроф на php manual

5
ответ дан 23 November 2019 в 02:06
поделиться

Также имейте в виду класс «уязвимостей прерывания», которые позволяют читать и записывать произвольные области памяти!

Они влияют на такие функции, как trim (), rtrim (), ltrim (), explode (), strchr (), strstr (), substr (), chunk_split (), strtok (), addcslashes (), str_repeat ( ) и больше.Это в значительной степени, но не исключительно, связано с функцией передачи по ссылке во время вызова языка, которая устарела в течение 10 лет, но не отключена.

Для получения дополнительной информации см. Доклад Стефана Эссера об уязвимостях прерывания и других низкоуровневых проблемах PHP на BlackHat USA 2009 Слайды Документ

В этом документе / презентации также показано, как dl () может использоваться для выполнить произвольный системный код.

15
ответ дан 23 November 2019 в 02:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: