writeup_sploit.py
671 B
#pwn #kasperskyctf2025
Kaspersky{CTF} - flag-what-where, 50 points от @tonysdx
💡 Идея:
Бинарник считывает флаг на
После этого у нас есть 3 попытки прочитать произвольные байты памяти по заданному адресу, после чего программа завершается.
👹 Уязвимость:
Функция
Поэтому часть флага можно найти в heap-памяти.
Почему только часть, а не весь флаг?
Потому что
Кроме того, бинарник собран без PIE, так что вычислить необходимые смещения не представляет труда.
💉Эксплуатация:
1. Помещаем
2. Используем команду
3. Находим участок heap, где лежит часть флага, и вычисляем смещение от начала сегмента heap.
4. Получаем leak libc через
📝 Заметки:
Сначала я думал, что придётся искать первую часть флага, которая затирается, где-то еще. Но организаторы предусмотрели это: весь флаг оказался доступен в heap.
Я просто вычел 16 из изначально вычисленного смещения и получил полный флаг.
💬 Канал & Чат | 📺 RUTUBE | 📺 YouTube
Kaspersky{CTF} - flag-what-where, 50 points от @tonysdx
Бинарник считывает флаг на
stack через функцию fgets, а затем затирает его с помощью memset. После этого у нас есть 3 попытки прочитать произвольные байты памяти по заданному адресу, после чего программа завершается.
👹 Уязвимость:
Функция
fgets, как и многие другие функции из glibc, при чтении строки из stdin использует буферы на heap. Поэтому часть флага можно найти в heap-памяти.
Почему только часть, а не весь флаг?
Потому что
fgets освобождает буфер после завершения работы, и первые N байт затираются служебными данными. Кроме того, бинарник собран без PIE, так что вычислить необходимые смещения не представляет труда.
💉Эксплуатация:
1. Помещаем
cyclic(128) в файл flag.txt, патчим бинарник на использование тех же библиотек, что и в docker-контейнере, и запускаем в gdb. 2. Используем команду
search -t bytes "aaaa". 3. Находим участок heap, где лежит часть флага, и вычисляем смещение от начала сегмента heap.
4. Получаем leak libc через
GOT-table, leak heap из main_arena, и читаем данные по рассчитанному на шаге 3 смещению. Сначала я думал, что придётся искать первую часть флага, которая затирается, где-то еще. Но организаторы предусмотрели это: весь флаг оказался доступен в heap.
Я просто вычел 16 из изначально вычисленного смещения и получил полный флаг.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11 2🔥1
writeup_sploit.py
771 B
#pwn #kasperskyctf2025
Kaspersky{CTF} - Translator, 50 points от @tonysdx
💡 Идея задачи:
Бинарник читает 16 байт из
При этом у нас есть всего 10 попыток для ввода правильного ответа.
👹 Уязвимость:
1. В функции
2. Бинарник никогда не закрывает файловые дескрипторы, поэтому их можно открывать сколько угодно.
3. В функции
💉 Эксплуатация:
1. Сначала открываем 255 файловых дескрипторов, используя первые две уязвимости.
2. Когда бинарник откроет 256-й дескриптор, downcast превратит его индекс в
3. Теперь бинарник будет вычислять
4. Достаточно передать константную строку (например,
💬 Канал & Чат | 📺 RUTUBE | 📺 YouTube
Kaspersky{CTF} - Translator, 50 points от @tonysdx
Бинарник читает 16 байт из
/dev/random, вычисляет их хэш с помощью SHA512, затем XOR'ит байты флага с этим хэшем, выводит результат и предлагает угадать флаг. При этом у нас есть всего 10 попыток для ввода правильного ответа.
👹 Уязвимость:
1. В функции
main есть off-by-one уязвимость в scanf, что позволяет перезаписать счётчик попыток нулевым байтом и тем самым получить неограниченное количество попыток. 2. Бинарник никогда не закрывает файловые дескрипторы, поэтому их можно открывать сколько угодно.
3. В функции
read_file индекс файлового дескриптора приводится к типу int8. 💉 Эксплуатация:
1. Сначала открываем 255 файловых дескрипторов, используя первые две уязвимости.
2. Когда бинарник откроет 256-й дескриптор, downcast превратит его индекс в
0, и чтение произойдёт не из /dev/random, а из stdin. 3. Теперь бинарник будет вычислять
SHA512 не от случайных байтов, а от нашего ввода. 4. Достаточно передать константную строку (например,
b"A" * 16), вычислить её SHA512-хэш (или просто вынуть его из отладчика), а затем сделать XOR байтов вывода программы и байтов известного хэша — и мы получаем флаг.Please open Telegram to view this post
VIEW IN TELEGRAM
public-rock-n-rollback.tar.gz
953.6 KB
#pwn
rock-n-rollback 🪓
Теперь нет необходимости запоминать указатели и вызывать free!
Автор: @s41nt0l3xus
После получения шелла, помимо флага, можно забрать с сервера и intended решение в виде скрипта.
Зеркало тасков
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
#таск@writeup_ctf
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
rock-n-rollback 🪓
Теперь нет необходимости запоминать указатели и вызывать free!
45.12.114.80:32002
Автор: @s41nt0l3xus
После получения шелла, помимо флага, можно забрать с сервера и intended решение в виде скрипта.
Зеркало тасков
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
#таск@writeup_ctf
Please open Telegram to view this post
VIEW IN TELEGRAM
public-undefined-pointer.tar.gz
952 KB
#pwn
undefined-pointer🧑💻
Один дед на курсах программирования всегда подчеркивал важность инициализации переменных при их объявлении. Думаю, ничего страшного не произойдет, если я сделаю это позже.
Автор: @s41nt0l3xus
После получения шелла, помимо флага, можно забрать с сервера и intended решение в виде скрипта.
Зеркало тасков
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
#таск@writeup_ctf
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
undefined-pointer🧑💻
Один дед на курсах программирования всегда подчеркивал важность инициализации переменных при их объявлении. Думаю, ничего страшного не произойдет, если я сделаю это позже.
45.12.114.80:32000
Автор: @s41nt0l3xus
После получения шелла, помимо флага, можно забрать с сервера и intended решение в виде скрипта.
Зеркало тасков
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
#таск@writeup_ctf
Please open Telegram to view this post
VIEW IN TELEGRAM
Подборка райтапов с прошедшего AlfaCTF:
Задания кстати все еще доступны
https://alfactf.ru/tasks
🛡 Защита от спама
(https://t.iss.one/writeup_ctf/784)
#Easy #Infra #Web
🎶 Звуки ностальгии
(https://t.iss.one/writeup_ctf/783)
#Easy #Misc #OSINT
🌊 Цунами дедлайнов
(https://t.iss.one/writeup_ctf/793)
#Easy #Web
🌈🎛 Кислотный ретровейв
(https://t.iss.one/writeup_ctf/786)
#Easy #Web
🌴💰 Пальма с биткоинами
(https://t.iss.one/writeup_ctf/785)
#Easy #Web #JS
👨💻🏖 Разработчик на пляже
(https://t.iss.one/writeup_ctf/790)
#Medium #Infra #Dev #Pentest
🎵🌀 Вихрь рик-ролла
(https://t.iss.one/writeup_ctf/789)
#Medium #Web #Logic
🐺🌊 Шакализация волны
(https://t.iss.one/writeup_ctf/788)
#Medium #Web #OAuth #Client
📹🚁 Десант блогеров
(https://t.iss.one/writeup_ctf/787)
#Medium #Web #Logic
🌇🛠 Фиксы в лучах заката
(https://t.iss.one/writeup_ctf/792)
#Hard #Forensics #Linux #Infra #LPE
🥒😈 Дикий огурец
(https://t.iss.one/writeup_ctf/791)
#Hard #Pwn #Python
🏍⚡️ Непослушный мотоциклист
(https://t.iss.one/writeup_ctf/795)
#Hard #Coding #Reverse #Network
🧱🔙 Возвращение стены
(https://t.iss.one/writeup_ctf/794)
#Hard #Web #Client
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
🛡 Защита от спама
(https://t.iss.one/writeup_ctf/784)
#Easy #Infra #Web
🎶 Звуки ностальгии
(https://t.iss.one/writeup_ctf/783)
#Easy #Misc #OSINT
🌊 Цунами дедлайнов
(https://t.iss.one/writeup_ctf/793)
#Easy #Web
🌈🎛 Кислотный ретровейв
(https://t.iss.one/writeup_ctf/786)
#Easy #Web
🌴💰 Пальма с биткоинами
(https://t.iss.one/writeup_ctf/785)
#Easy #Web #JS
👨💻🏖 Разработчик на пляже
(https://t.iss.one/writeup_ctf/790)
#Medium #Infra #Dev #Pentest
🎵🌀 Вихрь рик-ролла
(https://t.iss.one/writeup_ctf/789)
#Medium #Web #Logic
🐺🌊 Шакализация волны
(https://t.iss.one/writeup_ctf/788)
#Medium #Web #OAuth #Client
📹🚁 Десант блогеров
(https://t.iss.one/writeup_ctf/787)
#Medium #Web #Logic
🌇🛠 Фиксы в лучах заката
(https://t.iss.one/writeup_ctf/792)
#Hard #Forensics #Linux #Infra #LPE
🥒😈 Дикий огурец
(https://t.iss.one/writeup_ctf/791)
#Hard #Pwn #Python
🏍⚡️ Непослушный мотоциклист
(https://t.iss.one/writeup_ctf/795)
#Hard #Coding #Reverse #Network
🧱🔙 Возвращение стены
(https://t.iss.one/writeup_ctf/794)
#Hard #Web #Client
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤3 3