Описание параметров фазы Detect

Обнаружение уязвимости фазой Detect

Чтобы фаза Detect обнаружила в ответе сервера факт наличия уязвимости, необходимо, чтобы в ответе был найден один из описанных в параметре response элементов ответа, либо было обнаружено срабатывание одного из описанных в параметре oob Out-of-Band DNS-маркера (подробнее об out-of-band маркерах см. ниже). Иначе будет считаться, что уязвимости не найдено.

Принцип действия маркеров

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

OOB

Параметр oob проверяет срабатывания Out-Of-Band-маркеров на тестовый запрос.

Структура параметра `oob`

Обнаружение OOB-маркера в ответе сервера

Если в ответе сервера на запрос будет найден OOB-маркер, то будет считаться, что обнаружена уязвимость в целевом приложении.

  • Если указать только oob, то ожидается срабатывание хотя бы одного Out-of-Band-маркера:

      - oob
    
  • Также можно задать конкретный тип Out-of-Band-маркера, срабатывание которого необходимо проверять.

    Должен сработать хотя бы один DNS_MARKER:

      - oob:
        - dns
    

Доступные OOB-маркеры

В настоящий момент доступен только один Out-of-Band-маркер: DNS_MARKER.

Механизм действия атаки Out-of-Band

Механизм действия атаки Out-of-Band (resource load) полностью соответствует её названию: при проведении атаки злоумышленник вынуждает сервер загрузить вредоносный контент из внешнего источника.

Например, при выполнении атаки OOB DNS злоумышленник может встроить доменное имя в тег <img> следующим образом: <img src=http://vulnerable.example.com>.

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

Response

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

Структура параметра `response`

  • В ответе должен содержаться любой маркер:

      - response
    

Проверка HTTP-статусов

Структура параметра `HTTP Status`

  • В ответе должен содержаться конкретный HTTP-статус:

    - response:
      - status: value
    

    Пример.

    - status: 500 — статус должен иметь значение 500;

    - status: '5\d\d' — под это регулярное выражение попадают все 5хх статусы.

  • В ответе должен содержаться любой из перечисленных в списке HTTP-статусов:

    - response:
      - status:
        - value 1
        - …
        - value S
    

    Пример.

    HTTP-статус должен иметь одно из следующих значений: 500, 404, любой из статусов 2хх.

        - response:
          - status:
            - '500'
            - '404'
            - '2\d\d'
    

Проверка HTTP-заголовков

