- •Отзывы и пожелания
- •Список опечаток
- •Нарушение авторских прав
- •Предисловие
- •Кому адресована эта книга
- •О чем идет речь в книге
- •Как извлечь максимум из книги?
- •Загрузка примеров
- •Загрузка цветных изображений
- •Условные обозначения
- •Атаки на веб-приложения. Введение
- •Правила применения оружия
- •Вопросы конфиденциальности данных
- •Очистка
- •Инструментарий тестировщика
- •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 |
|
|
|
|
10
|
|
|
|
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 |
|
|
|
|
Практические атаки на стороне сервера
В предыдущей главе мы провели серию практических атак, направленных на пользователей, используя уязвимости в приложениях для достижения нашей цели. В этой главе основное внимание будет уделено атакам на стороне сервера, прежде всего посредством эксплуатации XML-уязвимостей. Несмотря на то что формат JSON завоевал значительную долю в обмене данными в вебприложениях, формат XML по-прежнему довольно распространен. Он не такой прозрачный, как JSON, и его, может быть, немного сложнее читать, но он зрелый.СуществуетогромноемножествобиблиотекдляпарсингаXML-файлов для любого языка, который разработчик может выбрать для завершения проекта. Язык Java по-прежнему популярен в корпоративном мире, и феномен Android породил еще больше энтузиастов Java. Microsoft по-прежнему очень любит XML, и вы будете встречать его повсюду: в Windows, в манифестах приложений и в файлах конфигурации сайтов, использующих IIS.
Целью данной главы является знакомcтво с XML-атаками, и к ее концу вы будете знать,что такое:
условия осуществления DoS-атак;
подделки запросов на стороне сервера (SSRF);
утечка информации;«слепая» эксплуатация и внеполосная эксфильтрация данных;
удаленное выполнение кода.
Вы, несомненно, сталкивались с XML-файлами, и на первый взгляд они похожи на HTML-файлы. В них есть заголовок, который описывает документ, и обычно он выглядиттак:
<?xml version="1.0" encoding="UTF-8"?>
Далее следуют произвольные теги, которые описывают данные, содержащиеся в документе. В то время как HTML инструктирует клиента, например браузер,относительнотого,какотображатьданные,форматXMLиспользуется
|
|
|
|
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 |
|
|
Внутренние и внешние ссылки 251 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 |
|
|
|
|
|
определяются или описываются строительными блоками под названием «элементы». Пример XML-документа выглядиттак:
<?xml version="1.0" encoding="UTF-8"?> <user>
<name>Dade Murphy</name> <id>1</id> <email>admin@localhost</email>
</user>
Элемент <user> указывает тип записи, и у него есть закрывающий тег </user>, совсем как в HTML. Он также является корневым элементом. В этой записи у нас есть теги <name>, <id> и <email> с соответствующими значения ми. Важно отметить, что любое приложение, которое выполняет синтаксичес кий анализ этих данных, должно знать, что делать с содержимым. Современные веб-браузеры знают, что делать с HTML-тегами <div> и <a>, потому что все они следуют определенному стандарту. Приложения, обменивающиеся данными в формате XML,должны решить,что это заданные и как они обрабатываются или отображаются. Структура XML может быть допустимой с точки зрениясинтаксиса(тоестьвсетегиправильнозакрыты,естькорневойэлемент и присутствует заголовок документа), но в нем могут отсутствовать ожидаемыеэлементы,иприложениямогутаварийнозавершитьработуилипотратить ресурсы, пытаясь проанализировать эти данные.
Внутренние и внешние ссылки
Определение типа документа (DTD) используется для правильного построения конкретного документа. На DTD ссылаются в документах XML с помощью элемента объявлениятипадокумента DOCTYPE.DTD можно полностью записывать внутри XML-документа,или на них можно ссылаться извне,чтобы парсер мог их загрузить и обработать.
Внутренние DTD можно найти в верхней части XML-документа в теге
DOCTYPE.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user [ <!ELEMENT user ANY>
<!ENTITY company "Ellingson Mineral Company">
]>
<user>
<name>Dade Murphy</name> <id>1</id>
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
NOW! |
o |
|
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 252 Глава 10.Практические атаки на стороне сервера |
|||||||||
|
|
|
|
|
|
m |
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
<email type="local">admin@localhost</email> |
||
|
|
|
|
|
|
|
|
||||
|
|
|
|
-xcha |
|
|
|
|
|
<company>&company;</company> </user>
|
|
|
|
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 |
|
|
|
|
ПредыдущеевнутреннееDTDопределяеткорневойэлементuser ивнутреннюю сущность, company, которая определена для хранения строкового значе-
ния "Ellingson Mineral Company".
В самом документе на сущность company можно ссылаться, обрамляя его знаком амперсанда с левой стороны и точкой с запятой – справа. Вы с этим знакомы, если у вас есть опыт работы с HTML. Когда парсер дойдет до строки &company;, он вставит значение, заданное в предыдущем определении типа документа.
Как говорилось ранее, также возможно указать XML-парсеру нашего документа на внешний DTD-файл. Парсер просто пойдет и извлечет этот файл перед обработкой остальной части документа. На внешние DTD ссылаются в DOCTYPE, поставив перед ними ключевое слово SYSTEM.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "user.dtd">
<user>
<name>Dade Murphy</name> <id>1</id>
<email type="local">admin@localhost</email> <company>&company;</company>
</user>
Файл user.dtd будет содержать наши определения сущностей и элементов.
<!DOCTYPE user [ <!ELEMENT user ANY>
<!ENTITY company "Ellingson Mineral Company">
]>
Сущностьcompany будетподставленавдокумент,какираньше,послеуспешной загрузки и анализа DTD.
Как и наше внешнее определение DTD, мы можем ссылаться и на внешние сущности.
Синтаксис похож на тот, что используется при ссылке на внешние DTD: он вызываетключевоеслово SYSTEM иунифицированныйидентификаторресурса.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user [ <!ELEMENT user ANY>
<!ENTITY company SYSTEM "http://config.ecorp.local/company.xml">