- •Отзывы и пожелания
- •Список опечаток
- •Нарушение авторских прав
- •Предисловие
- •Кому адресована эта книга
- •О чем идет речь в книге
- •Как извлечь максимум из книги?
- •Загрузка примеров
- •Загрузка цветных изображений
- •Условные обозначения
- •Атаки на веб-приложения. Введение
- •Правила применения оружия
- •Вопросы конфиденциальности данных
- •Очистка
- •Инструментарий тестировщика
- •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 |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
9
|
|
|
|
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 в браузере гораздо менее привлекательно, чем выполнениенативногокодаиустановкаоболочкинасамомсервереприложений. Какой смысл в том, чтобы выполнять сильно ограниченный в возможностях JavaScript-код в коротком сеансе просмотра? Какой урон может нанести зло умышленник,используя такой тип уязвимости? Как оказалось,довольно серь езный.
В этой главе мы рассмотрим атаки на стороне клиента с упором на межсайтовый скриптинг. Рассмотрим и такой тип атак, как «межсайтовая подделка запроса» (CSRF),обсудим последствия правила ограничения домена (SOP).Далее рассмотрим способы использования уязвимостейдля XSS-атак с помощью фреймворка BeEF.
К концу главы вы будете знать, как осуществлять:
хранимые, отраженные XSS-атаки и атаки на базе DOM;
межсайтовую подделку запроса и возможные атаки и ограничения;
BeEF, инструмент де-факто для эксплуатации узявимостей на стороне клиента в браузере.
Мы потратим немало времени на изучение фреймворка BeEF, поскольку он делает XSS-атаки жизнеспособными. Он позволяет с легкостью осуществлять атаки с использованием методов социальной инженериидля выполнения вредоносного нативного кода, реализации кейлоггера, сохранения нашего доступа и даже туннелирования трафика через браузер жертвы.
Правила ограничения домена
Рассмотрим сценарий, когда жертва выполняет вход в свою учетную запись Gmail (mail.google.com) на одной из открытых вкладок браузера. На другой
|
|
|
|
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 |
|
|
Правила ограничения домена 209 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 |
|
|
|
|
|
злоумышленника, которому нужен доступ к данным Gmail. Возможно, жертву заставили посетить этот конкретный сайт с помощью методов социальной инженерии или же перенаправили туда с помощью вредоносной рекламной кампании на известном новостном сайте.
Код злоумышленника может попытаться открыть соединение с доменом mail.google.com,и,посколькужертваужепрошлапроверкуаутентификациина другой вкладке браузера, код должен иметь возможность читать и отправлять электронные письма,также подделывая запросы в Gmail.JavaScript предоставляет все инструменты, необходимые для всего этого,так в чем же дело?
Ответ,как мы вскоре рассмотрим подробно,кроется в правиле ограничения домена.Онопредотвращаеттакуюатаку,иеслизлоумышленникнеможетвнедрить свой код непосредственно на mail.google.com, он не сможет прочитать там какую-либо конфиденциальную информацию.
Правило ограничения домена появилось еще во времена Netscape, потому что без него вероятность злоупотреблений была очень реальной. Проще говоря,это ограничиваетдоступ сайтов к информации сдругих сайтов,еслитолько источник запроса не совпадает с адресатом назначения.
Существуетпростой алгоритм,чтобы определить,былоли нарушено правило ограничениядомена.Браузер сравниваетсхему,домен и портисходного сайта с целевым сайтом,и если какой-либо элемент не совпадает,доступ будет закрыт.
В предыдущем примере URL-адрес сайта, выбранного в качестве объекта атаки,выгляделбытак:https://mail.google.com/mail/u/0/#inbox,чтомож-
но записать следующим образом.
( [schema], [domain], [port] ) -> ( https, mail.google.com, 443 )
Код злоумышленника на сайте https://www.cnn.com/ будетлишен доступа к чтению, поскольку нет совпадения с доменом:
(https, www.cnn.com, 443 ) != ( https, mail.google.com, 443 )
Даже вредоносный код на сайте https://www.google.com/ не сможет получить доступ к Gmail, поскольку нет совпадения с доменом, хотя они могут находиться на одном физическом сервере.
Источник |
Цель |
Результат |
|
|
|
https://mail.google. |
https://mail.google.com/ |
Разрешено,подразумевается |
com/mail/u/0/#inbox |
mail/u/0/#inbox |
порт 443 |
https://mail.google. |
https://mail.google.com/ |
Отклонено,несоответствие |
com/mail/u/0/#inbox |
mail/u/0/#inbox |
схемы |
https://mail.google. |
https://mail.google.com/ |
Отклонено,несоответствие |
com:8443/u/0/#inbox |
mail/u/0/#inbox |
порта |
h t t p s : / / d e v . m a i l . |
https://mail.google.com/ |
Отклонено,несоответствие |
google.com/u/0/#inbox |
u/0/#inbox |
домена |
|
|
|
|
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 |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
Глава 9.Практические атаки на стороне клиента |
|
|
|
|
|
BUY |
|
|
|||||||||
w Click |
to |
BUY 210 |
w Click |
to |
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
|
m |
||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
|
. |
|
|
|
|
g |
.c |
|
|||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
e |
Это имеет смысл с точки зрения обороны. Сценарий, который мы обрисо- |
|
|
|
e |
|
|||||||||||
|
|
|
df |
|
|
n |
|
|
|
|
|
|
|
|
|
df |
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
||||
|
|
|
|
|
вали ранее, стал бы настоящим кошмаром, если бы не правило ограничения |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
домена. Однако если внимательно посмотрим на веб-приложения в интерне- |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
те, то заметим, что почти все они содержат контент, такой как изображения, |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
таблицы стилей и даже код JavaScript. |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
Совместноеиспользованиересурсовизразныхисточниковилисайтовимеет |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
свои преимущества для приложения. Статический контент можно выгружать |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
в сети доставки содержимого,которые обычно размещаются в других доменах |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
(например, fbcdn.net в Facebook), что обеспечивает бóльшую гибкость, ско- |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
рость и в конечном итоге экономит затраты на обслуживание пользователей. |
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
Правило ограничения домена дает доступ к определенным типам ресур- |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
сов из разных источников, чтобы обеспечить нормальное функционирование |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
сети. В конце концов, когда основное внимание уделяется взаимодействию с |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
пользователем, политику безопасности, которая делает приложение непри- |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
годным для использования, уже вряд ли можно считать таковой, независимо |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
оттого, насколько она безопасна на самом деле. |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
Правило ограничения домена позволит встраивать следующие объекты из |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
разных источников в источник с любого другого сайта: |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
изображения; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
таблицы стилей; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
сценарии (которые браузер с удовольствием выполнит!); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
встроенные фреймы (iframe). |
|
|
|
|
|
|
|
|
|
|
|
|
Мы можем включить изображения из нашей сети доставки содержимого, и браузер скачает байты изображения и отобразит их на экране. Однако нельзя читать байты программным путем, используя JavaScript. То же самое относится и к другому статическому контенту, который разрешен правилом ограничения домена. Можно, например, включить таблицу стилей и код JavaScript, но нельзя прочитать фактическое содержимоетаблицы,если нетсовпадения с источником.
Данное утверждение справедливо и для элементов iframe. Можно создать новый объект iframe и указать ему произвольный URL-адрес, и браузер с удовольствиемзагрузитсодержимое.Однакоунаснетвозможностипрочитатьсодержимое в случае нарушения правила ограничения домена.
Вприведенномнижепримере(рис.9.1)создаемэлемент iframe внутривебприложения https://bittherapy.net, имитирующий действия, которые могли бы бытьвыполнены в ходе XSS-атаки или вредоносным сценарием,если бы ему было разрешено запускаться в контексте bittherapy.net.
Сначала создаем новый элемент iframe с помощью функции document. createElement() и сохраняем его в переменной frame. Затем устанавливаем URL-адрес: https://bittherapy.net, используя свойство src. Наконец, добавляем вновь созданный объект iframe в документ с помощью функции
document.body.append().
|
|
|
|
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 |
|
||
|
|
|
|
-xcha |
|
|
|
|
Правила ограничения домена
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
||||
|
|
X |
|
|
|
|
||||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
211 BUY |
|
|
||||||||
|
|
|
|
|
||||||
w Click |
to |
|
|
|
|
m |
||||
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
d |
f |
|
n |
e |
|
||
|
|
|
|
|
-x cha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис.9.1. Создание элемента iframe с помощью консоли браузера
Видно,чтоисточник(frame.src)вточностисоответствуетвышеупомянутой тройке (схема,домен и порт), и когда мы пытаемся прочитать содержимое заголовка элемента iframe с помощью frame.contentDocument, у нас это получается. Правило ограничения домена не было нарушено.
Инаоборот,создание iframe дляhttps://bing.com/ вприложенииhttps:// bittherapy.net будет успешным,объект будет создан,но мы не сможем получить доступ к его содержимому.
Рис.9.2. Создание фрейма и попытка получить доступ к его содержимому не удались
Поисковое приложение Bing загружено просто отлично,как видим в правой части рисунка, но программным путем мы не можем прочитать содержимое, потому что это нарушает правило ограничения домена.
JavaScriptтакжедоступен из разных источников,и,как правило,это хорошо. Выгрузка ваших библиотек JavaScript в сеть доставки содержимого может сократить время загрузки и коэффициент использования полосы частот.