RustScan Escaneo Nmap más Rápido con Rust
RustScan Escaneo Nmap más Rápido con Rust

RustScan: Escaneo Nmap más Rápido con Rust

Sí, el título parece ser confuso y, usar el nombre del escáner de puertos dominante (nmap) trae ciertas disputas en redes, como es el caso de este hilo en Reddit. Nmap PUEDE ser lento a propósito. ¿Por qué puede?, ¿Nmap puede ser más veloz? Hay muchas cosas interesantes en ese hilo, por ejemplo:

Nmap funciona intentando abrir conexiones en cada puerto que escanea, lo que requiere un par de paquetes de tráfico por puerto por host, posiblemente con un par de saltos. Más si no usa un escaneo sincronizado. Tiene valores predeterminados razonables porque abrir las conexiones 65535 en un par de segundos generará algunas alarmas (gran aumento en el tráfico de red entre dos hosts) y puede causar congestión de la red o paquetes descartados.

¿Qué es esto?

  • Encuentra los puertos rápidamente usando Rustscan (8 segundos en su máxima velocidad).
  • Ejecuta automáticamente nmap en esos puertos.
  • ???
  • ¡Ganancia!
Demo RustScans
Demo RustScans

El único trabajo de RustScans es reducir la fricción entre encontrar puertos abiertos e introducirlos en nmap.

Características

  • Escanea todos los puertos 65k en 8 segundos (en un tamaño de lote de 10k).
  • Te ahorra tiempo al introducirlo automáticamente en Nmap. Se acabó el copiar y pegar manualmente.
  • Hace una cosa y la hace bien. El único propósito es mejorar Nmap, ¡no reemplazarlo!
  • Te permite elegir qué comandos de Nmap deseas ejecutar, o utilizar el predeterminado.
  • Soporte de IPv6

¿Por qué RustScan?

Usar RustScan
Usar RustScan

¿Por qué gastar tiempo haciendo escaneos rápidos y copiando manualmente los puertos, o esperando a que termine un escaneo de 20 minutos cuando puedes hacer todos los 65k puertos en menos de un minuto?

RustScan funcionando en 8 segundos y encontrando todos los puertos abiertos de 65k.

FAQ

¡Creo que este sería un gran escáner de puertos por sí solo sin Nmap!

No. Si quieres un escáner de puertos rápido, usa Masscan.

Tengo una gran idea para un script para obtener información sobre puertos y hosts.

Genial. ¡Contribuye a Nmap! 😀

No todo el mundo tiene nmap instalado.

Si eres un pentester, entonces sí, tienes Nmap instalado.

¡Quiero contribuir!

¡Genial! Me encantaría que me ayudaran con esto. ¡Lee el archivo contributing.md para más información!

Guía de Instalación

Necesitas Nmap. Si tienes instalado el sistema operativo Kali Linux o Parrot, ya tienes Nmap. Si no es así, sigue la guía de instalación de nmap.

La forma más fácil de instalar RustScan es usar uno de los paquetes proporcionados para tu sistema, como HomeBrew o Yay para Arch Linux.

La forma más universal es usar cargo, Rust es un gestor de paquetes incorporado (piensa en Pip pero para Rust). Sigue esta guía para instalar Rust & Cargo

Si te enfrentas a algún problema, por favor deja un issue en GitHub. Sólo he probado esto en Linux, así que puede haber problemas para Mac OS o Windows.

Nota: a veces Rust no añade Cargo al PATH. Por favor, consulta este issue para saber cómo solucionarlo.

Debian / Kali

Descarga el archivo .deb de la página de releases.

Ejecuta el comando dpkg -i en el archivo.

Nota

A veces se puede hacer doble clic en el archivo para obtener el mismo resultado.

¿El archivo .deb no funciona?

El archivo .deb sólo funciona en las CPU AMD64. Si el tuyo es diferente (como un Raspberry Pi) o el archivo .deb no funciona, es fácil construir el archivo .deb tú mismo.

Nota

Es más fácil instalar Rust e instalar a través de Cargo, entonces se construye el archivo .deb. Pero esto es por si acaso!

  1. Instalar Rust Puedes hacer esto con curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh que tomé del sitio web de Rust
  2. cargo install rustscan isi quieres el método más fácil posible. De lo contrario, para construir el archivo .deb cargo install cargo-deb
  3. Clonar este repo git clone https://github.com/brandonskerritt/RustScan
  4. cd RustScan (en el repo clonado git) cd RustScan
  5. Ejecutar cargo deb
  6. Tu archivo .deb se encuentra ahora en target/releases/Debian/

HomeBrew

Tap de brew:

brew tap brandonskerritt/rustscan

Instálalo:

brew install rustscan

Construyéndolo tú mismo

  1. Clonar el Repositorio
  2. Instalar Rust Puedes hacer esto con curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh que tomé del sitio web de Rust
  3. cd dentro del repo clonado, y ejecutar cargo build --release
  4. El binario se encuentra en target/release/rustscan
  5. Enlace simbólico al binario o algo así. ¡Lo que quieras!

