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

-xcha

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Аутентификация с помощью API 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

299 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.11.9. Пример запроса Postman к API

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

Вышестоящий прокси-сервер

Postman также поддерживает маршрутизацию запросов через системный прокси-сервер или пользовательский сервер. Использование Burp или OWASP ZAP в данном случае – мудрый выбор. Как только мы импортируем и запускаем коллекцию,каждый запрос будетперехватываться и будетготов к проверке

иповторному воспроизведению.

Вразделе File (Файл) и далее в Settings (Настройки) есть вкладка Proxy (Прокси-сервер), которая должна позволить нам указать локальный проксисервер Burp, 127.0.0.1 на порту 8080 по умолчанию (см. рис. 11.10).

Все наши последующие запросы в Postman будут также отображаться на

вкладке HTTP history прокси-сервера Burp (см. рис. 11.11).

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 300 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Глава 11.Атака на API

 

 

 

 

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

 

 

 

 

Рис.11.10. Конфигурация вышележащего прокси-сервера Postman

Рис.11.11. Burp показывает запросы,сгенерированные Postman

Среда выполнения

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

 

 

 

 

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

 

 

Аутентификация с помощью API  301 BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

новую среду выполнения, используем вкладку Create New в верхнем левом

 

g

 

 

 

 

 

 

 

 

 

g

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

углу.

Рис.11.12. Создание новой среды в Postman

Во всплывающем окне введите внятное имя и нажмите кнопку Add (Добавить),чтобы создать новую пустую среду выполнения.

Рис.11.13. Добавление новой среды выполнения в Postman

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

На рисунке показан простой GET-запрос, поставленный в очередь для запуска в среде ECorp API.

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 302 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Глава 11.Атака на API

 

 

 

 

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

 

 

 

 

Рис.11.14. Указание среды выполнения для запроса

Коллекции

Как уже было сказано, коллекция – это просто список API-запросов в определенной последовательности. Их можно экспортировать в JSON и импортировать в любой клиент Postman,что делает их действительно переносимыми.

Чтобы продемонстрировать всю мощь коллекций Postman, создадим коллекциюдляэкземпляранашегоуязвимогоAPI,api.ecorp.local,работающего на порту 8081.

Если посмотрим документацию по уязвимому API от Мэтта Вальдеса (Matt Valdes), то заметим, что для большинства взаимодействий требуется токен авторизации, передаваемый через пользовательский HTTP-заголовок X-Auth-Token. Хотя большинство RESTful API пытается использовать заголовок Authorization для токенов, пользовательские заголовки не так уж редки. Такие инструменты, как Burp и Postman, идеально подходят для тестирования безопасности, поскольку бóльшую часть работы можно автоматизировать,даже когда сталкиваемся с отклонениями от нормы.

Документацию можно найти в файле README.md на странице https://github.com/mattvaldes/vulnerable-api.

В документации говорится, что можно получить новый токен, если отправить POST-запрос в /tokens,тело которого содержит данные аутентификации в формате JSON. Учетные данные по умолчанию: user1 и pass1. Тело нашего запроса на аутентификацию должно выглядетьтак:

{

"auth": { "passwordCredentials": {

"username": "user1", "password": "pass1"

}

}

}

 

 

 

 

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

 

 

 

Аутентификация с помощью API  303 BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

API ответит другим объектом в формате JSON, содержащим токен, необхо-

 

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

димый для последующих запросов.

{

"access": { "token": {

"expires": "[Expiration Date]", "id": "[Token]"

}, "user": {

"id": 1, "name": "user1"

}

}

}

Затем можем передать значение id в конечнуюточку /user/1 через заголовок X-Auth-Token, и запрос должен быть выполнен успешно.

Рис.11.15. Успешный аутентифицированный запрос к уязвимому API

Теперь, когда у нас есть последовательность запросов, нам нужно создать коллекцию и частично автоматизировать это тестирование.

И снова с помощью кнопки Create New в левом верхнем углу выберите Col- lection (Коллекция):

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 304 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Глава 11.Атака на API

 

 

 

 

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

 

 

 

 

Рис.11.16. Создание новой коллекции

Во всплывающем окне можно ввести имя и описание, если необходимо, прежде­ чем нажать кнопку Create (Создать).

Рис.11.17. Создание новой коллекции

Все сделанные нами запросы записываются на вкладке История в рабочей области.

Мы можем выделить те, которые нам нужны для коллекции, и нажать кнопку Save (Сохранить) рядом с кнопкой Send (Отправить) в правом верхнем углу.

 

 

 

 

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

 

 

 

 

Аутентификация с помощью API 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

305 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.11.18. Сохранение запросов в коллекцию

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

Рис.11.19. Выбор нужной коллекции

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

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 306 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Глава 11.Атака на API

 

 

 

 

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

 

 

 

 

Рис.11.20. Аутентифицированный запрос Postman

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

Для этого нам нужно использовать функцию Postman под названием Tests (Тесты).Каждыйзапроснастроимнавыполнениетестовивыполнениекакогото действия. Как правило, они могут использоваться для того, чтобы проверить,быллизапрос.Разработчикимогутиспользоватьтесты,чтобыубедиться, что код, который они только что добавили, ничего не испортил.

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

Для нашего запроса Get Auth Token в коллекции ECorpAPIтестдолжен проверить ответ, проанализировать его как JSON и извлечь идентификатор токена. Чтобы передать его другому запросу, можно использовать среду ECorp API и сохранить данные в переменной,которую мы называем auth_token.

Код для достижения этой цели довольно прост, хотя и выглядит немного странно, если вы не знакомы с JavaScript. Каждая запись pm.test является отдельным тестом, который должен быть выполнен в указанном порядке. Если какой-либо из тестов не будет пройден, мы увидим предупреждение.

pm.test("Status code is 200", function () { pm.response.to.have.status(200);

});

pm.test("Save Auth Token", function () { var data = pm.response.json();

pm.environment.set("auth_token", data['access']['token']['id']); });

Первый тест просто проверяет наличие ответа 200 отAPI.Все остальное вызовет ошибку во время запуска коллекции.

Второй тест выполнит парсинг текста ответа с помощью метода json() и сохранитего влокальной переменной data.Если вы помните иерархию ответа

 

 

 

 

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

 

 

Аутентификация с помощью API  307 BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

/tokens, нам нужно получить доступ к значению id в поле access.token, ис-

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

пользуя нотацию массива JavaScript: data['access']['token']['id'].

Используя функцию pm.environment.set, сохраняем значение id в переменной среды auth_token,делая его доступным для других запросов.

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

Рис.11.21. Изучение среды Postman

Наш второй запрос к /user/1 требует, чтобы мы передали это значение через заголовок X-Auth-Token. Добавляем новый пользовательский заголовок и для этого значения извлекаем список существующих переменных, набирая {{ в поле Value (Значение). Postman автоматически заполнит имеющиеся переменные за нас.

Рис.11.22. Использование переменных среды в запросах