handleAccess выдаёт доступ, не проверяя существование видео, а запись в
access привязана к аккаунту и переживает ротацию токенов. Значит можно
занять строки под будущие id постоянным аккаунтом, и забирать флаги даже
после того, как цель запатчит keygen.
- tiktak_preauth.py: логинится постоянным PERSIST_LOGIN, меряет скорость
роста id (у команд разброс 7..900/мин), занимает окно вперёд на N минут.
Не для фермы, запускать раз в 10-20 мин, пока цель не запатчила.
- tiktak_keygen_forge.py: тот же постоянный аккаунт вместо одноразового;
watch=200 без форжа = сработала закладка, собираем флаг и оттуда.
Проверено на 10.10.10.5: занял 184 будущих id, через минуту watch/60524 и
60527 отдали свежие флаги без токена в запросе.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Фиксированная глубина 3000 не работала на быстрых боксах: на 10.10.10.1
id растут >1000/мин, приватные ролики чекера ушли на 12000 вниз от top и
сплойт возвращался пустым.
Теперь сканируем блоками по 2000 сверху вниз до 14000 и выходим, как только
набрали 6 целей -- на медленных боксах это по-прежнему один блок.
Проверено: 4 флага с 10.10.10.1 (глубина 12042), 3 с 10.10.10.5
(глубина 1653), на 10.10.10.2 корректно определился патч.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Единственный рабочий вектор на данный момент: LFI закрыли уже все команды
(проверил .1/.4/.5 -- везде 404), а keygen разобрали далеко не все.
Токен считается только от video id: seed=(seed*17+42)%62 по алфавиту base62,
30 символов, ключа нет. Форжим -> POST /access пишет строку в access ->
haveAccess() пропускает легально -> /watch отдаёт description, /vtt субтитры.
Поиск целей: приватное видео выдаёт себя размытым превью. /feed показывает
лишь 50 последних, а id растут ~500/мин из-за чужого флуда, поэтому
чекерские ролики лежат на глубине в сотни-тысячи id. Сканируем 3000 id в
50 потоков; echo отдаёт статику только на GET (HEAD => 405), так что
пробуем GET с Range: bytes=0-0 -- один байт вместо всего PNG.
6 отказов /access подряд => команда запатчена, выходим рано.
Проверено вживую: 3 флага с 10.10.10.5, 1 с 10.10.10.1, на 10.10.10.4
корректно определился патч.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- tiktak_vtt_path_traversal.py: ../ в ?id=, подбирает рабочий шаблон
один раз и переиспользует на остальных ID.
- tiktak_vtt_auth_bypass.py: рассинхрон SQL/FS ('./7' => MySQL 0, файл
public/vtt/7.vtt), работает даже если запатчат только traversal.
- tiktak_private_preview_leak.py: резкое превью приватного видео,
OCR опционален, без pytesseract молча не печатает мусор в stdout.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Комбинированный сплойт: V1 SSTI->RCE через имя юзера *.html, V3 SSRF через
Origin, V4 прямой database :38002, V5 прямой content :38004, V2 захват
аккаунта перерегистрацией. Векторы независимы — патч одного не глушит остальные.
Энумерация жертв: комментарии к картинкам + `ls` через RCE.
V1 использует свежее имя юзера на каждый раунд: Flask вне debug не перечитывает
шаблоны, и после первого рендера Jinja отдаёт закэшированную версию.
Проверено на стенде: собирает все посаженные флаги.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NN8sHQuGbTBLGGkJyfxzXr