## InnoCTF Junior 2022: отбор Японский салат --- **Категория:** crypto **Флаг**: ctf{j4p4n3s3c43s4r} **Описание**: いさぇぜか〕け〕く〔ご〔い〕〔ご〕こぞ **Авторское решение:** В тексте задачи какие-то иероглифы. Немного погуглив, можно понять что это японский (хирагана) и гугл переводчик не может перевести это в осмысленный текст. Задача из категории crypto, значит флаг так или иначе зашифрован в тексте. Название таска (Салат) намекает на то, что используется цифр цезаря. Первый символ хираганы - ""a"", попробуем взять его за точку отсчёта и вычесть из текста разницу между английской ""a"" и японской. ```ipython In [12]: enc = 'いさぇぜか〕け〕く〔ご〔い〕〔ご〕こぞ' In [13]: dec = ''.join([chr(ord('a') + ord(c) - ord('あ')) for c in enc]) In [14]: dec Out[14]: 'ctf{j4p4n3s3c43s4r}' ``` Back to Schoolсалат --- **Категория:** ppc **Флаг**: CTF{S0me7h1ng_Fr0m_Ma7h} **Описание**: Let's see how fast you count? **Авторское решение:** ```ipython from pwn import remote conn = remote('<ip>', 9001) for _ in range(4): print(conn.recvline().decode(), end='') while True: q = conn.recv().decode() if '), (' not in q: print(q) break (xa, ya), (xb, yb) = map(int, q.split('), (')[0][3:].split(', ')), map(int, q.split('), (')[1][:-5].split(', ')) conn.sendline((str(int(((xa - xb) ** 2 + (ya - yb) ** 2) ** 0.5))).encode()) ``` DNS quest --- **Категория:** admin **Флаг**: ctf{d0_n0t_trust_th3_n4m3s} **Описание**: Хочешь флаг? Так найди его в [гугле](google.cat)! **Авторское решение:** Делаем запрос на dns с данным адресом и доменом указанном в задании. На этом адресе находится флаг (на вебе) DNS - pt.2 --- **Категория:** admin **Флаг**: ctf{subd0m41n_3num3r4t01n_1s_the_WAY} **Описание**: Я слшал что где-то на поддоменах google.cat лежит важная информация. Возможно ли что её спрятали прямо в DNS? (DNS Server: x.x.x.x) **Авторское решение:** Снова DNS. В тексте таска нас просят поискать поддомены. Более того, поддомен должен содержать какую-то информцию, вероятнее всего это TXT. Первое что приходит в голову (или гуглится) - AXFR. AXFR запрос не проходит. Так как DNS сервер свой, а не общеиспользуемый, то поиск поддоменов через большинство утилит выдаёт нерелевантные результаты. Известные утилиты (gobuster, etc) не выводят TXT записи. Напишем короткий bash скрипт который будет брутфорсить TXT DNS записи: ```bash for line in $(cat ~/Wordlists/SecLists/Discovery/DNS/namelist.txt); do dig txt $line.google.cat @172.18.0.2 | grep TXT | grep -v 'DiG' done ``` LISP! --- **Категория:** reverse/pwn **Флаг**: CTF{01d_g00d_l15555p} **Описание**: Lisp is Life Lisp is Love **Авторское решение:** Задача на LISP. Немного разобравшись в коде, становится понятно что это XOR по строке-ключу. Используем функцию для шифрования нашего ввода на данных для проверки и получаем флаг. Enter the Dungeon! --- **Категория:** web **Флаг**: CTF{34sy_m4g1c_SSRF} **Описание**: Подземелья полны сокровищ. И внутри этого [dungeon](http://IP:PORT/dungeon) таится одно из них. Вход закрыт, но один [знакомый](http://IP:PORT/) готов помочь нам заглянуть внутрь. Надо лишь правильно задать вопрос.. **Авторское решение:** Страница /dungeon не выдаёт ничего полезного при входе на неё. На другой странице есть форма, в которую можно вводить URL. Но принимаются только URL, соответсвующие регексу. Регекс слабый - его можно обойти большим количеством способов: 1) http://localhost/dungeon?magic 2) http://localhost/magic/../dungeon 3) http://magic@localhost/dungeon 4) http://localhost/dungeon#magic Делаем запрос и получаем флаг cringe --- **Категория:** stegano **Флаг**: CTF{b4ck_t0_h0m0glyphes} **Описание**: cringe **Авторское решение:** В файле находится много слов cringe, на первый взгяд кажется что они не отличаются. Проверим, так ли это: ```bash hexdump -C text.txt ``` Видно что слова начинаются с разных букв - 'c' и 'с'. В каждой строке по 8 символов. Это наталкивает на мысль о побитовом кодировании. Реализуем декодер и получим флаг. Решение без декодера: убрать все символы кроме (.replace('ringe', '').replace(' ', '')), а потом заменить 'c' на '1', а 'с' на 0. После этого декодировать любым декодером двоичной записи (например, CyberChef) Fight the Goblin --- **Категория:** admin **Флаг**: CTF{byp4ss_4ll_th3_l1m1t5!!!} **Описание**: just kill_the_goblin ```bash ssh -p <PORT> player@<IP> password: iamready ``` **Авторское решение:** При подключении по ssh нас просят ввести наши действия. При неправильной команде (например, ""aaaaa"") выходит ошибка от bash. Проверяем с помощью whoami - мы действительно можем исполнять команды. Если ввести команду help, то нас попросят ввести kill_the_goblin. Однако эта команда не хочет запускаться - запрещён ввод слова kill. Можно обойти этот фильтр, например с помощью echo: ```bash echo -e '\x6b\x69\x6c\x6c\x5f\x74\x68\x65\x5f\x67\x6f\x62\x6c\x69\x6e' | bash ``` Другое решение заключается в том чтобы запустить grep по файловой системе с форматом флага: ```bash grep -R 'CTF' / 2>/dev/null ``` Catch the button --- **Категория:** web **Флаг**: CTF{34sy_w3bch1k} **Описание**: Поймай меня! **Авторское решение:** На странице кнопка которая убегает от мышки. Поймать её не получается, смотрим исходный код страницы через Ctrl+U - видим функцию которая должна выводить флаг. FindThePython --- **Категория:** forensic **Флаг**: CTF{ftp_1s_s0_uns3cure} **Описание**: Пока я следил за роутером, кто-то залил странный файл на сервер. Проверишь? **Авторское решение:** Посмотрев этот небольшой дамп в wireshark, можно понять что он содержит FTP трафик. Однако после попытки посмотреть данные файла через "Follow TCP Stream", файла не обнаруживаем. Сервер получает файл в режиме PASSIVE, и файл передаётся отдельным потоком. Пролистав несколько пакетов, находим большой пакет в котором передаётся python скрипт. В скрипте есть флаг, он раскодируется из нескольких частей, но это неважно - мы можем просто вывести флаг через print(flAg) backdoor --- **Категория:** forensic **Флаг**: CTF{ssh_also_can_be_a_backdoor} **Описание**: Пару недель назад сервер Evil Corp был взломан. И вроде бы всё уже починили, но кажется что кто-то сливает наши данные. Найди backdoor. Флаг: CTF{юзернейм_хакера} **Авторское решение:** В архиве доманшняя папка пользователя. Она почти пустая. Файлы стандартные. Однако при внимательном просмотре можно заметить запись в .ssh/authorized_keys - этот файл разрешает подключаться через ssh по ключу и его можно использовать как бэкдор. Смотрим имя пользователя: ssh_also_can_be_a_backdoor и подставляем в форму флага Неxorоший шифровальщик --- **Категория:** crypto **Флаг**: CTF{1ncr3d18le_x0r_cryp70gr@ph3r} **Описание**:Начинающий криптограф Ибрагим писал свой первый вирус-шифровальщик, но, по своей невнимательности, случайно запустил его, зашифровав файл с флагом, который добыли его более опытные сокомандники по CTF, поручившие хранить Ибрагиму этот флаг. Благо, горе-криптограф помнит, что флаг содержит в себе слово ""x0r"" и символы ""0"", ""7"" и ""@"", что значительно упрощает задачу. Помогите Ибрагиму восстановить флаг и не вылететь из команды! **Авторское решение:** https://hackmd.io/@anijack/rkTFQad-o Купи слона! --- **Категория:** web **Флаг**: CTF{exceptions_are_one_another_useful_source_for_info} **Описание**: Все советуют убирать дебаг в приложениях. А ты возьми и купи слона! http://IP:PORT/ **Авторское решение:** На страничке есть ссылки. Все они ведут на 404 от Django. Однако на страницах с 404 можно заметить что запущен режим DEBUG. Посмотрев исходники единственной доступной страницы, можно найти ссылку на сообщение в телеграме, где есть метод для вызова исключений в Django. Применим его, например через curl (Добавим 'Host: ""'): ```bash curl 'http://localhost:8000/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' -H 'Accept-Encoding: gzip, deflate, br' -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'Sec-Fetch-Dest: document' -H 'Sec-Fetch-Mode: navigate' -H 'Sec-Fetch-Site: cross-site' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'Host: ""' ``` Флаг лежит в переменной окружения CTF_FLAG Города --- **Категория:** ppc **Флаг**: CTF{Y0u_Ar3_N0t_8ad_a7_G30graphy} **Описание**: Классическая игра в города Нужно пройти 100 раундов **Авторское решение:** ```python= from pwn import remote cities = open('cities.txt', encoding='utf-8').read().split('\n') def city_for_letter(letter): for city in cities: if city[0].lower() == letter.lower(): return city conn = remote('<ip>', 9002) for _ in range(6): print(conn.recvline().decode('utf-8'), end='') while True: q = conn.recv().decode('utf-8')[:-1] if 'CTF{' in q: print(q) break conn.sendline(city_for_letter(q[-1]).encode('utf-8')) ``` smartcontract --- **Категория:** forensic **Флаг**: CTF{private_variables_are_not_such_private_huh} **Описание**: Где-то на Goerli есть один интересный контракт.. Более того, он есть и на GitHub! Найди контракт и получи флаг! <Ссылка на исходник SecretFlagVault.sol> **Авторское решение:** У нас есть исходник смартконтракта. Говорится что-то про Goerli (тестнет блокчейна) и GitHub.. Попробуем найти контракт на гитхабе. После поиска находим репозиторий с исходным кодом контракта и адресом. На etherscan находим контракт. Флаг - private переменная, однако изначально она передаётся в конструктор. Рассмотрев параметры конструктора как UTF-8 находим флаг. Кроме того, можно было получить значения флага, используя функции .getStorageAt() у библиотек для взаимодействия с блокчейном (например, ethers.js) Кто я? --- **Категория:** stegano **Флаг**: CTF{Ju5t_A_51mp1e_3van9on0graphy} **Описание**: Кто я? А кто ты? Ты тоже... Да. Я та, кого знают как... Мы все те, кого знают, как... В общем, остается всего лишь добыть флаг. **Авторское решение:** 1) Открываем гифку через архиватор или извлекаем архив через binwalk 2) Остается узнать пароль от архива - это имя аниме персонажа, изображенного на гифке (ayanami) 3) Открываем flag.txt Onion opinion --- **Категория:** osint **Флаг**: 6f6823a4-3f73-11ed-b878-0242ac120002 **Описание**: deanonymize akgzqlvtjd3yzn7qpflb5psolifpvcmj3ix7fpwltebiowz3hee3o5yd.onion **Авторское решение:** Зайти через TOR-браузер на *.onion-ресурс (во-первых, нужен сам браузер, во-вторых, нужно будет преодолеть возможные блокировки TOR-сети, осуществляемые Роскомнадзором) 2. Не обращать внимание на кучу полей, и в форме сброса пароля ввести контролируемый участником email 3. Получить на него письмо, посмотреть его исходные (RFC) заголовки 4. Найти там IP-адрес отправителя 5. Перейти по нему в браузере, на открытом сайте будет flag.txt" ネヴラセロラツヱウ --- **Категория:** crypto **Флаг**: CTF{fr3qu3ncy_ana1y51s_d0_brrr} **Описание**: В этом файле определенно есть флаг, но, кажется, это не английский.. **Авторское решение:** https://hackmd.io/@anijack/S1DrhoSGj