Учим XSS через игру

T

to_0day

Добрый день, дорогие форумчане. Достаточно долго я не выпускал статьи. Эту я решил написать основываясь на личный опыт и полученную информацию. Здесь я подробно опишу вам известную уязвимость как XSS. По другому межсайтовый скриптинг. Приступим к изучению.

1568700326038.png


Введение

Данная уязвимость достаточно известна. Но по ней есть много слухов. Кто-то говорит, что она бывает активная и пассивная. Другие же утверждают о наличие других видах данной уязвимости. И я решил решить данную проблему. Будем изучать все постепенно. Это не очередной копипаст, так как однажды я решил вспомнить информацию и заглянул в интернет после чего это не окончилось успехом и нужных данных просто напросто нету. Здесь мы рассмотрим как найти XSS уязвимость и какие они бывают. Давайте перейдем к практике.

Простые знания

И так. Давайте начнем с простого. Что такое XSS?

Межсайтовый скриптинг (XSS) - тип атаки на сайты. Его суть внедрить на сайт вредоносный javascript код. Он же в свою очередь будет выполнять определенное действие при посещении сайта. Это может быть как обычная загрузка так и кража cookies из браузера жертвы. Все зависит от загруженного кода.

Теперь перейдем к простым командам. Для начало, чтобы вам не скучать мы пройдем по ходу дела XSS игру. В которой кратко описаны атаки. Переходим . И так, основная задача данной игры вывести на экран безобидное окошко с заданным текстом. Начнем с самых простых команд. У нас есть сайт и чтобы проверить его на наличия уязвимости мы попытаемся выполнить данный код:

<script>alert('XSS');</script>

Это самая простая команда для выявления нашей дыры. Вводим ее сразу в поисковик и кликаем Search.

1568696813389.png


И получаем наши результаты:

1568696853082.png


Это самые простые действия при поиске данной уязвимости. То есть данный код вы можете вводить совершенно в любом месте на сайте. Будь это URL или же поисковик по сайту. Идем к более сложному уровню.


onLoad-событие

Здесь уже на 2 уровне нужно поразмышлять. Мы находимся в обычной переписке и наша задача как всегда вызвать окошко alert(). Для этого воспроизведем событие onLoad. Но для этого определимся, что это такое.

Событие OnLoad - выступает в роли указателя и говорит нам, что веб-сраница полностью загружена со всеми картинками, скриптами и внешними файлами.

Давайте попробуем используя данное события заменить картинку на нашу команду. Для этого в поля ввода (не URL) пишем:

<img src="http://pouchdb.com/static/img/mark.svg" onload="javascript:alert('XSS');">

Объясняю, что мы делаем. У нас после src идет ссылка, которая указывает на загружаемое изображения на сайт. Но вместе с ним, выполняется js код благодаря команде onload. И в итоге получается так:

1568697407928.png


Надеюсь я понятно объяснил всю суть данной ситуации. И поэтому мы идем дальше. Ведь чем дальше, тем интереснее становится)


Переключение окон

Здесь уже задача довольно нестандартная. Как мы видим у нас имеются три окна с изображениями. Поле ввода только URL. Нам нужно найти location.hash. Данная вещь отвечает за часть пути к картинке отображаемой в окне. Все это ведет к тому, что при вводе нам нужно закрыть img отвечающий за картинку. И после вводить нашу команду. Выходит все так:

https://xss-game.appspot.com/level3/frame#3'"><script>alert('XSS');</script><"'

1568697872646.png


Все достаточно очевидно. Теперь после получения наших результатов идем к следующему уровню.


Вызов метода

Вот на этом моменте все необычно. Как вы могли заметить везде мы применяем тег <script/> и после вводим наш любимый alert(). Но на этом моменте мы должны ввести наш код именно в момент вызова метода. Делаем это через переменную timer, которая находится в самом js коде:

https://xss-game.appspot.com/level4/frame?timer='),alert('XSS

И теперь мы подставили наш код не как значения а как часть самой страницы, что дало его успешный запуск.

1568698289577.png


Все готово, а перед нами остается еще парочку шагов до долгожданного завершения.


Вспомним старое

И так, перед нами представляется поисковая форма. Все аналогично первому уровню. Здесь мы попробуем использовать достаточно нестандартный метод. На другие ресурсы нам выйти не дадут, но мы спокойно можем погулять по самой странице. Давайте попробуем сделать редирект. Для тех кто не знает объясню:

Редирект - прежде всего процесс, при котором пользователе определенного сайта автоматически перенаправляются на другое место в сети. Он настраивается как для отдельного сайта, так и для всех сразу.

Звучит сложно и слишком остроумно, но на деле это небольшая часть кода, которая вставляется в регистрационное поле. А выглядит это так:

