> For the complete documentation index, see [llms.txt](https://beafn28.gitbook.io/beafn28/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://beafn28.gitbook.io/beafn28/web-security/laboratorios-portswigger/server-side-request-forgery-ssrf.md).

# 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>
