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

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

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

 

 

 

 

Рис.6.7. Результаты быстрого поиска на сайте Hashtoolkit.com найденного хеша пароля со значением "summer17"

Построение выводов на основе анализа данных

Давайтерассмотримболеепростойсценарий–когдаприложениенеобрабаты- вает полезную нагрузку асинхронно. Это гораздо более распространенный вариант. Как правило, при использовании инъекции вслепую можно применять условные операторы во внедряемом запросе, чтобы сделать какой-либо вывод на основе анализа данных из базы данных. Если уязвимость в предыдущем примере не была асинхронной, мы могли бы ввести значительную задержку в ответе. Объедините это с традиционным условием if-then-else, и мы сможем сделать предположения касательно данных,которые пытаемся получить.

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

if password starts with 'a' delay(5 seconds)

 

 

 

 

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

else

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

return false

Построение выводов на основе анализа данных 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

153 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

if password starts with 'aa' delay(5 seconds)

else

return true

if password starts with 'ab' delay(5 seconds)

else

return false

[...]

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

Чтобы сгенерировать наблюдаемую задержку, в MS SQL можно попросить сервер повторно выполнить произвольную операцию, используя функцию BENCHMARK(). Если используем функцию с интенсивной вычислительной нагрузкойнацентральныйпроцессор,такуюкакMD5(),мывведемзначительную и измеримую задержку при возврате запроса.

Приведенную ниже функцию MS SQL можно использовать, чтобы вызвать задержку в ответе сервера.

BENCHMARK(5000000,MD5(CHAR(99)))

С помощью данной операции вычислим MD5-хеш символа "c" в нижнем регистре, обозначенного как CHAR(99), 5 млн раз. Возможно, нам придется поэкспериментировать­ с количеством итераций, если сервер действительно мощный или очень медленный.

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

В заключение объединим оператор IF и операцию, где используется функ-

ция BENCHMARK().

Также будем использоватьключевое слово UNION для объединения результатов существующего оператора SELECT с нашим собственным.

' UNION SELECT IF(SUBSTRING(password,1,1) = CHAR(97),BENCHMARK(5000000,MD5(CHAR(99))),null) FROM users WHERE role = 'admin';--

 

 

 

 

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 154  Глава 6.Обнаружение и эксплуатация уязвимостей в приложениях...

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

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

 

 

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

так:

SELECT * FROM users WHERE user = 'Dade' UNION SELECT

IF(SUBSTRING(password,1,1) = CHAR(97),BENCHMARK(5000000,MD5(CHAR(99))),null) FROM users WHERE role = 'admin';--'

Если ответ поступит со значительной задержкой, можно сделать вывод, что пароль администратора начинается со строчной буквы "a". Чтобы найти все значение, нужно перебрать сотни запросов, изменить параметры функции SUBSTRING(), а также пройтись по строке по мере открытия пароля.

Резюме

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

Ключевым моментом здесь является способность изменять поведение приложения так, чтобы злоумышленник мог оценить его. Даже некоторые более безопасные среды разработки приложений, которые активно фильтруют исходящий трафик, имеют тенденцию позволять проходить как минимум DNS- UDP-пакетам. Фильтрация исходящих DNS-запросов – сложное занятие, и я не завидую ни одной группе, занимающейся вопросами информационной безопасности, которой это поручено. Будучи хакерами, мы опять же можем в полной мере воспользоваться этими ограничениями и,как я показал в предыдущем примере, полностью скомпрометировать приложение, используя уязвимость, которую трудно обнаружить.

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