Uso

rustscan -h
RustScan 1.2.0
Bee https://github.com/brandonskerritt
Fast Port Scanner built in Rust
WARNING Do not use this program against sensitive infrastructure. The specified server may not be able to handle this
many socket connections at once.

USAGE:
    rustscan [FLAGS] [OPTIONS] <ip> [command]...

FLAGS:
    -h, --help       Prints help information
    -q, --quiet      Quiet mode. Only output the ports. No Nmap. Useful for grep or outputting to a file.
    -V, --version    Prints version information

OPTIONS:
    -T, --timeout <T>    The timeout before a port is assumed to be close. In MS. [default: 1500]
    -b, --batch <b>      Increases speed of scanning. The batch size for port scanning. Depends on your open file limit
                         of OS. If you do 65535 it will do every port at the same time. Although, your OS may not
                         support this. [default: 4500]
    -u, --ulimit <u>     Automatically ups the ULIMIT with the value you provided.

ARGS:
    <ip>            The IP address to scan
    <command>...    The Nmap arguments to run. To use the argument -A, end RustScan's args with '-- -A'. To run
                    EXAMPLE: 'rustscan -T 1500 127.0.0.1 -- -A -sC'. This argument auto runs nmap {your commands}
                    -vvv -p $PORTS 

El formato es rustscan -b 500 -T 1500 192.168.0.1 para escanear 192.168.0.1 con un tamaño de lote de 500 con un tiempo de espera de 1500ms. El tiempo de espera es el tiempo que RustScan espera una respuesta hasta que asume que el puerto está cerrado.

El tamaño del lote determina cuán rápido es RustScan. Ajústalo a 65k, y escaneará todos los puertos 65k al mismo tiempo. Esto significa que a un tamaño de lote de 65k, RustScan tardará mucho tiempo en escanear todos los puertos. Esencialmente, si el tiempo de espera es de 1000ms, RustScan puede escanear en 1 segundo.

Puede que tu sistema operativo no lo soporte, pero vale la pena jugar y ver dónde está el límite de apertura de archivos. En breve lanzaré una versión acoplada con un límite de archivos abiertos mucho mayor, así que esto será posible.

Advertencia

Este programa, por defecto, escanea 5000 puertos a la vez (5000 por segundo).

Esto puede causar daños a un servidor, o puede hacer increíblemente obvio que estás escaneando el servidor.

Hay dos maneras de lidiar con esto;

  1. Disminuir el tamaño del lote rustscan -b 10 que ejecutará 10 escaneos de puerto durante 1 segundo, y luego otros 10 durante 1 segundo y así sucesivamente.
  2. Aumentar el tiempo de espera rustscan -T 5000 lo que significa que RustScan espera 5 segundos hasta que escanee los siguientes puertos.

También puedes usar ambos al mismo tiempo, para hacerlo tan lento o tan rápido como quieras. Un favorito divertido es el tamaño de lote 65535 con un segundo de tiempo de espera. Teóricamente, esto escanea todos los 65535 puertos en 1 segundo.

Aviso

Por favor, no utilices esta herramienta contra servidores sensibles. Está diseñada principalmente para eventos de Capture the Flag, no para servidores del mundo real con datos sensibles.

Flags personalizadas de Nmap

Para ejecutar tus propios comandos de nmap, finaliza el comando RustScan con -- -A donde -- indica “fin de las banderas de RustScan, por favor no analices nada más” y cualquier bandera después de eso será introducida en nmap.

RustScan ejecuta automáticamente nmap -vvv -p $PORTS $IP. Para hacer que funcione -A, ejecuta el comando rustscan 127.0.0.1 -- -A.

Si quieres ejecutar comandos como --script (vuln and safe), ytendrás que incluirlo entre comillas como --script '"(vuln and safe) or default"'.

Aumentar velocidad / precisión

  • Tamaño del lote

Esto aumenta la velocidad, permitiéndonos procesar más a la vez. Algo experimental en lo que estoy trabajando está cambiando el límite de apertura de archivos. Puedes hacerlo manualmente con ulimit -n 70000 y luego ejecutar rustscan con-b 65535. Esto debería escanear todos los 65535 puertos al mismo tiempo. Pero esto es extremadamente experimental.

Para los aumentos de velocidad no experimentales, aumenta lentamente el tamaño del lote hasta que ya no tenga puertos abiertos, o se rompa.

  • Precisión (y algo de velocidad)

Para aumentar la precisión, la forma más fácil es aumentar el tiempo de espera. El valor predeterminado es 1,5 segundos, al ajustarlo a 4 segundos (4000) le estamos diciendo a RustScan “si no recibimos respuesta de un puerto en 4 segundos, supongamos que está cerrado“.

La disminución de la precisión da un plus de velocidad, pero mis pruebas encontraron que el tamaño del lote cambió dramáticamente la velocidad mientras que el tiempo de espera lo hizo, pero no tanto.

Contribución

Por favor, leer el archivo contributing.md.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda