1 / 17

Sergey Belov - web app security

Sergey Belov - web app security. ~ 2 years in Bitworks (Mojiva) CTF member – SiBears, [TechnoPandas] habrahabr.ru / “Xakep” magazine Google, VK, Topface, kinopoisk, Yandex (bug bounty member) and 100+ t witter.com/sergeybelove. Cross Site Scripting (XSS).

colm
Download Presentation

Sergey Belov - web app security

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sergey Belov - web app security ~ 2 years in Bitworks (Mojiva) CTF member – SiBears, [TechnoPandas] habrahabr.ru / “Xakep” magazine Google, VK, Topface, kinopoisk, Yandex (bug bounty member) and 100+ twitter.com/sergeybelove

  2. Cross Site Scripting (XSS) • (вики) XSS (англ. Сross Site Sсriрting — «межсайтовый скриптинг») • тип уязвимости интерактивных информационных систем в вебе. XSS возникает, когда в генерируемые сервером страницы по какой-то причине попадают пользовательские скрипты. Специфика подобных атак заключается в том, что вместо непосредственной атаки сервера они используют уязвимый сервер в качестве средства атаки на клиента. • Реальные угрозы: • Воровство cookie • DoS атаки • Атаки на браузер пользователя, воровство данных • Выполнение произвольных действий на сайте под учетной записью пользователя

  3. Виды XSS • Пассивные • Пассивные XSS подразумевают, что скрипт не хранится на сервере уязвимого сайта, либо он не может автоматически выполниться в браузере жертвы. Для срабатывания пассивной XSS требуется некое дополнительное действие, которое должен выполнить браузер жертвы (например, клик по специально сформированной ссылке). Их также называют первым типом XSS. • Активные • При активных XSS вредоносный скрипт хранится на сервере, и срабатывает в браузере жертвы при открытии какой-либо страницы заражённого сайта. Их также называют вторым типом XSS. • DOM XSS

  4. Методы использования • Более менее-актуальные: • Обычный, непосредственная вставка HTML кода • Использование DATA (base64) • Менее актуальные: • Flash, Изображения • TRACE, UTF-7

  5. Подстановка HTML-кода Форма: <input type = “text”> Введенное значение: <h1>Hello!</h1> Должно быть на выходе (с фильтрацией) &lt;h1&gt;test&lt;/h1&gt; Без фильтрации (xss) <h1>Hello!</h1>

  6. data:text/html;base64, ... • Требуется поддержка браузером RFC 2397 • Используется в основном в скриптах перенаправления • Защита с преобразовыванием символов не спасает от уязвимости (архитектурный баг)

  7. Flash/Изображения • Flash: • Требуеся возможность вставки .swf • Использование JS функций • Изображения • Особенность браузеров обрабатывать js код в содержимом картинки (IE)

  8. UTF-7/Trace • UTF-7 • Успех зависит от браузера • <title> до установки charset • Trace • Зависит от конфигурации сервера

  9. RULE #0 - Never Insert Untrusted Data Except in Allowed Locations • <script>...NEVER PUT UNTRUSTED DATA HERE...</script> directly in a script • <!--...NEVER PUT UNTRUSTED DATA HERE...--> inside an HTML comment • <div ...NEVER PUT UNTRUSTED DATA HERE...=test /> in an attribute name • <NEVER PUT UNTRUSTED DATA HERE... href="/test" /> in a tag name • <style>...NEVER PUT UNTRUSTED DATA HERE...</style> directly in CSS

  10. RULE #1 - HTML Escape Before Inserting Untrusted Data into HTML Element Content • <body>...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...</body> • <div>...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...</div> • any other normal HTML elements

  11. RULE #2 - Attribute Escape Before Inserting Untrusted Data into HTML Common Attributes • <div attr=...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...>content</div> inside UNquoted attribute • <div attr='...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...'>content</div> inside single quoted attribute • <div attr="...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...">content</div> inside double quoted attribute

  12. RULE #3 - JavaScript Escape Before Inserting Untrusted Data into JavaScript Data Values • <script>alert('...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...')</script> inside a quoted string • <script>x='...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...'</script> one side of a quoted expression • <div onmouseover="x='...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...'"</div> inside quoted event handler • <script> window.setInterval('...EVEN IF YOU ESCAPE UNTRUSTED DATA YOU ARE XSSED HERE...'); </script>

  13. RULE #4 - CSS Escape And Strictly Validate Before Inserting Untrusted Data into HTML Style Property Values • <style>selector { property : ...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...; } </style> property value • <style>selector { property : "...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE..."; } </style> property value • <span style="property : ...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...">text</style> property value

  14. { background-url : "javascript:alert(1)"; } // and all other URLs { text-size: "expression(alert('XSS'))"; } // only in IE

  15. RULE #5 - URL Escape Before Inserting Untrusted Data into HTML URL Parameter Values • <a href="http://www.somesite.com?test=...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...">link</a >

  16. RULE #6 - Sanitize HTML Markup with a Library Designed for the Job - https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet • RULE #7 - Prevent DOM-based XSS - https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

  17. DEMO

More Related