Все интернеты гудят уже вторые сутки, а сюда так никто и не притащил, странно.
Уязвимость присутствует в PHP, работающих как cgi модуль (fastCGI не подвержен). Говорят ещё nginx+php-fpm уязвим... проверил у себя - не сработало. Хотя не обновлял и не патчил ничего.
Сабж: данные из запроса (после знака ?) достают до интерпретатора, посему можно передать атрибуты командой строки для php, среди которых вот:
-a Run as interactive shell
-c | Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value 'bar'
-e Generate extended information for debugger/profiler
-f Parse and execute .
-h This help
-i PHP information
-l Syntax check only (lint)
-m Show compiled in modules
-r Run PHP without using script tags
-B Run PHP before processing input lines
-R Run PHP for every input line
-F Parse and execute for every input line
-E Run PHP after processing all input lines
-H Hide any passed arguments from external tools.
-s Output HTML syntax highlighted source.
-v Version number
-w Output source with stripped comments and whitespace.
-z Load Zend extension .
args... Arguments passed to script. Use -- args when first argument
starts with - or script is read from stdin
--ini Show configuration file names
--rf Show information about function .
--rc Show information about class .
--re Show information about extension .
--ri Show configuration for extension .
Для быстрой проверки на уязвимость используем запрос вида:
code:
http://target.com/index.php?-sn
-sn передаётся аргументом при запуске интерпретатора и даёт ему команду вывалить сурс файла как красиво оформленный html с подсветкой синтаксиса ^_^. То есть если ресурс уязвим, вы увидете исходник. Аргумент n (игнорирования директив php.ini) используется для обезвреживания suhosin.
Если уж можно передать -sn, можно и исполнение произвольного кода на сервере получить. Отправляем POST запрос содержания:
И получаем PoC. Также добавляем -n если обходим suhosin.
PHP выпустили патч, но лоханулись. Не спасал. Выпустили патч на патч, а потом ещё патч. Но теперь те, кто ставил первый патч и кто не следит за новостями, думают, что галактеко безопасносте. Так что не все ещё прочесались и пофиксили данный баг. А для устранения уязвимости применить последний fix.