В этой статье будет рассказано о десериализации в Java и расширении Java Serial Killer Burp. Для тех, кто не хочет читать данный опус, а желает сразу скачать расширение и приступить к практике, в помощь соответствующая страница на Github.
Автор: Eric Gruber
Введение
В этой статье будет рассказано о десериализации в Java и расширении Java Serial Killer Burp. Для тех, кто не хочет читать данный опус, а желает сразу скачать расширение и приступить к практике, в помощь соответствующая страница на Github.
Недавняя атака, связанная с десериализацией в Java, предоставляет массу возможностей пентестерам для получения доступа к системам, с которыми взаимодействуют Java-приложения. В большинстве случаев мы можем перенаправить соединения между приложением и сервером через прокси для того, чтобы обнаружить сериализованное тело HTTP-запроса во время ответа (предполагается, что при коммуникации используется HTTP-протокол). В этой статье рассматривается пример с HTTP, а в качестве прокси используется Burp.
Burp Proxy
Ниже показан пример, где HTTP-запрос с сериализованным Java-объектом проходит через Burp. Тело запроса выглядит так:
Рисунок 1: HTTP-запрос с сериализованным Java-объектом
Из рисунка выше видно, что сериализованный объект под названием State состоит из двух строк: capitol (написано неверно в данном примере) и nicknames. С этого момента мы можем манипулировать запросом при помощи пересылки во вкладку Repeater.
Генерирование сериализованных эксплоитов
Существует несколько утилит, способных генерировать сериализованные Java-объекты для эксплуатации уязвимостей в приложениях. Мне нравится ysoserial. На момент написания статьи ysoserial могла генерировать 9 типов полезных нагрузок.
Запускаем jar-файл с указанием типа полезной нагрузки и команды для выполнения, после чего будет сгенерирован сериализованный объект. Не забудьте указать выходной файл:
java -jar ./ysoserial-0.0.4-all.jar CommonsCollections1 'ping netspi.com' > payload
Затем результат копируется в Burp через соответствующую команду контекстного меню:
Рисунок 2: Копирование сгенерированного объекта из файла
Генерирование сериализованных эксплоитов в Burp
Ysoserial работает стабильно, но в целях оптимизации своей деятельности по созданию эксплоитов, чтобы не переключаться между командной строкой и Burp, я создал расширение Java Serial Killer. Java Serial Killer является модифицированной версией вкладки Repeater, которая генерирует полезную нагрузку при помощи ysoserial.
Чтобы использовать расширение, кликните правой кнопкой мыши на POST-запросе с сериализованным Java-объектом и в контекстном меню выберите пункт Send to Java Serial Killer.
Рисунок 3: Отправка HTTP-запроса на обработку в расширение Send to Java Serial Killer
После выполнения команды выше в Burp появится новая вкладка со скопированным запросом.
Рисунок 4: Вкладка расширения Send to Java Serial Killer
Как видно из рисунка выше, во вкладке Java Serial Killer есть несколько кнопок, предназначенных для отсылки запросов, сериализации объекта, выбора типа полезной нагрузки и выбора команды для запуска.
Допустим, мы хотим выполнить пинг ресурса netspi.com при помощи полезной нагрузки с типом CommonsCollections1, поскольку знаем, что используется Commons-Collections 3.1. Вначале мы выделяем область, которая будет заменена на полезную нагрузку, выбираем тип полезной нагрузки в выпадающем списке, а затем указываем команду и нажимаем кнопку Serialize. При нажатии на кнопку со знаком вопроса выведется информации о типах полезных нагрузках и версиях приложений, для которых предназначены эти полезные нагрузки. После выделения области каждое последующее нажатие кнопки Serialize будет обновлять выделенное содержимое в запросе (при изменении команды, тип полезной нагрузки или кодировки).
Рисунок 5: Пример эксплоита с полезной нагрузкой
Также можно использовать кодировку Base64, если отметить соответствующий флажок.
Рисунок 6: Закодированный вариант полезной нагрузки
Если мы хотим изменить какой-либо параметр в запросе с полезной нагрузкой, просто выделяем область и нажимаем кнопку Serialize.
Рисунок 7: Замена параметра на полезную нагрузку
Скорее всего, нам понадобится кодирование полезной нагрузки как параметра в xml:
Рисунок 8: Закодированная полезная нагрузка, используемая в качестве параметра
По мере добавления новых типов полезных нагрузок, расширение будет также обновляться.
Заключение
Я отправил написанное расширение в магазин приложений Burp и не думаю, что одобрение займет много времени. Однако если вы хотите попробовать Java Serial Killer прямо сейчас, можете скачать с Github (https://github.com/NetSPI/JavaSerialKiller). Для корректной работы необходима Java 8.
Ваш провайдер знает о вас больше, чем ваша девушка? Присоединяйтесь и узнайте, как это остановить!