Exploiting / PWN
Exploiting или Pwn ("бинарная эксплуатация", "эксплойтинг", "пвн") — это категория задач, в которых, как правило, нужно искать и эксплуатировать уязвимости в скомпилированных приложениях. Чаще всего это уязвимости повреждения памяти (memory corruption).
Эта категория в каком-то смысле противопоставляется категории Web, в которой обычно стоит задача взломать приложение на языке высокого уровня (типа PHP), т.е. всё происходит на уровне интерпретации скрипта, а не на уровне физической памяти. Однако, порой в категорию Pwn включают и приложения на скриптовых языках. Это может быть, к примеру, обход песочницы (jail) на языке Python. Песочницей называют ограниченную среду, в которой разрешены только определённые команды. Целью решения таска обычно является обойти это ограничение и прочитать какую-то конфиденциальную информацию (флаг).
Надо отметить, что в последние годы тематика CTF-соревнований заметно укоренилась именно в области пвна. На топовых соревнованиях задачи зачастую очень сложные, и их решают известные профессионалы, исследователи, разработчики кибероружия. Например, одним из сильнейших пвнеров (и цтферов вообще) является George Hotz - Wikipedia | End Way - Форум программирования и сливов различных скриптов, активно участвовавший в цтфах в 2013-2014 годах. Сильнейшей командой является команда PPP (Plaid Parliament of Pwning) родом из университета CMU, которая, как нетрудно догадаться, тоже специализируется в пвне.
Ближе к делу.
Наиболее известным и распространённым случаем повреждения памяти является переполнение буфера. Если объяснить в двух словах, переполнение буфера возникает тогда, когда приложение принимает на вход строку и записывает её в некоторую выделенную область памяти (буфер), недостаточно проверяя её длину.
Таким образом, хакер может выйти за границы буфера и переписать какие-то иные участки памяти, в которых могут быть важные данные. Классический способ эксплуатации — это перетирание адреса возврата (return address). Это адрес памяти, на который программа "перепрыгнет" после завершения выполнения текущей функции.
Суть эксплойта в том, что хакер записывает в буфер любой код, который он хочет выполнить, далее выходит за границу буфера и меняет адрес возврата на адрес буфера. Таким образом, после выхода из текущей функции программа перепрыгнет на буфер, и выполнится код, который хакер туда записал.
Обычно в качестве условия задачи даётся бинарник (скомпилированный исполняемый файл программы) и адрес (хост и порт) сервера, на котором этот бинарник висит. Иногда даётся и исходный код приложения. Участнику нужно проанализировать приложение (дизассемблировать, декомпилировать или читать исходный код) и разработать эксплойт, т.е. программу, которая "заставляет" это уязвимое приложение выполнить произвольный код (вызвать шелл). Далее нужно при помощи этого эксплойта заставить сервер организаторов выдать флаг.
В простых случаях сам эксплойт может состоять всего из нескольких байт. Это может быть некоторое количество произвольных байтов для забивания буфера, а затем адрес какой-то функции, которая выдаёт флаг. Если этот адрес перезапишет адрес возврата, программа отдаст флаг.
Иногда даже для относительно непростых задач эксплойт пишется в одну строчку, но найти саму уязвимость и придумать цепочку вызовов для выполнения нужного действия не так легко.
Есть книга Д. Эриксона "Хакинг. Искусство эксплойта" в русском переводе. В ней очень доступно описано введение в эксплуатацию уязвимостей повреждения памяти. Также затронута сетевая безопасность и криптоанализ.
Простые примеры для понимания:
КМБ (Курс молодого бойца) CTF(с)
Exploiting или Pwn ("бинарная эксплуатация", "эксплойтинг", "пвн") — это категория задач, в которых, как правило, нужно искать и эксплуатировать уязвимости в скомпилированных приложениях. Чаще всего это уязвимости повреждения памяти (memory corruption).
Эта категория в каком-то смысле противопоставляется категории Web, в которой обычно стоит задача взломать приложение на языке высокого уровня (типа PHP), т.е. всё происходит на уровне интерпретации скрипта, а не на уровне физической памяти. Однако, порой в категорию Pwn включают и приложения на скриптовых языках. Это может быть, к примеру, обход песочницы (jail) на языке Python. Песочницей называют ограниченную среду, в которой разрешены только определённые команды. Целью решения таска обычно является обойти это ограничение и прочитать какую-то конфиденциальную информацию (флаг).
Надо отметить, что в последние годы тематика CTF-соревнований заметно укоренилась именно в области пвна. На топовых соревнованиях задачи зачастую очень сложные, и их решают известные профессионалы, исследователи, разработчики кибероружия. Например, одним из сильнейших пвнеров (и цтферов вообще) является George Hotz - Wikipedia | End Way - Форум программирования и сливов различных скриптов, активно участвовавший в цтфах в 2013-2014 годах. Сильнейшей командой является команда PPP (Plaid Parliament of Pwning) родом из университета CMU, которая, как нетрудно догадаться, тоже специализируется в пвне.
Ближе к делу.
Наиболее известным и распространённым случаем повреждения памяти является переполнение буфера. Если объяснить в двух словах, переполнение буфера возникает тогда, когда приложение принимает на вход строку и записывает её в некоторую выделенную область памяти (буфер), недостаточно проверяя её длину.
Таким образом, хакер может выйти за границы буфера и переписать какие-то иные участки памяти, в которых могут быть важные данные. Классический способ эксплуатации — это перетирание адреса возврата (return address). Это адрес памяти, на который программа "перепрыгнет" после завершения выполнения текущей функции.
Суть эксплойта в том, что хакер записывает в буфер любой код, который он хочет выполнить, далее выходит за границу буфера и меняет адрес возврата на адрес буфера. Таким образом, после выхода из текущей функции программа перепрыгнет на буфер, и выполнится код, который хакер туда записал.
Обычно в качестве условия задачи даётся бинарник (скомпилированный исполняемый файл программы) и адрес (хост и порт) сервера, на котором этот бинарник висит. Иногда даётся и исходный код приложения. Участнику нужно проанализировать приложение (дизассемблировать, декомпилировать или читать исходный код) и разработать эксплойт, т.е. программу, которая "заставляет" это уязвимое приложение выполнить произвольный код (вызвать шелл). Далее нужно при помощи этого эксплойта заставить сервер организаторов выдать флаг.
В простых случаях сам эксплойт может состоять всего из нескольких байт. Это может быть некоторое количество произвольных байтов для забивания буфера, а затем адрес какой-то функции, которая выдаёт флаг. Если этот адрес перезапишет адрес возврата, программа отдаст флаг.
Иногда даже для относительно непростых задач эксплойт пишется в одну строчку, но найти саму уязвимость и придумать цепочку вызовов для выполнения нужного действия не так легко.
Есть книга Д. Эриксона "Хакинг. Искусство эксплойта" в русском переводе. В ней очень доступно описано введение в эксплуатацию уязвимостей повреждения памяти. Также затронута сетевая безопасность и криптоанализ.
Простые примеры для понимания:
Хорошие ресурсы для тренировки навыков этой категории:
- https://ru.wikipedia.org/wiki/Переполнение_буфера
- Buffer Overflow Attack Explained with a C Program Example | End Way - Форум программирования и сливов различных скриптов
- Buffer Overflow Attack | OWASP Foundation | End Way - Форум программирования и сливов различных скриптов
- https://www.eecis.udel.edu/~bmiller/cis459/2007s/read..
- CAS - Central Authentication Service | End Way - Форум программирования и сливов различных скриптов
- Linux (x86) Exploit Development Series | End Way - Форум программирования и сливов различных скриптов
- http://io.smashthestack.org/
- Exploit Education :: Andrew Griffiths' Exploit Education | End Way - Форум программирования и сливов различных скриптов
- OverTheWire: Wargames | End Way - Форум программирования и сливов различных скриптов
- ROP Emporium | End Way - Форум программирования и сливов различных скриптов
- GitHub - xairy/easy-linux-pwn: A set of Linux binary exploitation tasks for beginners on various architectures | End Way - Форум программирования и сливов различных скриптов
- GitHub - shellphish/how2heap: A repository for learning various heap exploitation techniques. | End Way - Форум программирования и сливов различных скриптов
- Challenges/App - System [Root Me : Hacking and Information Security learning platform] | End Way - Форум программирования и сливов различных скриптов
- GitHub - atxsinn3r/VulnCases: Vulnerability examples. | End Way - Форум программирования и сливов различных скриптов
- Pwnable.tw | End Way - Форум программирования и сливов различных скриптов
- https://pwnable.kr/
- https://pwnable.xyz/
КМБ (Курс молодого бойца) CTF(с)