#php #десер #десериализация #deserialization
Десериализация — это процесс преобразования строки обратно в объект. В PHP для этого используются функции
serialize() и unserialize(). Однако, если десериализовать данные из ненадёжных источников, это может стать серьёзной уязвимостью.Как работает атака?
Рассмотрим пример кода, где используется класс с magic method (если и другие)
__wakeup() — он автоматически вызывается при десериализации объекта:<?php
class Injection {
public $payload;
function __wakeup() {
eval($this->payload);
}
}
if (isset($_REQUEST['data'])) {
$obj = unserialize($_REQUEST['data']);
// Дальнейшая работа с $obj
}
?>
Злоумышленник может передать специально сформированный сериализованный объект через параметр data:
O:9:"Injection":1:{s:7:"payload";s:21:"phpinfo(); // payload";}При десериализации будет выполнена команда
phpinfo(), что может открыть доступ к конфиденциальной информации о веб сервере. Более сложные payload'ы могут привести к RCE и другим атакам.unserialize() для входящих данных.data = unserialize($input, ['allowed_classes' => ['SafeClass']]);
Ваш опыт?
Сталкивались ли вы с такой багой на проектах? Какие рекомендации давали по защите? Делитесь своим опытом в комментариях)
Дополнительное чтиво
Небезопасная десериализация в PHP: Как создать собственный эксплойт - это статья от моего хорошего знакомого wr3dmast3r
Сериализация и десериализация: что это такое и как это работает - а это базовое чтиво по десеру в пыхе
PayloadsAllTheThings | PHP Deserialization - тут и так понятно что будет)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍7 2
Forwarded from Hunt Or Be Hunted (Alexey Kosmachev)
(PHP) Type Juggling
Этот пост начну с предповествования.
У различных языков программирования разный подход к типизации - то есть к тому, насколько строго ЯП будет относиться к типам переменным (int, float, string и т.д.). Здесь будет идти речь о свободно типизированных языках программирования (eng: loosely typed), а в частности о PHP, как о ЯП, который собрал в себе наиболее интересные штуки, о которых рассказано далее. Данные языки стараются "предугадывать", что имел в виду программист или пользователь и делать внутри неявное преобразование переменных в другие типы. К слову, некоторые подходы могут быть применимы и к другим свободно типизорованным ЯП, например Perl, JavaScript, но у них есть своя специфика, о которой здесь рассказывать не буду.
Итак,
🟪 Type Juggling - автоматическая конвертация типов в свободно типизированных языках программирования.
По своей сути это является особенностью языка, а не уязвимостью. Тем не менее, неаккуратное ее использование зачастую приводит к неожиданным последствиям, которые зачастую результируют в проблемы безопасности.
🟣 Тип:
Programming Language, Web, Server-Side.
Наибольший интерес в данном ключе вызывают операции сравнения. В PHP их два вида:
📝 свободное (loose):
📝 строгое (strict):
И самые интересные моменты всплывают как раз в первом типе.
🟣 Пример уязвимого кода:
В данном случае если пользователь введет что-то, что при преобразовании в int будет давать 0 (например
Еще один интересный пример
Больше подобных сравнений я поместил в скрине к посту (источник)
🟣 Влияние:
Такие штуки помогают обходить разные условные конструкции и критичность будет зависеть от расположения подобной проблемы в коде. Один из наиболее базовых и критичных импактов - возможность обходить контроль доступа при авторизации (сравнение хешей паролей) - тут и появилось понятие "магических хешей" (magic hashes).
🟣 Как защититься?
Использовать строгое (`===`) сравнение и использовать функции
На самом деле, в наши дни такое можно встретить только на CTF, где оно используется очень часто. Последние версии PHP умеют элегантно справляться с подобными проблемами и большинством способов обхода защиты, а даже если и используется более старая версия языка, то обнаружить эту проблему без наличия исходных кодов (и явных признаков от самого приложения) крайне сложно. Но тем не менее, знать о существовании этого очень полезно и может пригодиться во многих сферах работы.
#edu #vuln #programming #web #php #php_type_juggling #magic_hashes #type_juggling
Этот пост начну с предповествования.
У различных языков программирования разный подход к типизации - то есть к тому, насколько строго ЯП будет относиться к типам переменным (int, float, string и т.д.). Здесь будет идти речь о свободно типизированных языках программирования (eng: loosely typed), а в частности о PHP, как о ЯП, который собрал в себе наиболее интересные штуки, о которых рассказано далее. Данные языки стараются "предугадывать", что имел в виду программист или пользователь и делать внутри неявное преобразование переменных в другие типы. К слову, некоторые подходы могут быть применимы и к другим свободно типизорованным ЯП, например Perl, JavaScript, но у них есть своя специфика, о которой здесь рассказывать не буду.
Итак,
По своей сути это является особенностью языка, а не уязвимостью. Тем не менее, неаккуратное ее использование зачастую приводит к неожиданным последствиям, которые зачастую результируют в проблемы безопасности.
Programming Language, Web, Server-Side.
Наибольший интерес в данном ключе вызывают операции сравнения. В PHP их два вида:
== или !==== иди !==И самые интересные моменты всплывают как раз в первом типе.
if (md5($user_input) == '0e732793752744629114494286417663') { ...
В данном случае если пользователь введет что-то, что при преобразовании в int будет давать 0 (например
GTJ3YSmZ в md5 будет 0e{digits...}), то условие будет истинным, так как для PHP обе эти строки будут конвертироваться в 0 (данный синтаксис возводит 0 в огромную степень, что результирует в 0).Еще один интересный пример
'abc' == 0. Данное условие будет истинным, так как в первой строке PHP будет смотреть на ее начало в поиске цифр, по ненахождению которых он будет считать строку нулем. То есть следующее условие также будет истинным: '23abc' == 23Больше подобных сравнений я поместил в скрине к посту (источник)
Такие штуки помогают обходить разные условные конструкции и критичность будет зависеть от расположения подобной проблемы в коде. Один из наиболее базовых и критичных импактов - возможность обходить контроль доступа при авторизации (сравнение хешей паролей) - тут и появилось понятие "магических хешей" (magic hashes).
Использовать строгое (`===`) сравнение и использовать функции
password_hash(), password_verify() и hash_equals() для работы с хешами и паролями. (Ну и md5 не используйте для этих целей - он уже давно признан старым, оставьте в покое старичка).На самом деле, в наши дни такое можно встретить только на CTF, где оно используется очень часто. Последние версии PHP умеют элегантно справляться с подобными проблемами и большинством способов обхода защиты, а даже если и используется более старая версия языка, то обнаружить эту проблему без наличия исходных кодов (и явных признаков от самого приложения) крайне сложно. Но тем не менее, знать о существовании этого очень полезно и может пригодиться во многих сферах работы.
#edu #vuln #programming #web #php #php_type_juggling #magic_hashes #type_juggling
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥2
RainLoop: от шелла через аттач, до кэша в инбоксе
#bugbounty #bughunter #багбаунти #report #php
🔥 Данная статья интересна тем, что Beget как вендор на bizone bugbounty раскрыл как их поломал багхантер hunter)
Около четырех месяцев назад один из участников программы нашел критическую уязвимость в архивном, но всё еще популярном веб-почтовом клиенте RainLoop. Мы оперативно отправили баг-репорт в апстрим и, как выяснилось позже, сам багхантер также напрямую уведомил разработчиков проекта.
До этого в течение долгого времени мы предлагали пользователям RainLoop как альтернативный почтовый клиент. Однако после обнаружения уязвимости приняли решение полностью отказаться от его использования и перевели всех активных пользователей на основной, поддерживаемый интерфейс.
Если вы интересуетесь безопасностью PHP-приложений, работой с legacy-софтом или просто любите хорошие багхантерские истории, этот текст определенно для вас.
🔗 Читать далее
🌚 @poxek | 🌚 Блог | 📺 YT | 📺 RT | 📺 VK
#bugbounty #bughunter #багбаунти #report #php
Около четырех месяцев назад один из участников программы нашел критическую уязвимость в архивном, но всё еще популярном веб-почтовом клиенте RainLoop. Мы оперативно отправили баг-репорт в апстрим и, как выяснилось позже, сам багхантер также напрямую уведомил разработчиков проекта.
До этого в течение долгого времени мы предлагали пользователям RainLoop как альтернативный почтовый клиент. Однако после обнаружения уязвимости приняли решение полностью отказаться от его использования и перевели всех активных пользователей на основной, поддерживаемый интерфейс.
Если вы интересуетесь безопасностью PHP-приложений, работой с legacy-софтом или просто любите хорошие багхантерские истории, этот текст определенно для вас.
Please open Telegram to view this post
VIEW IN TELEGRAM
ReDisclosure. Разбираем инъекции в полнотекстовый поиск на примере MyBB
#mybb #php #sqli #sast #waf
В течение многих лет атаки с использованием SQL-инъекций в основном сводились к попыткам нарушить синтаксис запросов. Однако с развитием инструментов акцент сместился на создание «крутых нагрузок» и разбор предупреждений SAST, которые многие игнорируют. Я же попробовал поискать возможность инъекции без экранирования — с мыслью о том, что на это у SAST или WAF не будет правил.
Так я нащупал новую технику для внедрения в регулярные выражения. Сначала я немного расскажу о традиционных методах, которые были нам известны раньше, затем перейдем к моим находкам. В ходе тестирования мне удалось вскрыть уязвимость в MyBB, которая позволяла просматривать названия удаленных тем без аутентификации.
🔓 Ксакеп
🌚 @poxek | 📲 MAX |🌚 Блог | 📺 YT | 📺 RT | 📺 VK | ❤️ Мерч
#mybb #php #sqli #sast #waf
В течение многих лет атаки с использованием SQL-инъекций в основном сводились к попыткам нарушить синтаксис запросов. Однако с развитием инструментов акцент сместился на создание «крутых нагрузок» и разбор предупреждений SAST, которые многие игнорируют. Я же попробовал поискать возможность инъекции без экранирования — с мыслью о том, что на это у SAST или WAF не будет правил.
Так я нащупал новую технику для внедрения в регулярные выражения. Сначала я немного расскажу о традиционных методах, которые были нам известны раньше, затем перейдем к моим находкам. В ходе тестирования мне удалось вскрыть уязвимость в MyBB, которая позволяла просматривать названия удаленных тем без аутентификации.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
1C-Bitrix <= 25.100.500 (Translate Module / Модуль Перевод) RCE CVE-2025-67887
Bitrix24 <= 25.100.300 (Translate Module / Модуль Перевод) RCE CVE-2025-67886
#1сbitrix #bitrix #1c #rce #php
Уязвимость находится в Модуль Перевод, который позволяет пользователям загружать и извлекать архивные файлы во временный каталог. Однако приложение не проверяет содержимое этих архивов перед их извлечением. Это может быть использовано злоумышленниками для загрузки и выполнения произвольного PHP-кода путем включения PHP-файла вместе со специально созданным файлом
Для успешного использования этой уязвимости требуется учетная запись с правами
🔗 PoC CVE-2025-67887 (не тестировал)
🔗 PoC CVE-2025-67886 (не тестировал)
🔥 Принцип работы эксплойта
Скрипт автоматизирует процесс эксплуатации уязвимости, который можно разбить на следующие этапы:
1️⃣ Аутентификация: Скрипт начинает с попытки аутентификации в системе 1C-Bitrix, используя логин и пароль, которые вы должны предоставить при запуске. Для этого он отправляет POST-запрос на страницу авторизации.
2️⃣ Получение CSRF-токена: После успешного входа в систему скрипт извлекает сессионный ключ (
3️⃣ Загрузка вредоносного архива: Далее скрипт создает и загружает на сервер вредоносный архив
4️⃣ Распаковка архива и активация шелла: После загрузки архива скрипт последовательно вызывает два других AJAX-метода:
5️⃣ Интерактивная сессия с сервером: На последнем этапе скрипт определяет путь к загруженному веб-шеллу и входит в бесконечный цикл, предоставляя вам интерактивную командную строку для выполнения произвольных команд на целевом сервере. Каждая введенная вами команда кодируется в Base64, отправляется на веб-шелл через специальный HTTP-заголовок, выполняется на сервере, и результат возвращается вам в консоль.
p.s. Пришла 1С Битрикс и попросили написать, что они не подтверждают этой уязвимости
🌚 @poxek | 📲 MAX |🌚 Блог | 📺 YT | 📺 RT | 📺 VK | ❤️ Мерч
Bitrix24 <= 25.100.300 (Translate Module / Модуль Перевод) RCE CVE-2025-67886
#1сbitrix #bitrix #1c #rce #php
Уязвимость находится в Модуль Перевод, который позволяет пользователям загружать и извлекать архивные файлы во временный каталог. Однако приложение не проверяет содержимое этих архивов перед их извлечением. Это может быть использовано злоумышленниками для загрузки и выполнения произвольного PHP-кода путем включения PHP-файла вместе со специально созданным файлом
.htaccess в архив.Для успешного использования этой уязвимости требуется учетная запись с правами
SOURCE и WRITE для Модуль Перевод.Скрипт автоматизирует процесс эксплуатации уязвимости, который можно разбить на следующие этапы:
bitrix_sessid), который необходим для защиты от межсайтовой подделки запросов (CSRF). Этот токен будет использоваться во всех последующих запросах к защищенным разделам системы.rce.tar.gz. Этот архив содержит PHP-веб-шелл (shell.php). Загрузка осуществляется через AJAX-метод translate.asset.grabber.upload, который, по всей видимости, не выполняет должных проверок безопасности содержимого загружаемых файлов.translate.asset.grabber.extract и translate.asset.grabber.apply. Эти действия приводят к распаковке архива во временную директорию на сервере, делая веб-шелл доступным по прямому URL.p.s. Пришла 1С Битрикс и попросили написать, что они не подтверждают этой уязвимости
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9 6❤🔥1
CVE-2025-66039 (CVSS 9.3) — обход аутентификации в FreePBX Endpoint Manager
#CVE #FreePBX #AuthBypass #PHP
В модуле Endpoint Manager обнаружилась логическая ошибка при обработке аутентификации, позволяющая получить админа без пароля. Система некорректно верифицирует входящие запросы если в настройках выбран тип аутентификации webserver.
ℹ️ Техническая суть
Когда FreePBX настроен с
Пример уязвимого запроса:
❗️ Защита
Обновить модуль Endpoint Manager до версий 16.0.44 / 17.0.23 или выше или, как временная мера, отключить webserver, если он не требуется.
🪲 Инструменты для детекта (nuclei правило чекает просто версию)
🌚 @poxek | 📲 MAX |🌚 Блог | 📺 YT | 📺 RT | 📺 VK | ❤️ Мерч
#CVE #FreePBX #AuthBypass #PHP
В модуле Endpoint Manager обнаружилась логическая ошибка при обработке аутентификации, позволяющая получить админа без пароля. Система некорректно верифицирует входящие запросы если в настройках выбран тип аутентификации webserver.
Когда FreePBX настроен с
AUTHTYPE=webserver, система слепо доверяет заголовку Authorization: Basic — достаточно указать валидное имя пользователя (например, admin) с любым паролем.Пример уязвимого запроса:
GET /admin/config.php?display=epm_advanced&view=settings HTTP/1.1
Host: target-freepbx.com
User-Agent: Mozilla/5.0...
Authorization: Basic YWRtaW46YWRtaW4=
Content-Type: application/x-www-form-urlencoded
Connection: close
Обновить модуль Endpoint Manager до версий 16.0.44 / 17.0.23 или выше или, как временная мера, отключить webserver, если он не требуется.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10 5 2🌚1👾1