Статья 81: Принцип перехвата уязвимости JSONP для получения конфиденциальной информации, повторение и краткое описание ошибок
Статья 81: Принцип перехвата уязвимости JSONP для получения конфиденциальной информации, повторение и краткое описание ошибок

Часть 2. Процесс технических исследований

  • Основы JSONP

первый,JSON и JSONP — это две концепции.,JSON — популярный формат данных.,Используется для передачи и хранения данных между различными приложениями. JSONP был до CORS,Технология разрешения междоменных запросов,Он позволяет веб-страницам получать данные из других доменных имен, которые не соответствуют той же политике происхождения. JSONP — это способ использования json;,Позволяет текущей веб-странице получать данные из других доменных имен в разных доменах.,он использует в своих интересах<script>МаркированныйsrcСвойства, на которые не влияет политика одного и того же происхождения.

Когда веб-сайт передает конфиденциальные данные пользователей через JSONP, злоумышленник может создать сторонний веб-сайт, встроить ссылки JSONP внутрь веб-страницы и внедрить вредоносный код JS. Как только жертва просматривает этот веб-сайт, его или ее конфиденциальная информация будет неизвестна. При определенных обстоятельствах заранее созданный злоумышленником js-код может быть украден. Это уязвимость перехвата JSONP, которую мы собираемся объяснить сегодня.

  • Процесс создания среды

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

Напишите страницу GetUserInfo для возврата данных в формате JSONP, включая идентификационный номер конфиденциальных данных пользователя, имя, пароль и т. д.

Как показано на рисунке ниже, сгенерируйте пакет war и разверните его в tomcat. Введите имя пользователя и пароль admin:123456 в браузере, и он сообщит об успешном входе в систему.

Посетите следующий URL-адрес, чтобы имитировать обычный веб-сайт и вернуть личную информацию, которую мы заполнили сами.

http://192.168.237.1:9999/Servlet/GetUserInfo

Далее мы проходимcallbackпараметр,Официально имитирует захват JSONP,Было обнаружено, что текущая страница JSONP вернула формат кода, соответствующий стандартам JavaScript.,test111() эквивалентен функции JS.

  • JSONP перехватывает процесс тестирования уязвимостей

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

Среди них user111222 — функция, которую нужно вызвать обратно,

<script src=”http://192.168.237.1:9999/Servlet/GetUserInfo?callback=user111222”>

Это эквивалентно загрузке фрагмента JS-кода, и этот JS-код

user111222({"identitycard":"370688022919880819","password":"P@ssw0rd","username":"Ли Си"})

Затем движок js продолжит поиск функции user111222 на текущей странице и выдаст предупреждение о выполнении (код JSON.stringify(data));

Многие статьи не содержат приведенного выше описания, в результате чего многие новички до сих пор не понимают принцип уязвимости перехвата JSONP.。Итак, мы используем GoogleБраузерchromeтестодин раз,Нашел пустую страницу, вернулся,Никакие конфиденциальные данные пользователя не всплывают.

Почему это? ABC_123 проверил код от начала до конца,Я понял, что проблем быть не должно。Поэтому я использовал программное обеспечение для захвата пакетов для захвата пакетов данных и обнаружил, что пакет HTTP-запроса не содержит файла cookie.,без файлов cookie,Конечно, никакие конфиденциальные данные не будут возвращены.

Вспоминая предыдущее тестирование уязвимостей междоменного совместного использования ресурсов CORS, мне интересно, принял ли Google Chrome меры предосторожности против взлома JSONP. Поэтому я перешел на более старую версию браузера Firefox, чтобы протестировать его, и обнаружил, что тест на уязвимость перехвата JSONP прошел успешно. Будучи жертвой, я посетил страницу злоумышленника http://192.168.237.128:8888/jsonpHack.html и Появилось сообщение о том, что моя личная информация может быть получена.

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

Затем я протестировал IE11 и обнаружил, что уязвимость перехвата JSONP все еще можно успешно протестировать.

Подводя итог, мы нашли,Для уязвимостей перехвата JSONP в новых браузерах или в некоторых браузерах приняты превентивные меры, направленные на устранение основной причины.,Вредность этого вида лазейки в ближайшее время постепенно снизится.

  • Рекомендации по устранению уязвимостей, связанных с перехватом JSONP

1. Проверьте источник реферера при принятии запроса.

2. Добавьте токен в запрос и проверьте его на серверной стороне.

3. Строго фильтруйте вывод имен и данных функций обратного вызова в формате JSON.

4. Замените междоменную функциональность JSONP на CORS.

5. Строго фильтруйте имена функций обратного вызова и выходные данные в формате JSON, чтобы предотвратить уязвимости XSS.

6. Строго установите стандартный вывод Content-Type и кодировку формата JSON ( Content-Type : application/json; charset=utf-8 )。

7. Добавьте другие символы (например: /**/, возврат каретки и перевод строки) перед выводом обратного вызова. Это не повлияет. JSON Загрузка файлов также может в определенной степени предотвратить атаки перехвата JSONP.

Резюме части 3

1. В последней версии Google Chrome приняты меры предосторожности против атак перехвата JONSP. Именно поэтому многие уязвимости перехвата JSONP могут быть успешно воспроизведены другими, но некоторым людям всегда не удается их воспроизвести. Это указывает на то, что вред от перехвата JSONP и уязвимостей междоменного совместного использования ресурсов CORS будет постепенно уменьшаться.

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

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода