Загрузка...

Abuse of PHP strip_tags to bypass WAF (to exploit XSS)

Thread in Web vulnerabilities created by LazersBoy Oct 29, 2019. 535 views

  1. LazersBoy
    LazersBoy Topic starter Oct 29, 2019 Banned 163 Oct 10, 2019
    PHP предлагает множество вариантов, которые помогут вам предотвратить атаки XSS. Вот некоторые из них:
    Code
        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.

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

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

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

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

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

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

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

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