# 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="../../appweb-for-juniors/fundamentos-de-aplicaciones-web" %}
[fundamentos-de-aplicaciones-web](https://books.spartan-cybersec.com/cppj/appweb-for-juniors/fundamentos-de-aplicaciones-web)
{% 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="../../appweb-for-juniors/fundamentos-de-apis/metodos-http" %}
[metodos-http](https://books.spartan-cybersec.com/cppj/appweb-for-juniors/fundamentos-de-apis/metodos-http)
{% 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`.


---

# 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-80-http.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.
