Ret2Shellcode
Базова інформація
Ret2shellcode - це техніка, яка використовується в бінарному експлуатації, де атакуючий записує shellcode в стек вразливої програми, а потім модифікує Вказівник Інструкції (IP) або Розширений Вказівник Інструкції (EIP), щоб вказувати на місце цього shellcode, що призводить до його виконання. Це класичний метод, який використовується для незаконного доступу або виконання довільних команд на цільовій системі. Ось розбір процесу, включаючи простий приклад на мові C та як ви можете написати відповідний експлойт, використовуючи Python з pwntools.
Приклад на мові C: Вразлива програма
Давайте розпочнемо з простого прикладу вразливої програми на мові C:
Ця програма має уразливість на переповнення буфера через використання функції gets()
.
Компіляція
Для компіляції цієї програми з вимкненням різних захистів (для імітації вразливого середовища), ви можете використати наступну команду:
-fno-stack-protector
: Вимикає захист стеку.-z execstack
: Робить стек виконавчим, що необхідно для виконання shellcode, збереженого в стеці.-no-pie
: Вимикає позиційно-незалежний виконуваний файл, що полегшує передбачення адреси пам'яті, де буде розташований наш shellcode.-m32
: Компілює програму як 32-бітний виконуваний файл, часто використовується для спрощення розробки експлойтів.
Експлойт на Python з використанням Pwntools
Ось як ви можете написати експлойт на Python, використовуючи pwntools, для виконання атаки ret2shellcode:
Цей скрипт створює полезне навантаження, що складається з NOP слайду, shellcode, а потім перезаписує EIP адресою, що вказує на NOP слайд, забезпечуючи виконання shellcode.
NOP slide (asm('nop')
) використовується для збільшення ймовірності того, що виконання "слайдуватиме" у наш shellcode незалежно від точної адреси. Налаштуйте аргумент p32()
на початкову адресу вашого буфера плюс зміщення, щоб потрапити на NOP слайд.
Захисти
ASLR повинен бути вимкнений для того, щоб адреса була надійною під час кожного виконання, або адреса, де буде збережена функція, не буде завжди однаковою, і вам знадобиться якийсь витік, щоб з'ясувати, де завантажена функція перемоги.
Stack Canaries також повинні бути вимкнені, інакше компрометована адреса повернення EIP ніколи не буде виконана.
NX захист стеку перешкоджатиме виконанню shellcode всередині стеку, оскільки ця область не буде виконуваною.
Інші Приклади
Last updated