2,6 миллиона доменов и ~45 000 открытых Phpinfo() Позже… История незащищенного Phpinfo()

2,6 миллиона доменов и ~45 000 открытых Phpinfo() Позже… История незащищенного Phpinfo()

3 декабря 2022 г.

После сканирования 2,6 миллиона доменов на наличие открытых каталогов .git (ссылка на статью), .env (ссылка на статью) и .DS_Store (ссылка на статью< /a>), я сделал такое же сканирование для phpinfo-файлов, таких как info.php или phpinfo.php.

В первой части этой статьи я объясню, что такое phpinfo и что из него можно извлечь. Во второй части я расскажу о секретной информации, которую нашел.

scan stats

Что такое phpinfo()?

phpinfo() — это функция, которая отображает информацию о конфигурации PHP и сервера. . Это помогает разработчикам PHP видеть, какие модули активны и какие версии этих модулей работают на сервере.

Example phpinfo()

Являются ли данные, представленные с помощью phpinfo(), опасными?

На первый взгляд, эта информация не является конфиденциальной. И многие разработчики пропускают удаление файлов phpinfo в производственной среде. Но о мальчик, это не так. Проанализировав результаты моего сканирования всех 2,6 миллионов доменов, я пришел к другому выводу о phpinfo().

Я нашел более 45 000 страниц phpinfo().

Уязвимые версии PHP

Много-много лет назад я начал изучать PHP 4, и да, он до сих пор работает на некоторых серверах… что за хрень. Я сделал сканирование в октябре 2022 года. С 28 ноября 2022 года PHP 7.4 и все, что было раньше, устарело, поэтому PHP 7.x больше не поддерживается, только PHP 8.x. Но ищите сами.

PHP versions

:::подсказка Проверьте свою версию PHP: если < 8: 😟 еще: 🙂

:::

Уязвимые версии ImageMagick

ImageMagick — это библиотека для работы с изображениями с помощью PHP. В некоторых старых версиях были серьезные проблемы с безопасностью. Примерно из одной трети мы смогли извлечь версию ImageMagick. 90% этих библиотек устарели.

ImageMagick versions

Уязвимые версии серверного программного обеспечения (например, nginx, Apache или Microsoft IIS)

Часто версия сервера отображается в данных phpinfo. Довольно много используемых серверов используют устаревшую версию.

Server versions (Apache, nginx, IIS and others)

:::информация Рекомендуется отключить заголовок сервера или хотя бы версию сервера.

:::

Уязвимые версии openssl

Еще один интересный модуль, где вы можете найти информацию о версии в данных phpinfo, — это openssl. Openssl — это набор инструментов для криптографии и безопасной связи. Он широко распространен и используется. В прошлом с этой библиотекой возникали серьезные проблемы с безопасностью (Вы помните heartbleed?)

Из версий, извлеченных из нашего набора данных, 1/3 используемых библиотек openssl устарела.

OpenSSL versions

Небезопасные конфигурации PHP

Если вы запускаете веб-приложение PHP, вам следует подумать о включении или отключении некоторых параметров, чтобы предотвратить утечку информации и проблемы с безопасностью.

Сообщения об ошибках

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

display-errors

Отключенные функции

В PHP вы можете отключить некоторые функции. Имеет смысл отключить некоторые опасные функции. Например, exec или passthru, поскольку эти функции позволяют злоумышленнику выполнять системные команды. Чуть менее 1 на тысячу конфигураций PHP используют эту опцию и отключают все опасные функции PHP.

disabled-functions

Разрешить открытие URL/Разрешить включение URL/Открыть на основе

В PHP есть и другие настройки, которые вы должны использовать очень осознанно. Например, можно ли открывать файлы из внешних источников или загружать включения из внешних источников. Очень немногие настройки PHP имеют ограничения.

Ниже представлена ​​статистика для следующих настроек:

Разрешить открытие URL

allow-url-fopen

Разрешить включение URL

allow-url-include

Открыть

open-basedir

Утечка конфиденциальных данных 💀

Информация о сервере и конфигурации PHP может помочь злоумышленнику получить сведения о возможных эксплойтах и ​​запущенных модулях на сервере. Но самое интересное — это конфиденциальные данные, которые можно открыть через phpinfo(), такие как переменные среды или переменные $_SERVER. Там я нашел пароли к базам данных, учетные данные электронной почты, закрытые ключи, секреты API, активные ключи Stripe, учетные данные для доступа к облачным базам данных, очереди сообщений и ключи шифрования.

Я думаю, что у одного хостера возникла проблема с настройкой всех его клиентов. Учетные данные базы данных доступны через переменные среды всех многих его клиентов.

Environment variables 🤯

And $_SERVER["XXX"], also 😱

Обход WAF

В переменных PHP $_SERVER я нашел около 500 прямых IP-адресов серверов веб-приложений, которые должны быть защищены WAF (брандмауэром веб-приложений, например Cloudflare). Когда вы знаете прямой IP-адрес сервера, вы можете обойти все механизмы защиты WAF, напрямую обратившись к веб-приложению.

Cloudflare bypass with direct server IP

Заключение

Что я должен сказать: 🤯. Я был очень удивлен тем, что было найдено в файле phpinfo(). Каждый разработчик PHP должен подумать о том, что может быть утечек через общедоступные данные phpinfo(). Вы не должны развертывать phpinfo() на рабочем сервере. Или, если нужно, поместите файл в защищенную паролем папку.

Также обновите серверное программное обеспечение, чтобы получать все последние исправления безопасности.

Проверьте свой сервер вручную, с помощью шаблона ядер или такой службы, как scan.nan.io.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE