Stack Shellcode
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Stack shellcode - це техніка, що використовується в binary exploitation, де зловмисник записує shellcode в стек вразливої програми, а потім модифікує Instruction Pointer (IP) або Extended Instruction Pointer (EIP), щоб вказати на місце розташування цього shellcode, що призводить до його виконання. Це класичний метод, що використовується для отримання несанкціонованого доступу або виконання довільних команд на цільовій системі. Ось розбір процесу, включаючи простий приклад на C та як ви можете написати відповідний експлойт, використовуючи Python з pwntools.
Let's start with a simple example of a vulnerable C program:
Ця програма вразлива до переповнення буфера через використання функції gets()
.
Щоб скомпілювати цю програму, вимкнувши різні захисти (щоб змоделювати вразливе середовище), ви можете використати наступну команду:
-fno-stack-protector
: Вимикає захист стеку.
-z execstack
: Робить стек виконуваним, що необхідно для виконання shellcode, збереженого в стеці.
-no-pie
: Вимикає Position Independent Executable, що полегшує прогнозування адреси пам'яті, де буде розташований наш shellcode.
-m32
: Компілірує програму як 32-бітний виконуваний файл, що часто використовується для спрощення розробки експлойтів.
Ось як ви можете написати експлойт на Python, використовуючи pwntools для виконання атаки ret2shellcode:
Цей скрипт створює корисне навантаження, що складається з NOP слайду, shellcode, а потім перезаписує EIP адресою, що вказує на NOP слайд, забезпечуючи виконання shellcode.
NOP слайд (asm('nop')
) використовується для збільшення ймовірності того, що виконання "зсуватиметься" до нашого shellcode незалежно від точної адреси. Налаштуйте аргумент p32()
на початкову адресу вашого буфера плюс зсув, щоб потрапити в NOP слайд.
ASLR повинен бути вимкнений для того, щоб адреса була надійною під час виконання, інакше адреса, де буде зберігатися функція, не завжди буде однаковою, і вам знадобиться деякий leak, щоб зрозуміти, де завантажена функція win.
Stack Canaries також повинні бути вимкнені, інакше скомпрометована адреса повернення EIP ніколи не буде виконана.
NX захист стеку завадить виконанню shellcode всередині стеку, оскільки ця область не буде виконуваною.
64 біт, ASLR з leak адреси стеку, записати shellcode і перейти до нього
32 біт, ASLR з leak стеку, записати shellcode і перейти до нього
32 біт, ASLR з leak стеку, порівняння для запобігання виклику exit(), перезаписати змінну значенням і записати shellcode і перейти до нього
arm64, без ASLR, ROP гаджет для зроблення стеку виконуваним і переходу до shellcode в стеку
Вчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)