TGViewer
InfoSec VK Hub InfoSec VK Hub @vk_security · 3.11K subscribers
Post #322 2.08K
Новогодний CTF: подводим итоги

Привет всем, кто уже влился в рабочий ритм! ✨

Спасибо каждому, кто нашёл время на каникулах, чтобы размять мозги в нашем праздничном CTF!

Было невероятно круто следить за вашей активностью и азартом. Поздравляем первую пятёрку лидеров с лучшими результатами! 👏 Сегодня на вашу почту, указанную при регистрации, придёт подарочный промокод на бонусы от VK Cloud.

🏆 Топ-5 героев нашего CTF:

1 место: Azimoff
2 место: yghjgkhnlm
3 место: Bestra_KXTI
4 место: Kolkata
5 место: barungam

А теперь — к разборам задачек! 🔹🔹

Persik Arcade Writeup
category: web, points: 100
Беги, прыгай, не умирай (желательно) и набери ровно 1337 очков.

Игра полностью реализована на стороне клиента в game.js. Сервер проверяет корректность nonce, соответствие mac = f(score, nonce) и выдает флаг, если score == 1337. После того как Персик споткнется - выполняется отправка результата submitWithRenew(score):
Json
{
  "score": <score>,
  "nonce": <nonce>,
  "mac": <mac>
}

, где nonce берётся с /api/challenge при старте игры, затем используется для подписи результата, mac считается через window.wasmComputeMac(score, nonce) => клиент полностью контролирует score, nonce и mac.

Для решения нужно:
1. Получить nonce
2. Посчитать mac
3. Отправить score = 1337 с посчитанными ранее mac и nonce
4. Получить флаг без игры

выполним в консоли браузера:
Js
fetch('/api/challenge', { cache: 'no-store' })
  .then(r => r.json())
  .then(c => {
    const score = 1337;
    const nonce = Number(c.nonce) >>> 0;
    const mac = window.wasmComputeMac(score >>> 0, nonce) >>> 0;
    return fetch('/api/submit_score', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ score, nonce, mac })
    });
  })
  .then(r => r.json())
  .then(console.log);

и получим флаг:
{ok: true, flag: 'vkctf{4a150e818be2a45e0c3f8c7e1cc98061}'}

Задачу также можно решить через breakpoints в Debugger (Developer Tools), изменив значение переменной score.

В следующих постах — описание новых задач!
  • ❤ 8
  • 👏 2
  • 🎉 2
  • ⚡ 2
  • ✍ 1
  • 🔥 1
More from @vk_security
  1. Sep 18, 2026Ну что там с подкастом «Спасибо за репорт»? 👀 Есть новости. Даже несколько. Новый выпуск…
  2. Sep 17, 2026Петербург, снова к вам ⚡️⚡️ Год назад впервые привезли наш митап в северную столицу— говор…
  3. Sep 9, 2026⚡MAX теперь удобнее исследовать через Burp Suite Подготовили плагин для Burp Suite, которы…
  4. Aug 31, 2026⚡️Есть планы на 30 сентября? До ZeroNights остался месяц — хороший повод вспомнить, как эт…
  5. Aug 28, 2026Новый выпуск подкаста «Спасибо за репорт» уже в VK Видео! В выпуске обсудили: ⚡ зачем багх…
  6. Aug 27, 2026🎙 Уже завтра — новый выпуск подкаста «Спасибо за репорт» В гостях — freeman. Поговорим о…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →