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