ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.xyz/forumdisplay.php?f=112)
-   -   Backdoor CTF - [Write-Ups], часть 2 (https://forum.antichat.xyz/showthread.php?t=1642815)

Kevgen 25.12.2023 16:55

Всем доброго времени суток!
Сегодня мы разберем ещё 2 таска с BackdoorCTF.
Hide_and_Seek
Нам дается аудио файл. После прослушивания первых 5 секунд я понял, что там декодирование частоты 145.800 МГц с помощью MMSSTV (разбор таска от Antichat.games с таким же принципом).
Открыл, декодировал, и тут выявился первый подвох:

https://forum.antichat.xyz/attachmen...8405c29c35.png

Это была только вторая часть флага! И судя по ней, существовали как минимум ещё 2 части: первая и третья.
Огорчившись от того, что всё оказалось не так просто как хотелось бы, я начал искать недостающие части.

Первая часть флага была найдена в спектограмме звука:

https://forum.antichat.xyz/attachmen...40067e612a.png

Оставалось найти 3 часть.
Я полез смотреть метаданные - пусто. Смотрел в hex-редакторе - пусто.
И до меня дошло. Третья (и последняя) часть флага была спрятана с помощью утилиты DeepSound:

https://forum.antichat.xyz/attachmen...72dbbf973b.png

Оставалось только склеить эти 3 части.
Флаг:
Код:

flag{aud105_4r3_c00l_4r5n't_th3y?}
Beginner/Not So Guessy
Нам даны 3 файла: игра версии 1970 года, обновленная игра 2020 года и логи.
Задача: найти победную комбинацию в игре "камень-ножницы-бумага" и обыграть бота.
Взаимодействие происходит по netcat, но так как ctf прошёл, то подключиться к ним не получиться.

Логи тут играют ключевую роль, ведь известно, что Secret_Number не был изменен, и дана победная комбинация для игры 1970 года.
Логика кода в двух вариантах игры различается тем, что в первой берется остаток от деления на 2 (игра орёл-решка), а во второй игре - от деления на 3 (камень-ножницы-бумага). Числу остатка соответственно присвоены
Код:

{1:'Heads', 0:'Tails'}
и
Код:

{2:'Scissors', 1:'Paper', 0:'Rock'}
соответственно.
Вектор решения примерно следующий: с помощью данной нам комбинации старой игры находим Secret_Number и используем его для нахождения победной комбинации для новой игры.

Код для нахождения Secret_Number предельно простой:

Python:


Код:

Secret_Number
=
0
win_sequence
=
[
'Heads'
,
'Tails'
,
'Heads'
,
'Tails'
,
'Tails'
,
'Heads'
,
'Tails'
,
'Heads'
,
'Heads'
,
'Heads'
,
'Tails'
,
'Heads'
,
'Tails'
,
'Heads'
,
'Tails'
,
'Heads'
,
'Heads'
,
'Tails'
,
'Heads'
,
'Heads'
,
'Heads'
,
'Heads'
,
'Tails'
,
'Heads'
,
'Tails'
,
'Heads'
,
'Tails'
,
'Heads'
,
'Heads'
,
'Heads'
]
win_sequence
.
reverse
(
)
for
outcome
in
win_sequence
:
if
outcome
==
'Heads'
:
Secret_Number
=
Secret_Number
*
2
+
1
else
:
Secret_Number
=
Secret_Number
*
2
print
(
"The secret number is:"
,
Secret_Number
)

Получаем
Код:

The secret number is: 985508773
и вставляем в изменённый код новой игры:

Python:


Код:

Secret_Number
=
985508773
Flag
=
"REDACTED"
AI
=
{
2
:
'Scissors'
,
1
:
'Paper'
,
0
:
'Rock'
}
win
=
{
'Rock'
:
'Paper'
,
'Paper'
:
'Scissors'
,
'Scissors'
:
'Rock'
}
draws
=
0
wins
=
0
win_combinations
=
[
]
while
Secret_Number
:
hand
=
AI
[
Secret_Number
%
3
]
Secret_Number
//=
3
win_combinations
.
append
(
win
[
hand
]
)
guess
=
win
[
hand
]
if
guess
==
hand
:
print
(
"Ah, Seems like its a draw."
)
draws
+=
1
if
draws
==
2
:
print
(
"The AI now knows your every move. You will never win."
)
exit
(
)
elif
guess
==
win
[
hand
]
:
wins
+=
1
if
Secret_Number
==
0
:
print
(
"Fine. You got me. It wasn't an AI it was just a simple Python Code."
)
print
(
'Here is your Flag. Take it!'
)
print
(
win_combinations
)

Получаем выигрышную комбинацию и вводим поочередно в netcat.
Флаг:
Код:

flag{M0d_0n3_1s_4lw4ys_z3r0}
Спасибо за прочтение!


Время: 02:51