🛡️
Hacking para Juniors - [CPPJ]
Comprar cursoYouTubeTwitterLinkedIn
  • La Biblia del Hacker
    • ADVERTENCIA
    • Aprende GRATIS con El Curso De Junior a Senior en Hacking
    • Conoce tu Academia
    • Aprende con nuestro curso
    • Conoce a tu instructor
  • Fundamentos de la ciberseguridad ofensiva
    • ¿Que es el Ethical Hacking?
      • Tipos de Hackers
        • APTs (Advanced Persistent Threats)
    • ¿Que es el pentesting?
      • Tipos de Caja en Pentesting
      • Tipos de tecnologia
      • Etapas de un pentest
        • Escalacion de privilegios
    • ¿Qué es un CVE?
    • ¿Que es un escaneo de vulnerabilidades?
    • ¿Que es un Red Team?
      • Command and Control
    • ¿Que es la ingenieria social?
      • Kevin Mitnick
      • Libros Recomendados
    • El papel de los Juniors y la IA
  • OSINT for Juniors
    • Open-source intelligence (OSINT)
    • Tipos de fuentes OSINT
    • Herramientas para OSINT
    • Dorks de Google
  • OS for Juniors
    • Introduccion a Sistemas Operativos
    • Archivo y extensiones
    • Windows
      • Estructura del SO
        • Kernel De Windows
        • Servicios Importantes
        • Procesos en Windows
        • Registros en Windows
        • Gestion de archivos en Windows
      • Versiones relevantes
      • La importancia de identificar la version de windows durante una auditoria
      • Tips
    • Linux
      • Tips
    • Android
      • Versiones relevantes
      • Tips
    • IOS
      • Versiones Relevantes
      • Tips
    • macOS
      • Versiones Relevantes
      • Tips
    • Sistemas operativos para Hackers
    • Instalacion de Kali Linux
  • Networking for Juniors
    • ¿Que es el Networking?
    • Fundamentos de Redes
    • Estructura de Redes
    • Topologías de Red
    • Modelo OSI (Open Systems Interconnection)
    • Modelo TCP/IP
    • IP (Internet Protocol)
    • TCP (Transmission Control Protocol)
    • UDP (User Datagram Protocol)
    • Protocolos de red
      • Protocolos de la capa de acceso al medio
      • Protocolos de la capa de red
      • Protocolos de la capa de transporte
      • Protocolos de la capa de aplicación
      • Protocolos de aplicación en correo electrónico
    • Puertos y servicios
      • Puerto 21: FTP
      • Puerto 22: SSH
      • Puerto 23: Telnet
      • Puerto 25: - SMTP
      • Puerto 53: DNS
      • Puerto 80: HTTP
      • Puerto 443: HTTPS
      • Puerto 139 y 445: SMB - CIFS
      • Puerto 3389: RDP
      • Puerto 389: LDAP
      • Puerto 5000: Docker
      • Puerto 5900: VNC
  • Nmap for Juniors
    • ¿Que es Nmap?
    • Tu Primer Nmap
    • Parametros de Nmap
    • Comandos utiles
    • Scripts de Nmap
  • Wi-Fi y Radiofrecuencias
    • Fundamentos de Wireless
    • Fundamentos del Hacking de Wi-Fi
    • Fundamentos en Radiofrecuencias
    • RFID (Radio Frequency Identification)
    • Infrarrojo (IR)
    • Bluetooth
    • NFC (Near Field Communication)
    • Herramientas de un hacker
    • Fundamentos en Hardware Hacking
  • AppWeb For Juniors
    • ¿Porque deberia aprender hacking web?
    • Fundamentos de Aplicaciones Web
      • Códigos de estado HTTP
    • Fundamentos de APIs
      • Métodos HTTP
      • Practica Gratis
    • Cabeceras de seguridad
    • Analisis de certificados SSL
    • Mecanismos de autenticacion y autorizacion en AppWeb
    • Atacando CMS
    • La Seguridad en el Desarrollo de Aplicativos: Frameworks vs. Desarrollo Manual
    • OWASP Top Ten
  • Databases for Juniors
    • ¿Base de Datos?
      • SQL
      • NoSQL
    • Puerto 6379: Redis
    • Puerto 27017: MongoDB
    • Puerto 5432: PostgreSQL
    • Puerto 3306: MySQL
    • Puerto 1433: Microsoft SQL Server
    • Puerto 1521: - Oracle Database
  • Transferencia de Archivos
    • Introduccion a la Transferencia de archivos
    • Descargando desde Windows
      • Utilizando LOLBAS
    • Descargando desde Linux
    • Despliegue de servicio HTTP
    • Despliegue de servicio SMB
    • Despligue de servicio FTP
    • Utilizando Base64
  • Fundamentos en Vulnerabilidades
    • ¿Qué es una Vulnerabilidad?
    • ¿Qué es un 0day?
    • Common Vulnerabilities and Exposures - [CVE]
    • RCE (Remote Code Execution)
    • Buffer Overflow
  • Malware For Junior
    • ¿Que es Malware?
    • ¿Que es un AntiVirus?
      • Microsoft Defender
    • ¿Que es un EDR?
      • Mejores EDRs actuales
    • Desarrollo de Malware
    • Malware for Windows
      • Golang
      • Nim
      • C#
    • Ofuscacion de Malware
  • Shell
    • ¿Shell?
      • CMD (Command Prompt) en Windows
      • PowerShell en Windows
      • Bash en Unix/Linux
    • ¿Reverse Shell?
    • ¿Web Shell?
    • ¿Bind Shell?
    • Enumeracion de Windows
    • Enumeracion de Linux
  • Privilege Escalation for Juniors
    • ¿Que es la escalacion de privilegios?
    • PrivEsc For Windows
      • WinPEAS
    • PrivEsc For Linux
      • LinPEAS
    • PrivEsc For Active Directory
    • PrivEsc For Cloud Computing
  • Tecnicas de persistencia
    • Fundamentos de Persistencia
    • Persistencia en Windows
    • Persistencia en Linux
    • Persistencia Avanzada
  • Pivoting for Juniors
    • ¿Que es pivoting?
    • ¿Que es Socks?
    • Doble Pivoting y Triple Pivoting
    • RPivot y Chisel
  • Active Directory For Juniors
    • Fundamentos de Active Directory
    • Utilizando ADPeas para el reconocimiento
  • Cloud Computing For Juniors
    • Fundamentos de cloud computing
    • Amazon Web Services
    • Microsoft Azure
    • Google Cloud Platform
  • Introduccion a Blue Team
    • ¿Blue Team?
    • ¿SOC?
    • ¿Threat Hunting?
    • SIEM (Security Information and Event Management)
    • La fatiga del SOC
    • ¿SOAR?
  • Defensas y herramientas de seguridad perimetral
    • Soluciones de Seguridad Perimetral Esenciales
    • Firewall
    • IDS (Intrusion Detection System)
    • IPS (Intrusion Prevention System)
    • WAF (Web Application Firewall)
    • Firewalls de Próxima Generación (NGFW)
    • Gateways de Seguridad Web (SWG)
    • Gateways de Seguridad de Correo Electrónico (SEG)
    • Sistemas de Prevención de Fugas de Datos (DLP)
    • Network Access Control (NAC)
  • Muchas gracias
    • 🛡️ ¡Muchísimas Gracias por Participar! 🛡️
    • Importante
