2,6 миллиона доменов и ~45 000 открытых Phpinfo() Позже… История незащищенного Phpinfo()
3 декабря 2022 г.После сканирования 2,6 миллиона доменов на наличие открытых каталогов .git (ссылка на статью), .env (ссылка на статью a>) и .DS_Store (ссылка на статью< /a>), я сделал такое же сканирование для phpinfo-файлов, таких как info.php или phpinfo.php.
В первой части этой статьи я объясню, что такое phpinfo и что из него можно извлечь. Во второй части я расскажу о секретной информации, которую нашел.
Что такое phpinfo()?
phpinfo() — это функция, которая отображает информацию о конфигурации PHP и сервера. . Это помогает разработчикам PHP видеть, какие модули активны и какие версии этих модулей работают на сервере.
Являются ли данные, представленные с помощью phpinfo(), опасными?
На первый взгляд, эта информация не является конфиденциальной. И многие разработчики пропускают удаление файлов phpinfo в производственной среде. Но о мальчик, это не так. Проанализировав результаты моего сканирования всех 2,6 миллионов доменов, я пришел к другому выводу о phpinfo().
Я нашел более 45 000 страниц phpinfo().
Уязвимые версии PHP
Много-много лет назад я начал изучать PHP 4, и да, он до сих пор работает на некоторых серверах… что за хрень. Я сделал сканирование в октябре 2022 года. С 28 ноября 2022 года PHP 7.4 и все, что было раньше, устарело, поэтому PHP 7.x больше не поддерживается, только PHP 8.x. Но ищите сами.
:::подсказка Проверьте свою версию PHP: если < 8: 😟 еще: 🙂
:::
Уязвимые версии ImageMagick
ImageMagick — это библиотека для работы с изображениями с помощью PHP. В некоторых старых версиях были серьезные проблемы с безопасностью. Примерно из одной трети мы смогли извлечь версию ImageMagick. 90% этих библиотек устарели.
Уязвимые версии серверного программного обеспечения (например, nginx, Apache или Microsoft IIS)
Часто версия сервера отображается в данных phpinfo. Довольно много используемых серверов используют устаревшую версию.
:::информация Рекомендуется отключить заголовок сервера или хотя бы версию сервера.
:::
Уязвимые версии openssl
Еще один интересный модуль, где вы можете найти информацию о версии в данных phpinfo, — это openssl. Openssl — это набор инструментов для криптографии и безопасной связи. Он широко распространен и используется. В прошлом с этой библиотекой возникали серьезные проблемы с безопасностью (Вы помните heartbleed?)
Из версий, извлеченных из нашего набора данных, 1/3 используемых библиотек openssl устарела.
Небезопасные конфигурации PHP
Если вы запускаете веб-приложение PHP, вам следует подумать о включении или отключении некоторых параметров, чтобы предотвратить утечку информации и проблемы с безопасностью.
Сообщения об ошибках
В продуктивной системе вы должны отключить любые сообщения об ошибках пользователю. С помощью отчетов об ошибках и трассировки стека злоумышленник может получить ценную информацию о вашем приложении.
Отключенные функции
В PHP вы можете отключить некоторые функции. Имеет смысл отключить некоторые опасные функции. Например, exec
или passthru
, поскольку эти функции позволяют злоумышленнику выполнять системные команды. Чуть менее 1 на тысячу конфигураций PHP используют эту опцию и отключают все опасные функции PHP.
Разрешить открытие URL/Разрешить включение URL/Открыть на основе
В PHP есть и другие настройки, которые вы должны использовать очень осознанно. Например, можно ли открывать файлы из внешних источников или загружать включения из внешних источников. Очень немногие настройки PHP имеют ограничения.
Ниже представлена статистика для следующих настроек:
Разрешить открытие URL
Разрешить включение URL
Открыть
Утечка конфиденциальных данных 💀
Информация о сервере и конфигурации PHP может помочь злоумышленнику получить сведения о возможных эксплойтах и запущенных модулях на сервере. Но самое интересное — это конфиденциальные данные, которые можно открыть через phpinfo(), такие как переменные среды или переменные $_SERVER. Там я нашел пароли к базам данных, учетные данные электронной почты, закрытые ключи, секреты API, активные ключи Stripe, учетные данные для доступа к облачным базам данных, очереди сообщений и ключи шифрования.
Я думаю, что у одного хостера возникла проблема с настройкой всех его клиентов. Учетные данные базы данных доступны через переменные среды всех многих его клиентов.
Обход WAF
В переменных PHP $_SERVER я нашел около 500 прямых IP-адресов серверов веб-приложений, которые должны быть защищены WAF (брандмауэром веб-приложений, например Cloudflare). Когда вы знаете прямой IP-адрес сервера, вы можете обойти все механизмы защиты WAF, напрямую обратившись к веб-приложению.
Заключение
Что я должен сказать: 🤯. Я был очень удивлен тем, что было найдено в файле phpinfo(). Каждый разработчик PHP должен подумать о том, что может быть утечек через общедоступные данные phpinfo(). Вы не должны развертывать phpinfo() на рабочем сервере. Или, если нужно, поместите файл в защищенную паролем папку.
Также обновите серверное программное обеспечение, чтобы получать все последние исправления безопасности.
Проверьте свой сервер вручную, с помощью шаблона ядер или такой службы, как scan.nan.io.
Оригинал