# ООУИ 21/22. Первый тур
[TOC]
## Misc
### I'm a human
#### Балл: 1
#### Условие:
Я не бот. **}STlRM8QFEnk880d3{FTC**
#### Ответ: CTF{3d088knEFQ8MRlTS}
#### Решение
Базовое задание для проверки работы системы жюри. Необходимо было перевернуть строку, данную в условии.
### Unknown artist
#### Балл: 10
#### Условие:
Узнайте исполнителя данной песни.
#### Ответ: D.Polo
#### Решение:
Воспользоваться одной из программ для распознавания музыки, например Shazam
### Beat
#### Балл: 20
#### Условие:
Этот исполнитель пожелал остаться инкогнито, но только не для нас!
#### Ответ: CTF{s0ngWr1t3r}
#### Решение:
Флаг лежат в мета-данных MP3 файла, в ID3 тэге `name`
### Song vol.3
#### Балл: 30
#### Условие:
Даже Шазам не может узнать эту песню. Напишите в ответе, кто исполнитель?
#### Ответ: юркисс
#### Решение:
Shazam дает ложно-позитивные срабатывания на данную песню. Авторский вариант решения - поиск в Интернете по тексту песни. Слова отчетливо слышны.
## Network
### Puzzle
#### Балл: 10
#### Условие:
Сидит дед, во сто шуб одет. Кто его разгадает, тот флаги получает
`Connetion info: ohxernbl66ewzpdwk6aa7z6fclihkkzv4hdda4ygssf64qxnavf6vnyd`
#### Ответ: CTF{0feqtpTvYkOlEBUA}
#### Решение:
Ответ на эту загадку известен - лук. На английском языке лук - это onion. Самая популярная децентрализованная сеть - Tor, имеет логотип лука, и основана на луковичной маршрутизации. В данном задании необходимо было с помощью браузера Tor или консольного клиента зайти на сайт `ohxernbl66ewzpdwk6aa7z6fclihkkzv4hdda4ygssf64qxnavf6vnyd.onion`
### Ping
#### Балл: 20
#### Условие:
Вам дан дамп сетевого трафика между компьютерами администраторов. Найдите в дампе, что же передавали между собой эти два веселых админа?
#### Ответ: CTF{WofbmuV4dw5kFoxE}
#### Решение:
В дампе был представлен исключительно ICMP протокол, у него есть поле полезной нагрузки. На изображении ниже оно выделено

Необходимо последовательно выписать данную нагрузку и преобразовать из hex-формата в ASCII
### UDP
#### Балл: 30
#### Условие:
В представленном дампе трафика проверьте целостность пакетов, а также посмотрите, что было изменено.
#### Ответ: CTF{aVKq0G2eM9QzktXj}
#### Решение:
В представленном дампе осуществляются DNS запросы по протоколу UDP. Контрольная сумма пакета (checksum) здесь не соответствует полезной нагрузке

Флаг был спрятан в значениях контрольной суммы, необходимо последовательно выписать данные checksum и
преобразовать из hex-формата в ASCII
## PPC
### l33t
#### Балл: 10
#### Условие:
Знаешь что такое l33t? Тогда подключайся и покажи, на что ты способен!
#### Ответ: CTF{you_thought_the_flag_would_also_be_in_leet?}
#### Решение:
Задача сводиться к определению типа замены, для этого достаточно N раз выбрать рандомное слово, получив таким образом следующие замены:
```
"a": "@",
"e": "3",
"i": "!",
"o": "0",
#"u": u'+03BC',
"s": "5",
"cker": "xxor",
"ckers": "xxorz"
```
Далее пишется простая программа, которая через replace меняет значения и отсылает ответ.
### Guessing Game
#### Балл: 20
#### Условие:
Добро пожаловать в игру 'Угадайка' от создателей уцуцуги. Я загадываю число и даю вам несколько попыток. Если вы отгадываете, то переходим на следующий раунд. Всего 100 раундов и 5 секунд на раздумья. Вы можете сравнить угаданное число со своим. Например, отправьте команду <100 и система ответит, меньше 100 это число или нет. При этом израсходуется одна попытка. Тоже самое с >100, если число больше, чем вы отправили, тог вернется да или нет. Ну и, наконец, если вы хотите проверить ответ, то введите =100. В случае успеха, вы попадете на следующий раунд, а если не угадали - придется начинать всё заново
#### Ответ: CTF{V3TgqUIUuuYY1kkx}
#### Решение:
Количество попыток сильно ограничено по отношению к диапазону потенциальных вариаций загаданного числа, поэтому нужен эффективный алгоритм поиска такого числа. Это [бинарный поиск](https://ru.wikipedia.org/wiki/Двоичный_поиск). Участнику необходимо было написать код для автоматического решения проблемы бинарного поиска.
### OCR
#### Балл: 25
#### Условие: Все что тебе надо - считать слово с картинки. И так 250 раз где то.
#### Ответ: CTF{v3ry_345y_0cr_745k}
#### Решение:
Задача сводилась к разбору слов с картинки, для удобства были выставлены черно-белые цвета + отсутствие шума.
Картинка передавалась в качестве base64 строки, поэтому первым делом необходимо было выполнить обратное преобразование.
Пример кода для считывания одиночной картинки из файла:
```python=
from PIL import Image
import pytesseract
import cv2
import os
image = 'task.jpg'
image = cv2.imread(image)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray, 0, 255,
cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
filename = f"{os.getpid()}.png"
cv2.imwrite(filename, gray)
text = pytesseract.image_to_string(Image.open(filename))
os.remove(filename)
print(text)
```
## Crypto
### Sound
#### Балл: 10
#### Условие:
Хах, классика...
#### Ответ: ctf{dot_dot_text_again}
#### Решение:
Классическая задача на декодирование кода Морзе. Можно воспользоваться готовым сервисом по типу https://morsecode.world/international/decoder/audio-decoder-adaptive.html
### NoKey
#### Балл: 15
#### Условие:
История?
Но где ключ?..
#### Ответ: ctf{wow_you_can_decode_monoalphabet_cipher}
#### Решение:
Задача на нахождение ключа шифра моноалфавитной замены, одним из вариантов решения является использование сервиса https://www.dcode.fr/monoalphabetic-substitution
### People
#### Балл: 15
#### Условие:
Они хотят что то сказать!
#### Ответ: ctf{eas1_cr7pt}
#### Решение:
Международная система сигнальных флагов, достаточно найти подобную картинку и прочитать готовый флаг http://www.quadibloc.com/crypto/intro.htm
### BreakingKey
#### Балл: 20
#### Условие:
Сможешь подобрать ключ и декодировать это сообщение?
Кажется, это что то классическое
P.S. Формат флага для этого задания innoctf{some_word}
qaackgs{sifl_pzrnyqat_yml}
#### Ответ: innoctf{easy_breaking_key}
#### Решение:
Шифр Виженера без выданного ключа, можно воспользоваться сервисом https://www.dcode.fr/vigenere-cipher
## Web
### BadAction
#### Балл: 10
#### Условие:
Кастомные методы?
#### Ответ: CTF{cu570m_4c710n}
#### Решение:
Необходимо передать кастомный метод ACTION_FLAG:
```bash=
curl -X ACTION_FLAG http://web.local:8080
```
### InnoBrowser
#### Балл: 15
#### Условие:
InnoSuperBrowser - наша новая разработка, попробуйте!
#### Ответ: CTF{r3qu357_fr0m_1nn0_br0w53r}
#### Решение:
Задача сводиться к подстановке кастомного юзер-агента:
```bash=
curl --user-agent "InnoSuperBrowser" http://web.local:8085
```
### Shop
#### Балл: 20
#### Условие:
Наш новый магазин открыт, добро пожаловать!
#### Ответ: ctf{easy_union_injection}
#### Решение:
В форме ввода была допущена SQL иньекция, необходимо было вывести все таблицы и через запрос UNION SELECT добраться до таблицы secrets.
## Reverse
### EasyReverse
#### Балл: 15
#### Условие:
Пару действий и флаг твой!
#### Ответ: ctf{easy_baby_reverse}
#### Решение:
Самое простое решение - вывести программу через strings и получить флаг в чистом виде.
## Pwn
### EchoService
#### Балл: 10
#### Условие:
pwn для детей.
#### Ответ: CTF{bad_input}
#### Решение:
Программа была написана на python2 с использованием input, который в данном случае исполняется как eval:
```python=
__import__('os').system('ls')
```
### ExternalShell
#### Балл: 15
#### Условие:
Кажется, тут что то не так
P.S. флаг лежит в /service/flag.tx
#### Ответ: CTF{eval_from_read_bash}
#### Решение:
Проблема заключалась в способе обработки bash'ем выражений через read -p:
https://habr.com/ru/company/ruvds/blog/556170/
## Stegano
### Empty
#### Балл: 10
#### Условие:
Файл выглядит пустым, но там точно что то есть!
#### Ответ: ctf{es0t3r1c_st3g@}
#### Решение:
Использовался эзотерический язык WhiteSpace, можно было воспользоваться сервисом https://www.dcode.fr/whitespace-language