Exploiting / PWN — обзор категории бинарной эксплуатации
Exploiting (или PWN) — это направление, в котором необходимо искать и использовать уязвимости в скомпилированных приложениях. Основной тип уязвимостей — повреждение памяти.
В отличие от задач Web-направления, здесь речь идёт о взаимодействии с низкоуровневыми механизмами памяти, а не с интерпретируемым кодом. Однако в категории PWN иногда присутствуют задачи на языках высокого уровня (например, обход sandbox на Python).
Цель задач PWN
Достичь выполнения произвольного кода в уязвимом приложении. Как правило, это необходимо для получения флага.
Обычно даётся
– бинарный файл программы
– хост и порт сервера, где он запущен
– исходный код (иногда)
Задача участника
– изучить поведение программы
– найти уязвимость
– написать эксплойт
– заставить сервер выдать флаг
Пример: переполнение буфера
1. Программа принимает строку - помещает в буфер
2. Не проверяет длину
3. Удалось выйти за границу буфера
4. Происходит перезапись адреса возврата
5. Управление передаётся на произвольный код
Это базовый пример эксплуатации типа stack buffer overflow.
Полезные материалы
Теория:
– Wikipedia: переполнение буфера
– GeekStuff: Buffer Overflow
– Stack Smashing PDF
– D. Эриксон: Хакинг. Искусство эксплуатации (перевод)
Практика:
– Exploit Education
– OverTheWire
– ROP Emporium
– Pwnable.tw
– Easy Linux Pwn by xairy
– Shellphish: how2heap
Exploiting (или PWN) — это направление, в котором необходимо искать и использовать уязвимости в скомпилированных приложениях. Основной тип уязвимостей — повреждение памяти.
В отличие от задач Web-направления, здесь речь идёт о взаимодействии с низкоуровневыми механизмами памяти, а не с интерпретируемым кодом. Однако в категории PWN иногда присутствуют задачи на языках высокого уровня (например, обход sandbox на Python).
Цель задач PWN
Достичь выполнения произвольного кода в уязвимом приложении. Как правило, это необходимо для получения флага.
Обычно даётся
– бинарный файл программы
– хост и порт сервера, где он запущен
– исходный код (иногда)
Задача участника
– изучить поведение программы
– найти уязвимость
– написать эксплойт
– заставить сервер выдать флаг
Пример: переполнение буфера
1. Программа принимает строку - помещает в буфер
2. Не проверяет длину
3. Удалось выйти за границу буфера
4. Происходит перезапись адреса возврата
5. Управление передаётся на произвольный код
Это базовый пример эксплуатации типа stack buffer overflow.
Полезные материалы
Теория:
– Wikipedia: переполнение буфера
– GeekStuff: Buffer Overflow
– Stack Smashing PDF
– D. Эриксон: Хакинг. Искусство эксплуатации (перевод)
Практика:
– Exploit Education
– OverTheWire
– ROP Emporium
– Pwnable.tw
– Easy Linux Pwn by xairy
– Shellphish: how2heap