# Inyecciones de codigo y contexto

Para que pueda haber una injeccion de codigo tiene que haber algun campo dentro de la pagina web en el que nosotros podamos interactuar con esa aplicacion objetivo, estos campos normalmente suelen llamarse `puntos de injeccion` ya que es el punto en el que nosotros podemos meter codigo/informacion que la aplicacion objetivo cuando la reciba va a parsearla/analizarla y hara algo con ella.

Si nosotros capturamos una autenticacion de `login` con `Burp Suite` a parte de poder intentar ver algun tipo de vulnerabilidad que tenga la pagina, tambien en algunos casos podremos ver las `Coockies` del usuario, por lo que seria otro punto de injeccion, a parte de que en la pestaña `Params` nos filtrara de mejor forma toda la informacion del `request`.

Para diferenciar un `SQL Injecction` de un `Cross-site-Scripting (XSS)` es el contexto en el que estamos realizando esa injeccion de codigo, muchas veces para ver donde responde el servidor y para ver donde se ha realizado la injeccion de codigo nosotros utilizamos una cosa que denomina `canario`, un `canario` es simplemente una palabra clave que nosotros metemos para que cuando recivimos la respuesta del servidor podamos buscar en el codigo de respuesta donde se ha injectado nuestro codigo.

Por ejemplo, estando con `Burp Suite` a la escucha de cualquier peticion, realizamos una peticion de login con la siguiente informacion:

```
User: canario
Pass: canariopassword
```

Y veremos algo asi:

<figure><img src="https://4289632959-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5Wk1VNaLaqCTbfMb7tfp%2Fuploads%2Fru9rBv4855r57pHO3ebh%2Fimage.png?alt=media&#x26;token=879cc560-1229-46ad-9ba9-5af5d166bff6" alt=""><figcaption></figcaption></figure>

Le damos a `Forward`, nos responde el servidor de aplicacion y en el buscaremos la palabra `canario` en la barra de busqueda en la parte de abajo:

<figure><img src="https://4289632959-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5Wk1VNaLaqCTbfMb7tfp%2Fuploads%2FsSm9YGlj13dw0eoSP1FR%2Fimage.png?alt=media&#x26;token=9ee5e49a-8445-4370-b791-8f56fded8a24" alt=""><figcaption></figcaption></figure>

<figure><img src="https://4289632959-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5Wk1VNaLaqCTbfMb7tfp%2Fuploads%2F5KMli0XoTtXYQ3Z9KC2s%2Fimage.png?alt=media&#x26;token=51ff1e58-6cb8-4ee6-8886-95ae584eb898" alt=""><figcaption></figcaption></figure>

Por lo que podemos comprobar es que nuestra palabra `clave` viene reflejada en la respuesta del servidor y vemos que viene dentro de un contexto en `HTML` dentro de unos parametro de `HTML` por lo que podremos pensar ya en algunas vulnerabilidades como `XSS`, por lo que probaremos a cerrar la etiqueta `HTML` y abrir una nuestra para ver que puede pasar.

Por lo que volveremos a capturar la peticion del login con la palabra clave, para hacerle los cambios desde `Burp Suite`.

En la seccion de `Username` pondremos lo siguiente:

```
&username=</span><script>alert('alerta xss')</script>
```

Para cerrar el `span` de antes y ejecutar una sentencia nuestra de `HTMl`, pero veremos que no lo coge muy bien `Burp Suite` por lo que haremos lo siguiente:

Le daremos click derecho a todo lo que escribimos y seleccionaremos la que pone `URL-encode as with type` para codificarlo en `URL` y que asi funcione.

Cortaremos esa linea:

```
</span><script>alert('alerta xss')</script>
```

Y nos iremos a la pestaña del `Decoder`, pegaremos esa linea en el cuadro de la izquierda y en el boton de `Encode as ...` podremos ponerle la opcion `URL`, para que nos lo muestre en `URL Encode`, seria otra forma de codificarlo.

<figure><img src="https://4289632959-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5Wk1VNaLaqCTbfMb7tfp%2Fuploads%2Fh7NchNlElEdvuidEFQMp%2Fimage.png?alt=media&#x26;token=0b709cfb-1a7d-4048-b351-0669c7d910e9" alt=""><figcaption></figcaption></figure>

Copiamos el codificado y lo pegamos donde `username`.

<figure><img src="https://4289632959-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5Wk1VNaLaqCTbfMb7tfp%2Fuploads%2F8p8oYIexHRGk3eiYEWqZ%2Fimage.png?alt=media&#x26;token=76396eb9-14c2-41e9-9204-09984bd61159" alt=""><figcaption></figcaption></figure>

Ahora le daremos a `Fordware` 2 veces para enviar las 2 peticiones del cliente y del servidor, una vez echo esto, si vamos a la pagina veremos lo siguiente:

<figure><img src="https://4289632959-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5Wk1VNaLaqCTbfMb7tfp%2Fuploads%2F4a4cYiEfiRHqi4iYUhqo%2Fimage.png?alt=media&#x26;token=20b11fe9-99ff-4980-97ec-29d8f0d6d1e9" alt=""><figcaption></figcaption></figure>

Ahora si por ejemplo hacemos una consulta, para comprobar si es vulnerable a un `SQLInjecction` podremos hacerlo de la siguiente forma:

```
User: diseo'
Pass: null
```

Si ponemos esa comilla simple, veremos lo siguiente:

<figure><img src="https://4289632959-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5Wk1VNaLaqCTbfMb7tfp%2Fuploads%2FoR1Jwu0U9gEi1STeSUqw%2Fimage.png?alt=media&#x26;token=9782bf2a-d3df-41a4-b633-8cc765da157b" alt=""><figcaption></figcaption></figure>

Nos esta mostrando un error, el cual ya de por si esto es un fallo de seguridad respecto a como se esta haciendo la consulta y por que ha fallado.

Por lo que podremos aprovechar esto, para injectar codigo `SQL`.

Si ponemos lo siguiente, podremos aprovechar dicha vulnerabilidad para que nos saque todas las bases de datos de los usuarios de `mysql`:

```
User: diseo' OR 1=1-- -
Pass: null
```

Y veremos que funciono:

<figure><img src="https://4289632959-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5Wk1VNaLaqCTbfMb7tfp%2Fuploads%2FC6mdBIIkonuVL4n5LXXm%2Fimage.png?alt=media&#x26;token=48f68fec-63f4-4f68-a0e8-442c0952b354" alt=""><figcaption></figcaption></figure>

Ya que lo que estamos haciendo es que se cumpla siempre la condicion, ya que `1` es igual a `1` siempre, por lo que cuando se cumple la condicion nos muestra la informacion de dicho usuario, pero en este caso como es generico nos dumpea toda la informacion de la base de datos.