Con tecnología de GitBook
En esta página
  • El Stack (Pila)
  • Componentes del Stack:
  • Funcionamiento del Stack
  • Buffer Overflow
  • Diferencias entre Windows y Linux
  • Gestión de Memoria
  • Protección del Stack
  • Explotación Binaria a Bajo Nivel
  • Registros y Direcciones
  • Manipulación del Stack
  • Shellcode
  • Ejemplo de Buffer Overflow Código Vulnerable en C:
  • Técnicas de Mitigación
  • Conclusión

¿Te fue útil?

  1. Fundamentos en Vulnerabilidades

Buffer Overflow

El desbordamiento de buffer es una vulnerabilidad de seguridad que ocurre cuando un programa escribe más datos en un buffer de los que este puede manejar. Esto puede llevar a la corrupción de datos adyacentes en la memoria, y en algunos casos, puede ser explotado para ejecutar código arbitrario.

El Stack (Pila)

El stack es una estructura de datos en memoria utilizada para almacenar variables locales y para mantener el control de la ejecución de funciones en un programa. Es una zona de memoria que crece y decrece dinámicamente conforme se realizan llamadas a funciones y se retornan de ellas.

Componentes del Stack:

  • Frame Pointer (FP) o Base Pointer (BP): Un registro que apunta al comienzo del stack frame actual.

  • Stack Pointer (SP): Un registro que apunta al tope del stack.

  • Return Address: Dirección a la que se debe retornar después de ejecutar una función.

  • Variables Locales: Almacenadas en el stack para su uso dentro de la función.

