Привет, Хабр.
7-9 февраля 2019 года проходил квалификационный этап соревнования на площадке cybertalents, цель — поиск киберталантов для Омана и Саудовской Аравии. Люди из других стран, согласно правилам мероприятия, участвуют вне конкурса. Под катом — разбор определенных задач.

Соревнование состоит из 9 тасков, четыре из них уровня сложности «easy», четыре — «medium», одна — «hard». За каждую задачу даётся 50, 100 и 200 баллов соответственно. Задачи также разбиты на категории. Ниже решение некоторых задач.
Easy, Web Analytics

Попробуем POST-запрос ко второй странице:

Нежно пропускаем код через JS beautify:
Флаг:
Easy, Digital Forensics

Ссылка на картинку
Medium, Malware Reverse Engineering
Easy, General Information
7-9 февраля 2019 года проходил квалификационный этап соревнования на площадке cybertalents, цель — поиск киберталантов для Омана и Саудовской Аравии. Люди из других стран, согласно правилам мероприятия, участвуют вне конкурса. Под катом — разбор определенных задач.

Соревнование состоит из 9 тасков, четыре из них уровня сложности «easy», четыре — «medium», одна — «hard». За каждую задачу даётся 50, 100 и 200 баллов соответственно. Задачи также разбиты на категории. Ниже решение некоторых задач.
Back to basics
Easy, Web Analytics
not pretty much many options. No need to open a link from a browser, there is always a different wayДана ссылка вида example.com/somepage. При переходе по ней нас перенаправляют (301 Moved Permanently) на ту же страницу со слешем на конце, а она, в свою очередь, редиректит на google.com:

Попробуем POST-запрос ко второй странице:

var _0x7f88=["","join","reverse","split","log","ceab068d9522dc567177de8009f323b2"];function reverse(_0xa6e5x2){flag= _0xa6e5x2[_0x7f88[3]](_0x7f88[0])[_0x7f88[2]]()[_0x7f88[1]](_0x7f88[0])}console[_0x7f88[4]]= reverse;console[_0x7f88[4]](_0x7f88[5])
Нежно пропускаем код через JS beautify:
function reverse(_0xa6e5x2) { flag = _0xa6e5x2['split']('')['reverse']()['join']('') } console['log'] = reverse; console['log']('ceab068d9522dc567177de8009f323b2')
Флаг:
2b323f9008ed771765cd2259d860baecI love images
Easy, Digital Forensics
A hacker left us something that allows us to track him in this image, can you find it?К задаче приложена картинка:

Ссылка на картинку
Решение
Открываем в хекс-редакторе. Заметим, что формат png имеет концевик «IEND» (49 45 4E 44). Смотрим в конец:

Наблюдается, что добавлена дополнительная информация в конец файла. Первое предположение — base32, т.к. все буквы в одном регистре. Расшифровываем:

Наблюдается, что добавлена дополнительная информация в конец файла. Первое предположение — base32, т.к. все буквы в одном регистре. Расшифровываем:
FLAG{Not_Only_Base64}I love this guy
Medium, Malware Reverse Engineering
Can you find the password to obtain the flag?Дан файл
Решение
Пропускаем файл через Detect It Easy:

Открываем DNSpy x86
Файл действительно очень небольшой и состоит из одного пользовательского события — Button_Click:
Также в текущем классе объявлена строка:
Есть два варианта решения — в статике и динамике. Сперва решим статическим методом:
Когда мы убедимся, что программа не несет вред, можно отладить ее в динамике. Ставим бряку (точку останова, breakpoint) на начало метода, смотрим в локальных переменных, добываем переменную value, после чего нам выведется сообщение с флагом.
Флаг:

Открываем DNSpy x86
Файл действительно очень небольшой и состоит из одного пользовательского события — Button_Click:
string value = new string(new char[] { this.Letters[5], this.Letters[14], this.Letters[13], this.Letters[25], this.Letters[24] }); if (this.TextBox1.Text.Equals(value)) { MessageBox.Show(new string(new char[] { this.Letters[5], this.Letters[11], this.Letters[0], this.Letters[6], this.Letters[26], this.Letters[8], this.Letters[28], this.Letters[11], this.Letters[14], this.Letters[21], this.Letters[4], this.Letters[28], this.Letters[5], this.Letters[14], this.Letters[13], this.Letters[25], this.Letters[24], this.Letters[27] })); }
Также в текущем классе объявлена строка:
public char[] Letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ{}_".ToCharArray();
Есть два варианта решения — в статике и динамике. Сперва решим статическим методом:
# text - текст метода >>> for i in range(len(letters)): text = text.replace(f"this.Letters[{i}]", letters[i]) >>> print(text) string value = new string(new char[] { F, O, N, Z, Y }); if (this.TextBox1.Text.Equals(value)) { MessageBox.Show(new string(new char[] { F, L, A, G, {, I, _, L, O, V, E, _, F, O, N, Z, Y, } })); }
Когда мы убедимся, что программа не несет вред, можно отладить ее в динамике. Ставим бряку (точку останова, breakpoint) на начало метода, смотрим в локальных переменных, добываем переменную value, после чего нам выведется сообщение с флагом.
Флаг:
FLAG{I_LOVE_FONZY}Just Another Conference
Easy, General Information
famous Cybersecurity conference runs by OWASP in different locations
Флаг
AppSec