> For the complete documentation index, see [llms.txt](https://books.spartan-cybersec.com/cppj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.spartan-cybersec.com/cppj/networking-for-juniors/puertos-y-servicios/puerto-80-http.md).

# Puerto 80: HTTP

**HTTP (Hypertext Transfer Protocol)** es un protocolo de comunicación utilizado para transferir datos a través de la World Wide Web. Funciona en el puerto 80 por defecto y es el protocolo subyacente para el intercambio de información en la web, permitiendo a los navegadores recuperar y presentar páginas web a los usuarios.

{% content-ref url="/pages/8NOFwF9sQqSuMRzFrTtL" %}
[Fundamentos de Aplicaciones Web](/cppj/appweb-for-juniors/fundamentos-de-aplicaciones-web.md)
{% endcontent-ref %}

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

* <mark style="color:green;">**Protocolo**</mark><mark style="color:green;">:</mark> HTTP es un protocolo basado en texto que opera sobre TCP en el puerto 80 por defecto.
* <mark style="color:green;">**Funcionalidad**</mark><mark style="color:green;">:</mark> Permite la transferencia de archivos (como texto, imágenes, videos) y la interacción con aplicaciones web a través de solicitudes y respuestas.
* <mark style="color:green;">**Métodos Comunes**</mark><mark style="color:green;">:</mark>
  * <mark style="color:green;">**GET**</mark><mark style="color:green;">:</mark> Solicita datos de un servidor.
  * <mark style="color:green;">**POST**</mark><mark style="color:green;">:</mark> Envía datos al servidor para procesamiento.
  * <mark style="color:green;">**PUT**</mark><mark style="color:green;">:</mark> Actualiza un recurso existente en el servidor.
  * <mark style="color:green;">**DELETE**</mark><mark style="color:green;">:</mark> Elimina un recurso en el servidor.

{% content-ref url="/pages/vjq7IZT9ZjlNgN5RIe56" %}
[Métodos HTTP](/cppj/appweb-for-juniors/fundamentos-de-apis/metodos-http.md)
{% endcontent-ref %}

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

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

* <mark style="color:green;">**Vulnerabilidades Comunes**</mark><mark style="color:green;">:</mark> HTTP puede ser explotado a través de diversas vulnerabilidades como inyecciones SQL, XSS (Cross-Site Scripting), y CSRF (Cross-Site Request Forgery).
* <mark style="color:green;">**Información Sensible**</mark><mark style="color:green;">:</mark> Las aplicaciones web pueden exponer información sensible a través de HTTP si no están adecuadamente protegidas.
* <mark style="color:green;">**Intercepción de Tráfico**</mark><mark style="color:green;">:</mark> Sin cifrado (HTTPS), el tráfico HTTP puede ser interceptado y analizado, permitiendo a los atacantes capturar datos sensibles.
* <mark style="color:green;">**Fuzzing y Enumeración**</mark><mark style="color:green;">:</mark> Los pentesters utilizan técnicas de fuzzing y enumeración para descubrir rutas, parámetros y funcionalidades no documentadas en aplicaciones web.

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

Para identificar servidores HTTP activos y recopilar información adicional sobre los servicios web, se puede utilizar Nmap. El siguiente comando escanea el puerto 80 y ejecuta scripts NSE específicos para HTTP.

### <mark style="color:green;">**Comando Nmap**</mark>

```bash
nmap -p 80 --script http-title,http-headers,http-methods,http-enum target-ip
```

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

* `nmap`: Ejecuta el comando Nmap.
* `-p 80`: Especifica que Nmap debe escanear el puerto 80, el puerto predeterminado para HTTP.
* `--script http-title,http-headers,http-methods,http-enum`: Utiliza scripts NSE para detectar configuraciones y vulnerabilidades en el servicio HTTP.
  * `http-title`: Recupera el título de la página web.
  * `http-headers`: Muestra las cabeceras HTTP devueltas por el servidor.
  * `http-methods`: Enumera los métodos HTTP soportados por el servidor.
  * `http-enum`: Enumera directorios y archivos comunes en el servidor web.
* `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 17:45 UTC
Nmap scan report for 192.168.1.50
Host is up (0.0021s latency).

PORT   STATE SERVICE
80/tcp open  http
| http-title: Example Domain
|_Requested resource was /index.html
| http-headers:
|   HTTP/1.1 200 OK
|   Date: Sun, 18 May 2024 17:45:00 GMT
|   Server: Apache/2.4.41 (Ubuntu)
|   Content-Type: text/html; charset=UTF-8
|   Connection: close
|_  Content-Length: 1234
| http-methods:
|_  Supported Methods: GET HEAD POST OPTIONS
| http-enum:
|   /index.html [200 OK]
|   /login [302 Found]
|   /admin [403 Forbidden]
|   /robots.txt [200 OK]
|_  /images [301 Moved Permanently]

Nmap done: 1 IP address (1 host up) scanned in 3.89 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;">**80/tcp open http**</mark><mark style="color:green;">:</mark> El puerto 80 está abierto y el servicio HTTP está activo.
* <mark style="color:green;">**http-title**</mark><mark style="color:green;">:</mark> Muestra el título de la página web principal (`Example Domain`).
* <mark style="color:green;">**http-headers**</mark><mark style="color:green;">:</mark> Muestra las cabeceras HTTP devueltas por el servidor, proporcionando información sobre el servidor y la respuesta.
  * <mark style="color:green;">**Server**</mark><mark style="color:green;">:</mark> Indica el tipo de servidor web (`Apache/2.4.41 (Ubuntu)`).
  * <mark style="color:green;">**Content-Type**</mark><mark style="color:green;">:</mark> Tipo de contenido de la respuesta (`text/html; charset=UTF-8`).
* <mark style="color:green;">**http-methods**</mark><mark style="color:green;">:</mark> Enumera los métodos HTTP soportados por el servidor (`GET`, `HEAD`, `POST`, `OPTIONS`).
* <mark style="color:green;">**http-enum**</mark><mark style="color:green;">:</mark> Enumera directorios y archivos comunes en el servidor web.
  * <mark style="color:green;">**/index.html \[200 OK]**</mark><mark style="color:green;">:</mark> Indica que el archivo `/index.html` existe y es accesible.
  * <mark style="color:green;">**/login \[302 Found]**</mark><mark style="color:green;">:</mark> Indica una redirección desde `/login`.
  * <mark style="color:green;">**/admin \[403 Forbidden]**</mark><mark style="color:green;">:</mark> Indica que el acceso al directorio `/admin` está prohibido.
  * <mark style="color:green;">**/robots.txt \[200 OK]**</mark><mark style="color:green;">:</mark> Indica que el archivo `/robots.txt` existe y es accesible.
  * <mark style="color:green;">**/images \[301 Moved Permanently]**</mark><mark style="color:green;">:</mark> Indica una redirección permanente desde `/images`.
