# Server-side request forgery (SSRF)

## Lab: Basic SSRF against the local server

### Enunciado

Este laboratorio tiene una funcionalidad de **verificación de stock** que obtiene datos desde un **sistema interno**. **Modificar la URL usada en la verificación de stock para acceder a la interfaz de administración en `http://localhost/admin`** y **eliminar al usuario `carlos`**.

### Resolución

Entramos a un producto y comprobamos la petición.

<figure><img src="/files/5Lz0hfbVtZsDV7mbOtfh" alt=""><figcaption></figcaption></figure>

Como el servidor web tiene esos permisos accedemos a la URL cambiandola ya que en el **/admin** nos decía que se podría entrar en localhost.

<figure><img src="/files/CwDSGCH229JPM7Z3QtF1" alt=""><figcaption></figcaption></figure>

Ahora vemos la ruta para eliminar al usuario y hacemos lo mismo cambiando la URL para enviarlo y así se elimina.

<figure><img src="/files/PKSuodrvYjZk8irCdtOe" alt=""><figcaption></figcaption></figure>

## Lab: Basic SSRF against another back-end system

### Enunciado

Este laboratorio tiene una funcionalidad de **verificación de stock** que obtiene datos desde un **sistema interno**. Usar la funcionalidad de verificación de stock para **escanear el rango interno `192.168.0.X` en el puerto 8080**, localizar una **interfaz de administración**, y utilizarla para **eliminar al usuario `carlos`**.

### Resolución

No se encuentra **/admin** por lo que vamos a ver el stock de un producto y su petición.

<figure><img src="/files/oCcYe1jbFjo0mxRZo9OY" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ABT29TlzpR3FLEhTgz32" alt=""><figcaption></figcaption></figure>

Hacer peticiones a una IP eso está mal por lo que enviamos esa petición pero para la ruta **/admin**.

<figure><img src="/files/OeFZVyzLFDycIb1jIisT" alt=""><figcaption></figcaption></figure>

Nos da error por lo que no se encuentra en esa IP. Enviamos al **Intruder** y realizamos una fuerza bruta para ver que IP es.

<figure><img src="/files/3Dt95F6S78UNc452xhws" alt=""><figcaption></figcaption></figure>

Encontramos una solución que nos da código 200.

<figure><img src="/files/3oMEKpWmdEqeAAF7ETJ5" alt=""><figcaption></figcaption></figure>

Con la petición del stock con la ruta de eliminar como hicimos antes pero con la IP correcta.

<figure><img src="/files/i7uUVXDhDrJxynD8zoV0" alt=""><figcaption></figcaption></figure>

## Lab: Blind SSRF with out-of-band detection

### Enunciado

Este sitio utiliza un **software de análisis** que **obtiene (fetch)** la URL especificada en el **header Referer** cuando se carga una página de producto.

Para resolver el laboratorio, **aprovecha esta funcionalidad** para provocar que se realice una **solicitud HTTP** al servidor público de **Burp Collaborator**.

### Resolución

Interceptamos la petición.

<figure><img src="/files/wl7QYZUYQXVFAikvl1Ow" alt=""><figcaption></figcaption></figure>

Cambiamos el header Referer por el enlace del Collaborator.

<figure><img src="/files/rukFncnQrrETS4x7M77Z" alt=""><figcaption></figcaption></figure>

Enviamos petición.

<figure><img src="/files/KN6m6tD966XF7IaZWZjR" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/9sbjxkaovaF26j1dVWvz" alt=""><figcaption></figcaption></figure>

## Lab: SSRF with blacklist-based input filter

### Enunciado

Este laboratorio tiene una función de **verificación de stock** que obtiene datos de un **sistema interno**.

Para resolver el laboratorio, **modifica la URL de verificación de stock** para acceder a la interfaz de administración en:

```
http://localhost/admin
```

y **elimina al usuario carlos**.

El desarrollador ha implementado **dos defensas anti-SSRF débiles** que tendrás que **eludir**.

### Resolución

Miramos la petición de stock.

<figure><img src="/files/tF7RbF8FRwmW5O9FpLko" alt=""><figcaption></figcaption></figure>

Enviamos el enlace del enunciado.

<figure><img src="/files/bhVsS41tQCHrhQz8pYqc" alt=""><figcaption></figcaption></figure>

Vemos varias maneras de encodearlo y nos salión con la codificación doble de caracteres.

```
http://127.1/%2561dmin
```

<figure><img src="/files/xhVExQQZsaUceDQOQ4Cw" alt=""><figcaption></figcaption></figure>

Ya podemos eliminar al usuario Carlos.

<figure><img src="/files/6AZ7Kovq41yJSuvXkxLU" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/TrZGMDxvqktfWYiuoncx" alt=""><figcaption></figcaption></figure>

## Lab: SSRF with filter bypass via open redirection vulnerability

### Enunciado

Este laboratorio tiene una función de **verificación de stock** que obtiene datos de un **sistema interno**.

Para resolver el laboratorio, **modifica la URL de verificación de stock** para acceder a la interfaz de administración en:

```
http://192.168.0.12:8080/admin
```

y **elimina al usuario carlos**.

El verificador de stock ha sido **restringido para acceder únicamente a la aplicación local**, por lo que primero **necesitarás encontrar un open redirect** que afecte a la aplicación.

### Resolución

Miramos la petición de stock.

<figure><img src="/files/nn3gSo3q3q1MGKiBzz3X" alt=""><figcaption></figcaption></figure>

No nos deja completar dominios ni subdominios.

Detectamos una **vulnerabilidad de redirección abierta** en el parámetro **path** del endpoint `nextProduct`.

Aprovechamos esta redirección para lograr que el **stock checker** accediera de forma indirecta al **panel de administración interno** en:

```
http://192.168.0.12:8080/admin
```

Una vez allí, aplicamos la misma técnica para **construir una URL** que permitiera **eliminar al usuario carlos**, logrando así completar el laboratorio.

<figure><img src="/files/RhxT7RddkiLn1wyiE8kJ" alt=""><figcaption></figcaption></figure>

Ya podemos eliminar al usuario.

<figure><img src="/files/UwlpNva1q1qfYlpBxzFl" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/RdwxNqPtO4cpQbVR5yFC" alt=""><figcaption></figcaption></figure>


---

# 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://beafn28.gitbook.io/beafn28/web-security/laboratorios-portswigger/server-side-request-forgery-ssrf.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.
