---
# System prepended metadata

title: ООУИ 21/22. Первый тур

---

# ООУИ 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 протокол, у него есть поле полезной нагрузки. На изображении ниже оно выделено
![](https://i.imgur.com/iWlm4bO.png)
Необходимо последовательно выписать данную нагрузку и преобразовать из hex-формата в ASCII 

### UDP
#### Балл: 30
#### Условие:
В представленном дампе трафика проверьте целостность пакетов, а также посмотрите, что было изменено. 
#### Ответ: CTF{aVKq0G2eM9QzktXj}
#### Решение:
В представленном дампе осуществляются DNS запросы по протоколу UDP. Контрольная сумма пакета (checksum) здесь не соответствует полезной нагрузке
![](https://i.imgur.com/hp8mphn.png)
Флаг был спрятан в значениях контрольной суммы, необходимо последовательно выписать данные 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

