RuCTF 2013 Quals - random 200 & 300 writeup
RAND200 Delivery
Были разные идеи по поводу того, что представлено на схеме, но на самом деле это оказался штрихкод RM4SCC.
По описанию из википедии считываем текст, получается: SE11BDJB и контрольная сумма F (считаем - совпадает).
Гуглим SE11BD, находим Britain's Security Services (которое MI6). Последние две буквы это имя и фамилия получателя, коим оказывается James Bond.
RAND300 Little things
На первый взгляд кажется, что всё очевидно, ведь скрипт простой, всего лишь посимвольно проверяется строка длинной 40 символов, которую передали скрипту. Но вряд-ли за такую задачу дали бы 300 баллов. И действительно, флаг 7b5f563b913e0df171aa51cc55e7ca4ce0dc6ad8 не подходит.
Но если внимательно посмотреть на скрипт, то можно заметить одну описку в строке:
Поставлена лишняя ";", чем нарушена проверка символов под индексами 6 и 9. Вместо них можно поставить что угодно, и проверка всё равно вернёт true.
Соответственно генерируем все возможные варианты флагов (256 штук) и ставим брутиться (можно было через гугл). В итоге один из хешей ломается: semicolon.
Name the person that will receive this package:
|| | || || || | | || | | | | || |
||||||||||||||||||||||||||||||||||||||
| | || | | | ||| | | | ||| | ||
Были разные идеи по поводу того, что представлено на схеме, но на самом деле это оказался штрихкод RM4SCC.
По описанию из википедии считываем текст, получается: SE11BDJB и контрольная сумма F (считаем - совпадает).
Гуглим SE11BD, находим Britain's Security Services (которое MI6). Последние две буквы это имя и фамилия получателя, коим оказывается James Bond.
RAND300 Little things
Find the key
На первый взгляд кажется, что всё очевидно, ведь скрипт простой, всего лишь посимвольно проверяется строка длинной 40 символов, которую передали скрипту. Но вряд-ли за такую задачу дали бы 300 баллов. И действительно, флаг 7b5f563b913e0df171aa51cc55e7ca4ce0dc6ad8 не подходит.
Но если внимательно посмотреть на скрипт, то можно заметить одну описку в строке:
let a10 = check({h[6] as char == '3' && h[9] as char == '1';}.to_str());
Поставлена лишняя ";", чем нарушена проверка символов под индексами 6 и 9. Вместо них можно поставить что угодно, и проверка всё равно вернёт true.
Соответственно генерируем все возможные варианты флагов (256 штук) и ставим брутиться (можно было через гугл). В итоге один из хешей ломается: semicolon.