Funcionamiento del Stack

Cuando se llama a una función, se crea un nuevo stack frame:

  1. Push Return Address: La dirección de retorno es empujada al stack.

  2. Push Frame Pointer: El valor actual del frame pointer es empujado al stack.

  3. Update Frame Pointer: El frame pointer se actualiza para apuntar al nuevo stack frame.

  4. Allocate Space for Local Variables: Se reserva espacio en el stack para las variables locales de la función.

Cuando la función termina, el stack frame se destruye y se retorna a la dirección almacenada en el return address.

Buffer Overflow

Un desbordamiento de buffer ocurre cuando se escriben más datos de los que un buffer puede manejar, sobreescribiendo así memoria adyacente. Esto puede ocurrir debido a una falta de validación de límites de entrada.

Si un atacante puede controlar la entrada que causa el desbordamiento, puede sobrescribir el return address en el stack. De este modo, cuando la función termina, en lugar de retornar a la dirección original, el flujo de ejecución salta a una dirección controlada por el atacante, permitiendo la ejecución de código arbitrario.

Diferencias entre Windows y Linux

Gestión de Memoria

  • Windows: Utiliza SEH (Structured Exception Handling) y DEP (Data Execution Prevention) para proteger contra exploits de buffer overflow. ASLR (Address Space Layout Randomization) también se utiliza para aleatorizar la disposición de los segmentos de memoria.

  • Linux: Utiliza mecanismos similares como NX (No-eXecute) bit y ASLR. Sin embargo, la implementación y los detalles pueden diferir.

Protección del Stack

  • Windows: Utiliza canaries (valores aleatorios) para proteger el stack. Si el canary es modificado, el programa detecta el desbordamiento y aborta.

  • Linux: Similar a Windows, también utiliza canaries y otros mecanismos de protección como Stack Smashing Protector (SSP).

Explotación Binaria a Bajo Nivel

Registros y Direcciones

Los registros son pequeñas áreas de almacenamiento en la CPU que son extremadamente rápidas. Algunos registros importantes son:

  • EIP/RIP (Instruction Pointer): Apunta a la próxima instrucción a ejecutar.

  • ESP/RSP (Stack Pointer): Apunta al tope del stack.

  • EBP/RBP (Base Pointer): Apunta al inicio del stack frame actual.

Manipulación del Stack

En un ataque de buffer overflow, el objetivo es sobrescribir el EIP/RIP para redirigir el flujo de ejecución. Esto se logra sobreescribiendo el return address en el stack frame.

Shellcode

El shellcode es una pequeña pieza de código que se inyecta en el stack y se ejecuta al tomar control del flujo de ejecución. Está diseñado para realizar tareas específicas, como abrir una shell o conectarse a un servidor remoto.

Ejemplo de Buffer Overflow Código Vulnerable en C:

Si el atacante provee una entrada mayor a 64 bytes, puede sobrescribir la memoria adyacente y potencialmente controlar el EIP/RIP.

#include <stdio.h>
#include <string.h>

void vulnerable_function(char *input) {
    char buffer[64];
    strcpy(buffer, input); // No hay verificación de límites
}

int main(int argc, char *argv[]) {
    if (argc > 1) {
        vulnerable_function(argv[1]);
    }
    return 0;
}

Técnicas de Mitigación

  • Canaries: Valores aleatorios colocados antes del return address. Si se alteran, se detecta el desbordamiento.

  • ASLR: Aleatoriza las direcciones de memoria para dificultar la predicción de direcciones útiles para el atacante.

  • DEP/NX: Previene la ejecución de código en ciertas áreas de memoria.

  • Fortificación de Código: Usar funciones seguras que verifican los límites, como strncpy en lugar de strcpy.

Conclusión

El desbordamiento de buffer es una vulnerabilidad crítica que ha sido explotada extensamente en el pasado. Con un entendimiento profundo del stack y la gestión de memoria, los atacantes pueden desarrollar exploits sofisticados. Sin embargo, con las técnicas de mitigación modernas y las buenas prácticas de programación, se pueden prevenir muchos de estos ataques.

AnteriorRCE (Remote Code Execution)Siguiente¿Que es Malware?

Última actualización hace 1 año

¿Te fue útil?

Page cover image