buffer overflow эксплойт не работает ASLR и NX как обойти для учебного CTF

Рейтинг: 48% · 15 голосов
Capture The Flag, реверс бинарных файлов, разработка эксплойтов, ассемблер, форензика, крэкми и задачи по информационной безопасности.
Ответить
Аватара пользователя
ivan21
Сообщения: 53
Зарегистрирован: 16 май 2026, 22:05

buffer overflow эксплойт не работает ASLR и NX как обойти для учебного CTF

Сообщение ivan21 »

Делаю задание по pwn на учебном CTF внутри универа. Бинарь под Linux x64, есть очевидное переполнение буфера (strcpy без проверки длины). Написал простой эксплойт с шеллкодом — не работает, segfault. Проверил: NX включён (стек невыполняемый), ASLR включён на системе. PIE у бинаря выключен. Как продвигаться дальше?
👍1 ❤️ 🔥2 😄 🤔
✔ Лучший ответ выбран автором и совпадает с автоматическим подбором — kingcnut
Для начала освой ret2plt / ret2libc — это проще чем полноценный ROP. Схема: переполняем буфер, перезаписываем return address адресом функции puts@plt, передаём ей аргументом адрес puts@got, она распечатает реальный адрес puts в libc. Из реального адреса вычисляешь базу libc (адрес puts минус puts_offset из libc), потом вызываешь system('/bin/sh') с известным теперь адресом. Весь этот процесс…
Перейти к ответу →
Аватара пользователя
ollies
Сообщения: 33
Зарегистрирован: 11 май 2026, 16:28

Re: buffer overflow эксплойт не работает ASLR и NX как обойти для учебного CTF

Сообщение ollies »

Раз PIE выключен — это уже большая удача, адреса самого бинаря фиксированы. ASLR рандомизирует только стек, кучу и библиотеки. Против NX стандартный ответ — ROP (Return-Oriented Programming): вместо шеллкода в стек кладёшь цепочку адресов гаджетов из самого бинаря или из libc. Раз PIE нет — гаджеты из бинаря всегда на одних адресах.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
kingcnut
Сообщения: 33
Зарегистрирован: 12 май 2026, 07:12

Re: buffer overflow эксплойт не работает ASLR и NX как обойти для учебного CTF

Сообщение kingcnut »

✔ Лучший ответ — выбран автором и совпадает с авто-подбором
Для начала освой ret2plt / ret2libc — это проще чем полноценный ROP. Схема: переполняем буфер, перезаписываем return address адресом функции puts@plt, передаём ей аргументом адрес puts@got, она распечатает реальный адрес puts в libc. Из реального адреса вычисляешь базу libc (адрес puts минус puts_offset из libc), потом вызываешь system('/bin/sh') с известным теперь адресом. Весь этот процесс автоматизируется через pwntools буквально в 40 строк Python.
👍1 ❤️ 🔥1 😄 🤔1
Аватара пользователя
grumpylurker
Сообщения: 63
Зарегистрирован: 15 май 2026, 01:41

Re: buffer overflow эксплойт не работает ASLR и NX как обойти для учебного CTF

Сообщение grumpylurker »

Конкретно по инструментам: ROPgadget или ropper для поиска гаджетов (`ROPgadget --binary ./vuln --rop`), pwntools для написания эксплойта. Обязательно используй `pwntools` с `context.binary = ELF('./vuln')` — он автоматически подтянет архитектуру и размеры. Для отладки эксплойта незаменим `gdb` с плагином pwndbg или peda — там есть команда `cyclic` для точного определения оффсета до RIP.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
torch22
Сообщения: 43
Зарегистрирован: 11 май 2026, 20:50

Re: buffer overflow эксплойт не работает ASLR и NX как обойти для учебного CTF

Сообщение torch22 »

Небольшая деталь которую все забывают: при ret2libc на x64 перед вызовом system нужен гаджет `ret` (просто ret без ничего) для выравнивания стека по 16 байт — иначе падает в movaps внутри libc. Потерял на этом часа три когда первый раз делал.
👍6 ❤️2 🔥3 😄 🤔1
Аватара пользователя
k8s2000
Сообщения: 85
Зарегистрирован: 11 май 2026, 00:27

Re: buffer overflow эксплойт не работает ASLR и NX как обойти для учебного CTF

Сообщение k8s2000 »

Если хочешь понять тему глубже а не просто решить таск — прочти серию статей 'ROP Emporium' (ropemporium.com), там 8 задач специально спроектированных чтобы объяснить ROP от простого к сложному. Каждая задача вводит один новый концепт. После них pwn-таски начального уровня на CTFtime решаются на автомате.
👍1 ❤️1 🔥1 😄3 🤔2
Аватара пользователя
tommee
Сообщения: 64
Зарегистрирован: 11 май 2026, 02:37

Re: buffer overflow эксплойт не работает ASLR и NX как обойти для учебного CTF

Сообщение tommee »

После решения обязательно напиши мини-райтап хотя бы для себя. Через месяц забудешь детали, а так будет чем освежить память. И другим участникам форума полезно — тема популярная, вопросов по ret2libc здесь регулярно задают.
👍1 ❤️ 🔥2 😄3 🤔1
Аватара пользователя
pandas4
Сообщения: 36
Зарегистрирован: 15 май 2026, 08:41

Re: buffer overflow эксплойт не работает ASLR и NX как обойти для учебного CTF

Сообщение pandas4 »

@torch22, про выравнивание стека по 16 байт — это вообще одна из самых классических ловушек при первом ret2libc на x64. Добавлю что самый простой способ найти нужный ret-гаджет — в самом бинаре через ROPgadget: `ROPgadget --binary ./vuln --rop | grep 'ret$'`. Там обычно есть голый ret по низкому адресу, вставляешь его перед адресом system и movaps перестаёт падать.
👍 ❤️ 🔥1 😄 🤔
Аватара пользователя
k8s_master
Сообщения: 44
Зарегистрирован: 11 май 2026, 19:55

Re: buffer overflow эксплойт не работает ASLR и NX как обойти для учебного CTF

Сообщение k8s_master »

Для учебного CTF ещё полезно с самого начала отключить ASLR локально на время отладки (`echo 0 | sudo tee /proc/sys/kernel/randomize_va_space`), чтобы сначала убедиться что эксплойт работает с фиксированными адресами. Потом включить обратно и добавить leaking-этап. Иначе одновременно отлаживать и структуру ROP-цепочки и технику утечки адресов libc — слишком много переменных разом, легко запутаться где именно ломается.
👍 ❤️ 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «CTF и реверс-инжиниринг»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость