![]() |
Наверняка многие заметили, что в публикуемых тасках, преобладает сервер-сайд. И это не совсем честно по отношению к любителям другой стороны. Тем более, что античат является одним из первооткрывателей атак типа Cross Site Scripting и HTML Injection. А некоторые участники форума, заслуженно, получают респекты от ведущих мировых экспертов по безопасности в сфере клиент-сайда (!)
Но правда в том, что CSS-ки уже давно не активные/пассивные, толерантный запад навязал нам свои Reflected и Stored, а эксплуатация стала довольно-таки нетривиальной. Поэтому, предлагаю показать здесь свои знания и умения в программировании на HTML, в нестандартных условиях, и немного понастальгировать Правила просты:
Код:
http://css.ctf.antichat.com/?q=alert(document.domain);https://i.imgur.com/Ud0D8zN.png
Код:
http://css.ctf.antichat.com/?q=HACKED+BY+VASYA+PUPKINhttps://i.imgur.com/DeIQVqk.png
Знающие: НЕТ / РЕШЕНИЕ! Умеющие: @ex0dus, @alexzir - Хостинг для таска предоставлен модной и молодёжной площадкой - ctf.antichat.com |
|
Цитата:
|
|
http://css.ctf.antichat.com/?i=.hacked{position:absolute;width:1000px;height:1 000px;margin-left:300px;}
.SpoilerTarget" type="button">Spoiler: Click https://i.imgur.com/VGkDlJ0.png ^^ |
Окай, что-то негусто у нас с умеющими, а тем более со знающими, будем хинтить
Код:
# Открывать в десктопном FireFox, хром какашка :( |
@crlf даешь прохождение. Тема висит мертвым грузом)
|
|
|
Доброго времени суток, уважаемые форумчане!
@iBigBear был прав, стоило опубликовать решение давно. Тянул, забыл, прошу понять и простить Неожидано, но, к сожалению, решение вызвало трудности и нет ни одного решившего (по секрету: трудности возникли и у ребят парой уровней выше). Дефейсы так же протекали вяло, что уж тут говорить. Видимо не формат, мыж тут все тру, оставим это скрип-киддисам из лихих 90х Лично от себя хочу выразить жирный респектос @ex0dus и @alexzir, за то что поучавствовали в движухе ;-) Задание состояло из двух задач, которые участники должны были решить поочерёдно. Забайпасить фильтр опасных тегов/атрибутов и обойти ограничение CSP, соответственно. Были даны подсказки, после которых, дело должно было ускориться, но что-то пошло не так. Давайте вместе пройдёмся по решению и разберём некоторые подсказки. Итак, у нас в наличии ретро-страница портала "Античат", с возможностью внедрения произвольного контента, вида: http://css.ctf.antichat.com/?i=Приве...ностью! https://i.imgur.com/Y4Cd6bK.png Доверчивый и неискушенный участник, скорее всего, первым делом, начнёт вставлять тег : http://css.ctf.antichat.com/?i=alert() Но вместо требуемого алерта, получит такой ответ: https://i.imgur.com/bW8tWDg.png alert() - это определённо не то, что нужно. Попробовав сотню другую нагрузок, можно убедиться, что фильтр непробиваемый и влоб его прошибить не получится. Тем более, что позднее последовала серия подсказок. Из которых, в том числе, можно было получить исходный код скрипта и убедиться, что простые методы здесь не работают. Хотя решение по кейсу, как раз таки входит в число таковых и ему сто лет в обед. Название задания и возраст странички для дефейса, честно об этом намекали. Поэтому, чтоб никого не обижать, отнесём его к числу "хитрых" байпасов и продолжим дальше. Следущая подсказка гласит: - В случае с XSS, атакующий контролирует первые байты документа (?) А значить это может то, что сначала идёт заголовок, а дальше тело ответа и первые его символы под контролем атакующего. Позднее был дан готовый ответ. Оставалось либо загуглить, либо вчитаться внимательно: Цитата:
Из всего прочитанного нужно понять, что при определённых последовательностях байт в потоке данных, мы можем переключать UTF кодировку символов, точнее стандарты и приложения это могут и делают прозрачно. Но самое главное для нас, вот этот момент: https://i.imgur.com/BxkTlZu.png Проще говоря, даже намеренно упрощая, не погружаясь во всякие endian-ы, так как сам пока полностью не въезжаю во все эти стандарты, следует понимать, что если в заголовке явно задана кодировка, типа как у нас и ещё на миллионе других сайтов: Цитата:
Воспользовавшись подсказкой выше, посмотрим ещё раз как это выглядит: Цитата:
А вот в какую абракадабру при этом браузер превращает ответ: https://i.imgur.com/1QIbV7W.png Можно даже попробовать перевести это чудо, возможно там есть ещё одна подсказка: https://i.imgur.com/QICgR3T.png Хммм, подсказки нет... но всё равно забавно, особенно про суп из баранины, часто повторяется. Интересно какой набор из исходника даёт такую последовательность? Оставлю это для исследования тебе, читатель Особенно внимательные, скорее всего уже заметили, что в маркере, которы приведён в пример, есть один лишний нулевой символ. И поэтому хочу сразу оговориться, чтобы не вводить в заблуждение. К последовательности BOM он не имеет никакого отношения. А всего лишь является очередной завуалированной подсказкой, которая даёт понять, что нужно использовать начало диапазона символов UTF. К примеру , набор из U+003C U+0073 U+0063 U+0072 U+0069 U+0070 U+0074 U+003E или в URL кодировке %00%3C%00s%00c%00r%00i%00p%00t%00%00%3E. Поэтому пробуем: https://i.imgur.com/NvJgPqJ.png Бинго! Теги остались без изменений, браузер спокойно обработал эту "кашу из кодировок", а злой XSS фильтр нет. А теперь рука-лицо, если всё это вдруг показалось чем-то сложным, то в очень известной методичке PayloadsAllTheThings, был готовый вариант, стоило просто перебрать: https://i.imgur.com/ZTuflhM.png Теперь же мы подошли ко второй части головоломки и заветного алерта мы всё ещё не видим, так как следущая подсказка гласит: - console.log(), в сорцах HTML, криво намекает, что пейлоды отлаживать следует именно так И действительно, видим, что CSP блокирует выполнение нашего пейлода: https://i.imgur.com/g0TDrSp.png Поэтому, если не в курсе, то самое время почитать, что это такое https://en.wikipedia.org/wiki/Content_Security_Policy, ведь оно используется практически повсеместно, а гигантами IT уже давно. Вкратце, это такая злая штука которая блокирует возможность выполнение левых скриптов на странице, стилей, подгрузки картинок, которые могут быть внедрены в том числе и через отражённую XSS. Но, к счастью, в большинстве случаев это обходится, а некоторые компании даже платят исследователям за методы байпасса их конфигурации CSP для некоторых эндпоинтов и доменов (https://portswigger.net/research/byp...licy-injection). После небольшого экскурса, давайте взглянем на тот, который нужно побороть нам: Цитата:
https://i.imgur.com/7FzXQpt.png object-src был оставлен в надежде, что кто-то запалит или найдет зиродей Поэтому сосредоточимся на script-src. Описание директив, даёт лишь поверхностные варианты атаки, их гораздо больше и в текущем кейсе стоит понимать, что nonce нам точно не обойти, так как он генерится по спекам, т.е. всегда разный. Но есть возможность и очень большая вероятность, подключить что-то из разрешённого скоупа ( antichat.com *.antichat.com ) через атрибут src. Именно для этого и было сделано послабление: - С этого момента, в CSP добавлен более широкий скоуп, что даёт большее количество вариантов эксплуатации в обоих случаях. Так как первоначальный вариант был сильно ограничен и мне тогда показалось, что кто-то мог застрять на нём. Вайлдкард в свою очередь, мог позволить найти что-то на сабах античата, тот же ангуляр или какой-то скрипт, где нас ждёт eval с распростёртыми объятиями Но ближе к делу. Так как в конечном варианте решений уже может быть множество, расссмотрим первоначальный, который история для наблюдательного ресёрчера. Поэтому вернёмся в начало повествования, где говорится, что мы имеем произвольный вывод на страницу. А если он не один? Нет? А если найду? Чтоб не напрягать чёткого пацыка, т.е. меня (нет), идём ещё раз по линку и крутим страницу до конца: http://css.ctf.antichat.com/?i=Приве...ностью! https://i.imgur.com/ebh7tbs.png https://i.imgur.com/F9vZNbH.png Да и в том же исходнике, видно, что вывода два: PHP код:
Цитата:
. . . https://i.imgur.com/PZ5AnDW.png Как видно, из-за наличия двойного отражения в теле, используя бектики (или строковые литералы, спасибо ECMAScript 6), можем получить выражение вида alert(document.domain)-`__HTML_CONTENT__alert(document.domain)-`-alert(document.domain)-`__HTML_CONTENT__alert(document.domain)-`, тем самым завернув мешающий нам контент в строки. Ну и далее, дело техники, комбайним это дело с полученными ранее разработками и крафтим урл вида: http://css.ctf.antichat.com/?i=%fe%...00%3E%00%3C%00/%00s%00c%00r%00i%00p%00t%00%3E https://i.imgur.com/lEgrJli.png Вуаля, XSS |
| Время: 10:09 |