предисловие
в предыдущих главах(Серия статей по веб-безопасности (1): Основы и принципы XSS-атак)так же как(Серия веб-безопасности (2): расширенные атаки XSS (предварительное исследование полезной нагрузки XSS))В , я подробно представил принцип формирования XSS и классификацию XSS-атак, и написал небольшой каштан, чтобы показатьXSS Payload
опасность.
В настоящее время типы уязвимостей XSS в основном делятся на три категории: тип отражения, тип хранилища и тип DOM.permeate
В качестве примера возьмем систему экологического тестирования, которая анализирует функции веб-сайтов, направляет идеи атак и помогает читателям быстро находить возможные уязвимости на веб-сайтах.
Отраженный XSS-майнинг
Теперь мне нужно выполнить ручной майнинг уязвимостей XSS. Перед ручным майнингом мне нужно просмотреть функциональные точки веб-сайта. Следующий рисунокpermeate
интерфейс
Анализ мыслей
Мы знаем, что отраженный XSS в основном распространяется через URL-адреса, поэтому мне нужно подумать о том, где на странице будут отображаться параметры URL-адреса.Я полагаю, что первая интуиция в сознании большинства читателей — это панель поиска, особенно некоторых больших Внутренний поиск веб-сайта, искомые ключевые слова будут отображаться на текущей странице. Например, поисковик:
Домашняя страница, которую мы тестировали, также имеет функцию поиска по веб-сайту, поэтому мы можем начать тест с функции поиска, чтобы увидеть, можно ли выполнить полезную нагрузку XSS.Сначала мы вводим простую полезную нагрузку для тестирования, и тестовый код<img onerror="alert(1)" src=1 />
Когда мы нажимаем кнопку поиска, URL-адрес должен автоматически измениться наhttp://localhost:8888/home/search.php?keywords=<img onerror="alert(1)" src=1 />
Процесс работы
Давай попробуем:
Сначала введите поисковый запрос
искать снова
Мы обнаружили, что Google Chrome фактически заблокировал событие напрямую, и пейлоад не сработал.Здесь я должен сообщить читателям, что ядро браузера Chrome имеет свой собственный XSS-фильтр, который будет автоматически перехватывать отраженный XSS, так что старайтесь изо всех сил to Вместо тестирования с Chrome давайте продолжим тестирование с Firefox:
Конечно же, наша полезная нагрузка сработала напрямую.
Анализ результатов
Эта полезная нагрузка срабатывает, указывая на то, что мы обнаружили отражающую уязвимость XSS. Конечно, эта уязвимость очень проста, и большинство веб-сайтов были отфильтрованы. Кроме того, по мере того, как браузер становится все более и более мощным, браузер автоматически получает фильтры XSS. умнее, эта уязвимость будет становиться все менее и менее распространенной.Ниже я проверю майнинг более распространенного хранимого XSS и расскажу, как его обойти.
Сохраненный XSS-майнинг
Анализ мыслей
Код атаки сохраненного XSS существует на стороне сервера, поэтому нам нужно найти функцию веб-сайта для хранения данных на бэкэнде, мы имеем определенное представление об этом веб-сайте и найдемpermeate
С функцией публикации и ответа это канал связи между сетью и фоном. Вся информация о сообщениях будет храниться на сервере. С этой информацией мы можем войти на доску и опубликовать:
Войдите в интерфейс публикации:
Обнаружение уязвимостей
Теперь мы заполняем основную полезную нагрузку в заголовке и содержании:123<script>alert('123')</script>
Делаем операцию публикации:
Страница непосредственно выполняет нашу Payload, мы нажимаем OK, чтобы просмотреть список:
Когда мы войдем внутрь поста, мы обнаружим следующие сценарии:
Очевидно, что Payload в основной части статьи не выполняется, что тут происходит?
захват пакетов
Почему содержимое заголовка может быть Payload, а содержимое основного тела не может быть Payload? Открываем консоль и переключаемся наNetwork
Еще один пост для просмотра:
Мы видим, что соответствующий контент был экранирован. Существует два типа экранирования: внешнее экранирование и внутреннее экранирование. Если это внутреннее экранирование, нам обычно не нужно его проверять, потому что мы Не зная внутренностей серверного кода, если он экранирован, то это ограничение можно обойти.
Итак, как это сделать?
Мы копируем URL
curl 'http://localhost:8888/home/_fatie.php?bk=5&zt=0' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Origin: http://localhost:8888' -H 'Upgrade-Insecure-Requests: 1' -H 'Content-Type: application/x-www-form-urlencoded' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: http://localhost:8888/home/fatie.php?bk=5' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: PHPSESSID=7690435026da386df8a80e63f3da2089' --data 'csrf_token=9191&bk=5&title=123%3Cscript%3Econsole.log%28232%29%3C%2Fscript%3E&content=%3Cp%3E123%26lt%3Bscript%26gt%3Bconsole.log%28232%29%26lt%3B%2Fscript%26gt%3B%3C%2Fp%3E' --compressed
Найдите в нем заголовок и содержимое и замените содержимое содержимого на содержимое заголовка:
curl 'http://localhost:8888/home/_fatie.php?bk=5&zt=0' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Origin: http://localhost:8888' -H 'Upgrade-Insecure-Requests: 1' -H 'Content-Type: application/x-www-form-urlencoded' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: http://localhost:8888/home/fatie.php?bk=5' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: PHPSESSID=7690435026da386df8a80e63f3da2089' --data 'csrf_token=9191&bk=5&title=123%3Cscript%3Econsole.log%28232%29%3C%2Fscript%3E&content=123%3Cscript%3Econsole.log%28232%29%3C%2Fscript%3E' --compressed
После завершения замены скопируйте это содержимое в терминал для запуска:
Вернитесь на главную страницу, чтобы просмотреть соответствующий контент:
Полезная нагрузка выполняется дважды, и содержимое также подвергается атаке.
Анализ результатов
Это показывает, что мы успешно обошли интерфейсный XSS-фильтр и изменили контент напрямую, поэтому иногда необходимо внутреннее экранирование.
Суммировать
Майнинг уязвимостей — сложный процесс.Ручной майнинг — надежный метод, но ручной майнинг неэффективен и иногда зависит от удачи.В настоящее время появилось множество инструментов и платформ для автоматического обнаружения XSS-уязвимостей, что значительно повышает эффективность обнаружения уязвимостей. I Некоторые инструменты и способы защиты от XSS будут представлены в последующих главах.
Наконец, я сожалею, что продвигаю свою работу на основеTaro
Библиотека компонентов, написанная фреймворком:MP-ColorUI.
Я очень рад, что могу сыграть главную роль, спасибо.