Структура параметра `headers`

  • В заголовках ответа должен содержаться любой маркер:

    - response:
      - headers
    
  • В заголовках ответа должны содержаться конкретные данные (value может быть регулярным выражением):

    - response:
      - headers: value
    

    Пример.
    • Хотя бы один HTTP-заголовок должен содержать строку qwerty:
            - response:
              - headers: "qwerty"
    
    • Под это регулярное выражение попадает любой HTTP-заголовок, который имеет число в качестве данных:
            - response:
              - headers: '\d+'
    

  • В конкретных заголовках ответа должны содержаться конкретные данные (header_# и header_#_value могут быть регулярными выражениями):

    - response:
      - headers:
        - header_1: header_1_value
        - …
        - header_N: header_N_value
    

    Пример.

    Cookie-заголовок должен содержать данные uid=123. Все заголовки, начинающиеся с X-, не должны содержать данных.

        - response:
          - headers: 
            - "Cookie": "uid=123"
            - 'X-': ""
    

  • В конкретных заголовках ответа должны содержаться данные из заданного списка (header_# и header_#_value_# могут быть регулярными выражениями):

    - response:
      - headers:
        - header_1:
          - header_1_value_1
          - …
          - header_1_value_K
        - …
        - header_N: 
          - header_N_value_1
          - …
          - header_N_value_K
    

    Пример.

    Cookie-заголовок должен содержать один из следующих вариантов данных: test=qwerty, uid=123. Все заголовки, начинающиеся с X-, не должны содержать данных.

        - response:
          - headers: 
            - "Cookie": 
              - "uid=123"
              - "test=qwerty"
            - 'X-': ""
    

  • Также фаза Detect может проверять ответ сервера на предмет отсутствия определенного заголовка. Для этого укажите в качестве значения конкретного заголовка null:

    - response:
      - headers:
        - header_X: null
    

Проверка тела HTTP-ответа

Структура параметра `body`

  • В теле ответа должен содержаться любой маркер:

    - response:
      - body
    
  • В теле ответа должны содержаться конкретные данные (value может быть регулярным выражением):

    - response:
      - body: value
    

    Пример.

    В теле ответа должен содержаться STR-маркер или строка demo_string

        - response:
          - body: 'STR_MARKER'
          - body: 'demo_string'
    

Проверка HTML-разметки

Структура параметра `html`

  • В HTML-разметке ответа должен содержаться STR-маркер:

    - response:
      - body:
        - html
    
  • В HTML-теге ответа должен содержаться STR-маркер:

    - response:
      - body:
        - html:
          - tag
    
  • В HTML-теге ответа должны содержаться конкретные данные (value может быть регулярным выражением):

    - response:
      - body:
        - html:
          - tag: value
    

    Пример.

    В HTML-разметке ответа должен содержаться тег а:

        - response:
          - body:
            - html:
              - tag: 'a'
    

  • В HTML-теге ответа должны содержаться какие-либо данные из заданного списка (value_# может быть регулярным выражением):

    - response:
      - body:
        - html:
          - tag: 
            - value_1
            - …
            - value_R
    

    Пример.

    В HTML-разметке ответа должен содержаться один из следующих тегов: а, img или tr:

        - response:
          - body:
            - html:
              - tag:
                - 'a'
                - 'img'
                - 'tr'
    

  • В HTML-атрибуте ответа должен содержаться STR-маркер:

    - response:
      - body:
        - html:
          - attribute
    
  • В HTML-атрибуте ответа должны содержаться конкретные данные (value может быть регулярным выражением):

    - response:
      - body:
        - html:
          - attribute: value
    

    Пример.

    В HTML-атрибуте ответа должна содержаться либо строка abc, либо числовой маркер:

        - response:
          - body:
            - html:
              - attribute: '(abc|CALC_MARKER)'
    

  • В HTML-атрибуте ответа должны содержаться какие-либо данные из заданного списка (value_# может быть регулярным выражением):

    - response:
      - body:
        - html:
          - attribute: 
            - value_1
            - …
            - value_F
    

    Пример.

    В HTML-разметке ответа должен содержаться один из следующих атрибутов: src, id или style:

        - response:
          - body:
            - html:
              - attribute:
                - 'src'
                - 'id'
                - 'style'
    

    Короткая запись параметра attribute

    Вместо attribute можно использовать короткую запись параметра — attr.

  • В ссылке HREF ответа должен содержаться STR-маркер:

    - response:
      - body:
        - html:
          - href
    
  • В ссылке HREF ответа должны содержаться конкретные данные (value может быть регулярным выражением):

    - response:
      - body:
        - html:
          - href: value
    

    Пример.

    Ссылка HREF должна содержать DNS-маркер:

        - response:
          - body:
            - html:
              - href: 'DNS_MARKER'
    

  • В ссылке HREF ответа должны содержаться какие-либо данные из заданного списка (value_# может быть регулярным выражением):

    - response:
      - body:
        - html:
          - href: 
            - value_1
            - …
            - value_J
    

    Пример.

    В ссылке HREF ответа должны содержаться строка google либо строка cloudflare:

        - response:
          - body:
            - html:
              - href:
                - 'google'
                - 'cloudflare'
    

  • В токенах JavaScript из ответа должен содержаться STR-маркер:

    - response:
      - body:
        - html:
          - js
    

    Токен JavaScript

    Токеном JavaScript считается любой токен из JavaScript-кода, расположенного внутри тегов <script> и </script>.

    Например, в данном скрипте присутствует токен со значением wlrm:

    <body>
        <script>
            s='123'; 
            wlrm=1;
        </script>
    </body>
    
  • В токенах JavaScript из ответа должны содержаться конкретные данные (value может быть регулярным выражением):

    - response:
      - body:
        - html:
          - js: value
    

    Пример.

    Токен JavaScript должен содержать значение wlrm:

        - response:
          - body:
            - html:
              - js: 'wlrm'
    

  • В токенах JavaScript из ответа должны содержаться какие-либо данные из заданного списка (value_# может быть регулярным выражением):

    - response:
      - body:
        - html:
          - js: 
            - value_1
            - …
            - value_H
    

    Пример.

    Токен JavaScript должен содержать значение wlrm или значение test:

        - response:
          - body:
            - html:
              - js:
                - 'wlrm'
                - 'test'
    

results matching ""

    No results matching ""