- •Отзывы и пожелания
- •Список опечаток
- •Нарушение авторских прав
- •Предисловие
- •Кому адресована эта книга
- •О чем идет речь в книге
- •Как извлечь максимум из книги?
- •Загрузка примеров
- •Загрузка цветных изображений
- •Условные обозначения
- •Атаки на веб-приложения. Введение
- •Правила применения оружия
- •Вопросы конфиденциальности данных
- •Очистка
- •Инструментарий тестировщика
- •Kali Linux
- •Альтернативы Kali Linux
- •Прокси-сервер
- •Burp Suite
- •Zed Attack Proxy
- •Облачная инфраструктура
- •Дополнительные источники
- •Упражнения
- •Резюме
- •Глава 2
- •Эффективное обнаружение
- •Типы тестирования
- •Построение карты сети
- •Masscan
- •hatWeb
- •Nikto
- •CMS-сканеры
- •Эффективная атака методом полного перебора
- •Средства сканирования
- •Постоянное картирование контента
- •Обработка полезной нагрузки
- •«Полиглот»
- •Запутывание (обфускация) кода
- •Дополнительные источники
- •Упражнения
- •Резюме
- •Глава 3
- •Легкая добыча
- •Анализ сети
- •Ищем вход
- •Определение учетных данных
- •Есть способ получше
- •Очистка
- •Дополнительные ресурсы
- •Резюме
- •Глава 4
- •Продвинутые способы атаки с использованием метода полного перебора
- •Распыление подбора пароля
- •Спросим LinkedIn
- •Метаданные
- •Кассетная бомба
- •За семью прокси-серверами
- •ProxyCannon
- •Резюме
- •Глава 5
- •Внедрение файлов
- •Удаленное внедрение файлов
- •Локальное внедрение файлов
- •Внедрение файла для удаленного выполнения кода
- •Резюме
- •Обнаружение и эксплуатация уязвимостей в приложениях с помощью внешних сервисов
- •Распространенный сценарий
- •Командно-контрольный сервер
- •Центр сертификации Let’s Encrypt
- •INetSim
- •Подтверждение
- •Асинхронное извлечение данных
- •Построение выводов на основе анализа данных
- •Резюме
- •Расширение функциональных возможностей Burp Suite
- •Нелегальная аутентификация и злоупотребление учетными записями
- •Швейцарский нож
- •Запутывание кода
- •Collaborator
- •Открытый сервер
- •Выделенный сервер Collaborator
- •Резюме
- •Глава 8
- •Вредоносная сериализация
- •Использование десериализации
- •Атака на пользовательские протоколы
- •Анализ протокола
- •Эксплойт для осуществления атаки
- •Резюме
- •Практические атаки на стороне клиента
- •Правила ограничения домена
- •Совместное использование ресурсов разными источниками
- •Межсайтовый скриптинг
- •Постоянный XSS
- •DOM-модели
- •Межсайтовая подделка запроса
- •BeEF
- •Перехват
- •Атаки с применением методов социальной инженерии
- •Кейлоггер
- •Закрепление в системе
- •Автоматическая эксплуатация
- •Туннелирование трафика
- •Резюме
- •Практические атаки на стороне сервера
- •Внутренние и внешние ссылки
- •Атаки XXE
- •Атака billion laughs
- •Подделка запроса
- •Сканер портов
- •Утечка информации
- •«Слепой» XXE
- •Удаленное выполнение кода
- •Резюме
- •Глава 11
- •Атака на API
- •Протоколы передачи данных
- •SOAP
- •REST
- •Аутентификация с помощью API
- •Базовая аутентификация
- •Ключи API
- •Токены на предъявителя
- •Postman
- •Установка
- •Вышестоящий прокси-сервер
- •Среда выполнения
- •Коллекции
- •Запуск коллекции
- •Факторы атаки
- •Резюме
- •Глава 12
- •Атака на CMS
- •Оценка приложения
- •WPScan
- •sqlmap
- •Droopescan
- •Arachni
- •Взлом кода с помощью бэкдора
- •Закрепление в системе
- •Утечка учетных данных
- •Резюме
- •Глава 13
- •Взлом контейнеров
- •Сценарий уязвимости в Docker
- •Осведомленность о ситуации
- •Взлом контейнера
- •Резюме
|
|
|
|
hang |
e |
|
|
|
|
||
|
|
|
C |
|
E |
|
|
||||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
df |
-xcha |
n |
e |
|
||||
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
||||
«Полиглот» 59 BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
to |
|
|
|
|
m |
|||
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Рис.2.28. Вкладка Results
Intruder сгенерирует список полезных нагрузок на основе указанного нами форматадаты и вычислитхеш строки перед отправкой его в приложение всего за несколько кликов.Вскоре мы обнаружим по крайней меретри неправильно защищенных, потенциально конфиденциальных документа, которые доступны анонимно.
«Полиглот»
«Полиглот» – это фрагмент кода, который может выполняться в приложении в нескольких контекстах. Данные типы вирусов популярны среди злоумышленников, потому что они быстро проверяют элементы управления вводом приложения на предмет наличия слабых мест с минимальным уровнем шума.
В сложном приложении пользовательский ввод может проходить через множество контрольных точек – от URL-адреса через фильтр до базы данных и обратно в декодер, прежде чем его увидит пользователь, как показано на рисунке.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
|
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
||||||
P |
|
|
|
|
NOW! |
o |
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 60 Глава 2.Эффективное обнаружение |
|
|
||||||||||||
|
|
|
|
|
|
m |
|
|
||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
|
|
|
|
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пользователь |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Фильтр входных данных |
Приложение |
|
Кодирование |
|
|
|
|
|
|
|
|
|
|
|
|
|
брандмауэра веб-приложения |
|
|
данных |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
База данных |
|||
|
Серверный API |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Рис.2.29. Типичный поток данных от пользователя к приложению
Любойшагнаэтомпутиспособенизменитьилизаблокироватьвирус,чтозатруднитподтверждение наличия уязвимости в приложении.«Полиглот» пытается эксплуатировать уязвимость внедрения, комбинируя несколько методов для выполнения кода в одном потоке.Он пытается использовать слабые места вфильтрациивредоносов,увеличиваявероятностьтого,чтохотябычастькода будет пропущена и успешно выполнится. Это возможно благодаря тому, что JavaScript – очень снисходительный язык. Браузеры всегда были легким препятствием для разработчиков, и JavaScript основан на схожей философии.
XSS Filter Evasion Cheat Sheet от сообщества OWASP содержит примеры «по-
лиглотов», которые также могут обходить некоторые фильтры приложений: https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet.
Неплохой пример сильного полиглота можно найти на GitHub. Его автор – Ахмед Элсобки (Ahmed Elsobky).
jaVasCript:/*-/*'/*\'/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/-- !>\x3csVg/<sVg/oNloAd=alert()//>\x3e
На первый взгляд выглядитдовольно неряшливо,но у каждого символа есть своя цель.Данный вирус был создан для выполнения JavaScript-кода в различных контекстах,независимо оттого,отражается ли код в HTML-теге или непосредственно в серединедругого фрагмента JavaScript-кода.HTML-и JavaScriptпарсеры браузера очень удобны. Они нечувствительны к регистру, дружески настроены по отношению ошибкам, и им не важны отступы, окончания строк или интервалы.Экранированные или закодированные символы иногдапреобразуются обратно в первоначальный вид и вводятся на страницу. В частности, JavaScriptделаетвсе возможное,чтобы выполнитьлюбой переданный ему код. Хороший «полиглот» воспользуется всем этим и постарается избежать фильт рации.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
C |
E |
|
|
|
|||||||
|
|
X |
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
o |
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
BUY |
|
|
«Полиглот» 61 BUY |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
w Click |
to |
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
Первое, что бросается в глаза, – это то, что в большинстве ключевых слов, |
|
|
e |
|
|||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
таких как textarea, javascript и onload, встречаются прописные буквы.
jaVasCript:/*-/*'/*\'/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/-- !>\x3csVg/<sVg/oNloAd=alert()//>\x3e
Похоже на тщетную попытку обойти фильтры входных данных брандмау эра, но вы будете удивлены, узнав, насколько плохо они спроектированы. Рассмотрим приведенный ниже фильтр регулярных выражений:
s/onclick=[a-z]+\(.+\)//g
Регулярное выражение – это фрагмент текста, определяющий шаблон поиска. Некоторые сетевые экраны могут использовать регулярные выражения для поиска потенциально опасных строк внутри HTTP-запросов.
Он эффективно предотвращает внедрение JavaScript-кода через событие onclick, но с одним явным недостатком – не учитывает чувствительность к регистру. Регулярные выражения обладают значительным количеством модификаторов,таких как g в предыдущем примере, и по умолчанию большинству движков требуется, чтобы модификатор i игнорировал регистр, иначе они не будут совпадать, а фильтр уязвим для обхода.
На рисунке показана страница сайта Regex10 с регулярным выражением из предыдущего примера. Видно, что только две из четырех протестированных полезных нагрузок соответствуют выражению,тогда как все четыре выполни-
ли бы JavaScript-код.
Рис.2.30. Визуализация Regex101
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
||
P |
|
|
|
|
NOW! |
o |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 62 Глава 2.Эффективное обнаружение |
|||||||||||||
|
|
|
|
|
|
m |
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
|
|
|
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
При проверке фильтра входных данных на основе регулярных |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
выражений Regex101–отличное место,чтобы протестироватьего |
|||
|
|
|
|
|
|
|
|
|
|
|
|
сразу с несколькими полезными нагрузками: https://regex101. |
|||
|
|
|
|
|
|
|
|
|
|
|
|
com. |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
Разработчикам неоднократно приходится работать в условиях нереальных сроков.Когда в отчете отестировании на проникновение освещается конкретная проблема очистки входных данных, разработчики вынуждены использоватьисправление безопасности,которое было написано быстро,недостаточно протестировано и устраняеттолько частьпроблемы.Часто реализация фреймворка для обработки фильтрации входных данных – вещь слишком долгая и дорогая, и выбирается короткий путь в ущерб безопасности.
«Полиглот» отАхмеда Элсобкитакже направлен на эксплуатацию уязвимос тей, передаваясь через механизм, обрабатывающий шестнадцатеричные значения,экранированные обратной косой чертой.Например,JavaScript и Python будут обрабатывать два алфавитно-цифровых символа, которым предшествует \x как один байт. «Полиглот» может обойти определенные встроенные XSSфильтры, выполняющие проверки сравнения простых строк.
jaVasCript:/*-/*'/*\'/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/-- !>\x3csVg/<sVg/oNloAd=alert()//>\x3e
Полезная нагрузка может быть удалена из большинства других ключевых слов, но когда фильтр дойдет до \x3c и \x3e, он интерпретирует их как безопасные строки, состоящие из четырех символов. Приложение может провести синтаксический анализ строки и непреднамеренно вернуть однобайтовый эквивалент экранированных шестнадцатеричных символов < и > соот- ветственно.ВрезультатеполучаетсяHTML-элемент<svg>,которыйвыполняет произвольный JavaScript-код через событие onload.
SVG(отангл.ScalableVectorGraphics–масштабируемаявекторная графика)–это элемент на странице,который можно использовать для рисования сложной графики на экране без двоичных данных. SVG используется в XSS-атаках главным образом потому, что он предоставляет свойство onload, которое будет выполнять произвольный JavaScript-код,когда элемент отображается браузером.
Еще больше примеров, демонстрирующих мощь этого «полиглота»,можно найти на странице Ахмеда Элсобки в GitHub: https:// github.com/0xSobky.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
C |
E |
|
|
|
|||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
t |
|
|||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
|
o |
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
BUY |
|
|
|
«Полиглот» 63 BUY |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
w Click |
to |
|
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
|||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
e |
«Полиглот» способен выполнять код в различных сценариях внедрения, а |
|
|
e |
|
|||||||||||
|
|
|
df |
|
|
n |
|
|
|
|
|
|
|
|
df |
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
также может быть полезен при отражении в HTTP-ответе сервера.
jaVasCript:/*-/*'/*\'/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/-- !>\x3csVg/<sVg/oNloAd=alert()//>\x3e
Закодированные в URL символы %0d и %0a – это перевод строки и возврат каретки. Данные символы в основном игнорируются HTML- и JavaScriptпарсерами, но имеют значение в заголовке HTTP-запроса или ответа.
Если целевое приложение не может должным образом отфильтровывать ввод данных пользователем, в некоторых случаях оно способно принять произвольное значение и добавить его как часть HTTP-ответа. Например, при попытке установить куки Remember me приложение отображает полезную нагрузку, не отфильтрованную в заголовках HTTP-ответа, что приводит к появлению межсайтового скриптинга в браузере пользователя.
GET /save.php?remember=username HTTP/1.1 Host: www.cb2.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 [...]
HTTP/1.1 200 OK Cache-Control: private
Content-Type: text/html; charset=utf-8 Server: nginx/1.8.1
Set-Cookie: remember_me=username Connection: close
Username saved!
Если мы передадим «полиглот» в качестве имени пользователя, которое нужно запомнить,заголовки HTTP-ответа будут изменены и тело будет содержать данные, контролируемые злоумышленником.
GET /save.php?remember=jaVasCript%3A%2F*-
%2F*%60%2F*%60%2F*'%2F*%22%2F**%2F(%2F*%20*%2FoNcliCk%3Dalert()%20)%2
F%2F%0D%0A%0d%0a%2F%2F%3C%2FstYle%2F%3C%2FtitLe%2F%3C%2FteXtarEa%2F%3 C%2FscRipt%2F--!%3E%3CsVg%2F%3CsVg%2FoNloAd%3Dalert()%2F%2F%3E%3E
HTTP/1.1
Host: www.cb2.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
|
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 64 Глава 2.Эффективное обнаружение |
|||||||||
|
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
Вот ответ сервера. |
||
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
HTTP/1.1 200 OK Cache-Control: private
Content-Type: text/html; charset=utf-8 Server: nginx/1.8.1
Set-Cookie: remember_me=jaVasCript:/*-/*'/*\'/*'/*"/**/(/* */oNcliCk=alert() )//
//</stYle/</titLe/</teXtarEa/</scRipt/-- !>\x3csVg/<sVg/oNloAd=alert()//>\x3e
Connection: close Username saved!
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Ответ немного искажен, но у нас есть выполнение кода. Закодированные в URL символы возврата каретки %0D%0A%0d%0a интерпретируются как частьответа HTTP. В HTTP-протоколе два набора символов возврата каретки и перевода строки указывают на конец заголовка, и все, что следует дальше, будет отображаться браузером как часть страницы.
Тот же вирус,но другой контекст
Существует множество других контекстов, в которых «полиглот» может успешно выполнить код.
Если «полиглот» содержится в свойстве value в поле,где вводится имя пользователя,интерпретация кода браузером явно показываетнеработающее поле ввода и вредоносный элемент <svg>. HTML-код перед обработкой полезной нагрузки выглядиттак:
<input type = "text" name = "username" value = "[payload]">
На рисунке показано, что браузер просматривает HTML-код после обработки полезной нагрузки.
Рис.2.31. HTML-код отраженного XSS
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
C |
E |
|
|
|
|||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
t |
|
|||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
|
o |
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
BUY |
|
|
|
«Полиглот» 65 BUY |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
w Click |
to |
|
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
|||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
e |
«Полиглот» также выполнит код, если он содержится в комментарии HTML- |
|
|
e |
|
|||||||||||
|
|
|
df |
|
|
n |
|
|
|
|
|
|
|
|
df |
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
кода, например:
<!-- Comment! [payload] -->
Полезная нагрузка содержит индикатор конца комментария -->, который оставляетостальнойтекстдля интерпретации браузером в качестве HTML-кода. И снова свойство onload элемента <svg> выполнит наш произвольный код.
На рисунке показано, что браузер просматривает HTML-код после обработки полезной нагрузки.
Рис.2.32. HTML-код отраженного XSS
«Полиглот» также полезен, если он содержится в коде, устанавливающем объект регулярного выражения, например var expression = /[payload]/gi.
Можно проверить это поведение в консоли браузера с помощью предыдущего примера кода.
Рис.2.33. Визуализация «полиглота»
Видно, что стратегически размещенные индикаторы комментариев, такие как /*, */ и //, вынудят браузер игнорировать большую часть полезной нагрузки,что приводит к правильному JS-коду.
Код выполняется здесь.
(/* */oNcliCk=alert()
)
Многострочные комментарии игнорируются, и будет выполняться любой код,содержащийсявкруглыхскобках.ВданномконтекстеoNcliCk неявляется