https://xss-game.appspot.com/level5/frame/signup?next=javascript:alert('XSS')

1568698713989.png


Очевидно и легко. Чтобы ваша уязвимость показала себя остается кликнуть на кнопку Next >> и насладиться результатом работы.


Внешнее подключение

И мы оказались на самом последнем этапе нашей работы. Для выявления нашей атаки мы воспользуемся внешней JavaScript библиотекой. В ней же как раз и будет происходить вызов команды alert. Безопасность увеличена и у нас не выйдет подсунуть код через протоколы http/https так как они в свою очередь проверяются сайтом. Но есть один минус. Нам не обязательно указывать это так как он подставляется автоматически на нашем сайте. И теперь самая суть, так как те кто воспользовался подсказкой увидели наверное ссылку типа google.com/jsapi?callback=foo. Там лежит JavaScript файл в конце которого есть foo(). Это дает нам большой рывок и говорит, что наша ссылка должна выглядеть примерно так:

//google.com/jsapi?callback=alert

Ну и результаты конечно же одни и те же.

1568699157365.png


Вот мы и закончили наш замечательный квест. Он не простой. Но все же затрагивает и показывает то, как можно найти уязвимость XSS. Это не конец, так как я хочу объяснить какие типы атаки мы использовали в данной игре. А именно:

1. Reflective XSS - данный вид атаки выполняется в одном запросе и ответе. На сайте не сохраняет никакие данные (встречалось в игре).
2. Stored XSS - сохраняется на сайте и проводится на нормальных сайтах пользователей. Данная уязвимость представляет наибольшую угрозу сайту (не встречалось).
3. Self XSS - от нее защищаются в последнюю очередь так как она используется с помощью навыков СИ и зависит от того перейдет ли жертва на сайт или нет (используется в beef-xss в игре не было).

И так, это все, что я хотел вам предоставить. Идем к итогам и выводам.


Выводы/Итоги

В этой статье мы познакомились с такой уязвимостью как XSS. Она может представлять угрозу сайту и довольно большую. Чтобы ее найти на сайте прежде всего нужно тестировать абсолютно все. Данные дыры могут быть в любом виде и форме. Будьте готовы к этому. Так же появляется она в неожиданных значениях и это тоже важно так как вы можете их упустить. Ну а в основном удачи ;)
 

s unity

Green Team
18.09.2019
207
26
BIT
0
я так и не понял, чем мне это может пригодится? ну получил человек вредоносный код в браузер, ну и что? какая связь со мной? что-то не догоняю... обьясните что-ли. на форуме не все люди сетевые "гуру", мастера пентестов
 

SolomonRei

Green Team
27.08.2018
24
1
BIT
0
Допустим у тебя форма регистрации и ты через js внедряешь вредоносный код, который в дальнейшем сохранится на сервере. Это серверный xss. Так ты можешь потом еще и файлы свои загрузить на сервер, в общем все что хочешь. Также можно еще куки стащить пользователя и все остальные, представь что там сидит шпион скрипт, которые копирует все твои куки отправляет на сервер хакеру. Или записывает все твои действия на сайте.

Xss опасная уязвимость в прямых руках.

Как избажать это? Очень легко использовать appendChild, createTextNode. Никогда не использовать innerHtml и вставлять туда еще куски html. Все надо приводить к текстовому формату. Что косаемо сервера, то писать валидаторы, не допускать кавычек, слешей, скобок и т.д. В общем проверять данные, которые тебе пользователь передает.

Если говорить про ajax или xmlhttprequest то передавать еще хэш вместе с данными. Этот хэш проверять на сервере. А также проверять заголовки откуда пришел запрос, так как хэш можно обойти.
Также используй регулярные выражения. Пиши свои функции парсинга html кода. Чтобы пропускало только определенные тэги. Ну и в общем мониторь свой сервер. Нагрузку и т.д.
Скажу честно, если сайт захотят взломать(закажут), то его взломают в любом случае
 
Последнее редактирование:
  • Нравится
Реакции: to_0day

MLNK

Mod. Ethical Hacking
Red Team
23.01.2018
560
706
BIT
7
я так понимаю очередная паста?


@Pr0_ogrammer второе предупреждение. после 3тьего будет бан. также я лично займусь проверкой всех статей на пасту.
 
T

to_0day

@Pr0_ogrammer второе предупреждение. после 3тьего будет бан. также я лично займусь проверкой всех статей на пасту.
Классно звучит, но врят ли это меня это остановит. Это первое. Второе для особо умных я объясняю что к чему. Если вы не заметили код отличается. В моей статье и там разное объяснение и даже код вводимый туда разный. Ничего да? Скриншоты лично мои. Все писал сам без каких-либо копирований. Советую идти и читать что такое копипаст, рерайт и копирайт. Удачи.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!