## 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