Google’s XSS game впечатления и прохождение

XSS Game — This security game consists of several levels resembling real-world applications which are vulnerable to XSS — your task will be to find the problem and attack the apps, similar to what an evil hacker might do.

Интересный квест на 6 уровней для любителей ИБ и XSS в частности. Прошел за пару часов. Дальше будет описание заданий и примеры решений (проще говоря — спойлеры), так что будьте осторожны.

В каждом задании надо добиться выполнения функции alert в контексте приложения.

Hello, world of XSS

Легкое задание с одним полем ввода и полной свободой действий. Стандартный вектор с закрытием тегов срабатывает на ура:

><script>alert(12345);</script><

Persistence is key

Есть форма для публикации комментариев и надо сделать такой комментарий, чтоб на страничке вывелся alert. У менч сработал вариант с onLoad-событием для картинки:

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

That sinking feeling…

Задачка с переключением «окон» на странице. location.hash используется в качестве части пути к картинке отображаемой в «окне». С учетом, что значение подставляется в таком виде, в каком мы его передадим, то задача сводится к тому, чтобы закрыть тег img и вывести alert. Как-то так:

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

Context matters

Фишка уровня в том, что вызов alert’a надо сделать не через тег script, а «всунуть» его в вызов метода. У нас есть переменная «timer», которая подставляется в js-код. Подставляется не как значение параметра, а как кусок этого самого кода. Подсунуть alert можно так:

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

Breaking protocol

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

Follow the …

По условию нам надо подключить какую-то нашу внешнюю js-библиотеку, где будет вызов alert’a. В коде задания идет проверка на наличие http/https в начале ссылки на наш файл. В принципе, это не сильно важно, так как в ссылке не обязательно надо указывать протокол (он будет подставляться автоматически). Вот тут первая загвоздка. Протокол, с которым работает квест — https. На доступных мне хостах https не поднят нигде. Пришлось посмотреть подсказки к уровню. В одной из них дается ссылка вида «google.com/jsapi?callback=foo». Перейдя по ней видим js-файл, в конце которого есть «foo()». Еще раз смотрим на ссылку и понимаем, что нужный нам url выглядит так:

//google.com/jsapi?callback=alert

Да, именно с двумя косыми чертами в начале.

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

Оставить комментарий

Top ↑ | Main page | Back