# Puerto 22: SSH

**SSH (Secure Shell)** es un protocolo de red que proporciona una conexión segura para acceder y gestionar servidores remotos. SSH cifra todos los datos transferidos entre el cliente y el servidor, ofreciendo una capa de seguridad que protege contra la interceptación de datos y ataques de red. Opera típicamente en el puerto 22.

## <mark style="color:green;">Descripción de SSH</mark>

* <mark style="color:green;">**Protocolo**</mark><mark style="color:green;">:</mark> SSH utiliza el protocolo TCP y opera en el puerto 22.
* <mark style="color:green;">**Cifrado**</mark><mark style="color:green;">:</mark> Todos los datos, incluyendo credenciales y comandos, se cifran, protegiendo la comunicación contra escuchas y ataques de intermediario (MITM).
* <mark style="color:green;">**Autenticación**</mark><mark style="color:green;">:</mark> SSH puede utilizar autenticación basada en contraseñas, claves públicas y otros métodos avanzados como Kerberos.
* <mark style="color:green;">**Túneles Seguros**</mark><mark style="color:green;">:</mark> SSH puede crear túneles cifrados para otros protocolos (port forwarding), permitiendo conexiones seguras a servicios no seguros.

## <mark style="color:green;">Relevancia en Pentesting</mark>

### <mark style="color:green;">**Importancia de SSH en Pentesting**</mark><mark style="color:green;">:</mark>

* <mark style="color:green;">**Seguridad**</mark><mark style="color:green;">:</mark> Aunque SSH es seguro, su correcta configuración es crucial. Los pentesters buscan configuraciones incorrectas y vulnerabilidades explotables.
* <mark style="color:green;">**Fuerza Bruta**</mark><mark style="color:green;">:</mark> Los ataques de fuerza bruta contra SSH pueden tener éxito si se utilizan contraseñas débiles o por defecto.
* <mark style="color:green;">**Acceso No Autorizado**</mark><mark style="color:green;">:</mark> Identificar credenciales débiles o comprometidas puede permitir a un pentester obtener acceso no autorizado a sistemas remotos.
* <mark style="color:green;">**Forwarding de Puertos**</mark><mark style="color:green;">:</mark> SSH puede ser utilizado para redirigir tráfico de red, lo cual puede ser útil tanto para pentesters como para administradores de sistemas.

### <mark style="color:green;">Ejemplo de Escaneo de SSH con Nmap</mark>

Para identificar sistemas que tienen el servicio SSH activo y recopilar información adicional sobre el servidor SSH, se puede utilizar Nmap. El siguiente comando escanea el puerto 22 y ejecuta scripts NSE específicos para SSH.

**Comando Nmap**

```bash
nmap -p 22 --script ssh-hostkey,ssh-auth-methods,ssh-brute target-ip
```

### <mark style="color:green;">**Explicación del Comando**</mark>

* `nmap`: Ejecuta el comando Nmap.
* `-p 22`: Especifica que Nmap debe escanear el puerto 22, el puerto predeterminado para SSH.
* `--script ssh-hostkey,ssh-auth-methods,ssh-brute`: Utiliza scripts NSE para recopilar información sobre el servicio SSH.
  * `ssh-hostkey`: Recupera y muestra las claves públicas del servidor SSH.
  * `ssh-auth-methods`: Enumera los métodos de autenticación soportados por el servidor SSH.
  * `ssh-brute`: Realiza un ataque de fuerza bruta para intentar encontrar credenciales válidas.
* `target-ip`: Especifica la dirección IP del objetivo.

### <mark style="color:green;">**Ejemplo de Salida de Nmap**</mark>

```plaintext
Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-18 14:23 UTC
Nmap scan report for 192.168.1.20
Host is up (0.0011s latency).

PORT   STATE SERVICE
22/tcp open  ssh
| ssh-hostkey:
|   2048 f4:92:50:47:a1:25:b6:07:4c:73:3d:8b:77:85:3b:47 (RSA)
|   256 e8:11:14:3a:c8:26:d7:41:a1:b5:c2:91:25:53:1c:41 (ECDSA)
|_  256 b7:0d:3b:4f:8d:9c:8a:e1:5c:44:65:2d:73:4d:6b:4b (ED25519)
| ssh-auth-methods:
|   Supported authentication methods:
|     publickey
|     password
|_    keyboard-interactive
| ssh-brute:
|   Accounts:
|     admin:admin - Valid credentials
|_    test:test - Valid credentials

Nmap done: 1 IP address (1 host up) scanned in 8.54 seconds
```

## <mark style="color:green;">Interpretación de la Salida</mark>

* <mark style="color:green;">**Host is up**</mark><mark style="color:green;">:</mark> Indica que el sistema objetivo está en línea y responde.
* <mark style="color:green;">**22/tcp open ssh**</mark><mark style="color:green;">:</mark> El puerto 22 está abierto y el servicio SSH está activo.
* <mark style="color:green;">**ssh-hostkey**</mark><mark style="color:green;">:</mark> Muestra las claves públicas del servidor SSH, que pueden ser utilizadas para identificar la autenticidad del servidor.
  * <mark style="color:green;">**RSA**</mark><mark style="color:green;">:</mark> Tipo de clave RSA y su huella digital.
  * <mark style="color:green;">**ECDSA**</mark><mark style="color:green;">:</mark> Tipo de clave ECDSA y su huella digital.
  * <mark style="color:green;">**ED25519**</mark><mark style="color:green;">:</mark> Tipo de clave ED25519 y su huella digital.
* <mark style="color:green;">**ssh-auth-methods**</mark><mark style="color:green;">:</mark> Enumera los métodos de autenticación soportados por el servidor SSH.
  * <mark style="color:green;">**publickey**</mark><mark style="color:green;">:</mark> Autenticación basada en claves públicas.
  * <mark style="color:green;">**password**</mark><mark style="color:green;">:</mark> Autenticación basada en contraseñas.
  * <mark style="color:green;">**keyboard-interactive**</mark><mark style="color:green;">:</mark> Autenticación interactiva por teclado.
* <mark style="color:green;">**ssh-brute**</mark><mark style="color:green;">:</mark> Resultados de un ataque de fuerza bruta, mostrando las credenciales válidas encontradas.
  * <mark style="color:green;">**admin:admin**</mark> <mark style="color:green;"></mark><mark style="color:green;">y</mark> <mark style="color:green;"></mark><mark style="color:green;">**test:test**</mark><mark style="color:green;">:</mark> Credenciales válidas que permiten el acceso al servidor SSH.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://books.spartan-cybersec.com/cppj/networking-for-juniors/puertos-y-servicios/puerto-22-ssh.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
