Xepor (pronunciado /ˈzɛfə/ , zephyr) es un marco de enrutamiento web para ingenieros inversos e investigadores de seguridad. Proporciona una API similar a Flask para que los piratas informáticos intercepten y modifiquen solicitudes HTTP y/o respuestas HTTP en un estilo de codificación amigable para los humanos.
Este proyecto está destinado a usarse con mitmproxy. Los usuarios escriben scripts con xepor y ejecutan el script dentro de mitmproxy con mitmproxy -s your-script.py .
Si desea pasar de PoC a producción, de demostración (por ejemplo, http-reply-from-proxy.py, http-trailers.py, http-stream-modify.py) a algo que pueda sacar con su WiFi Pineapple, entonces ¡Xepor es para ti!
@api.route() , ¡como Flask! Escribe todo en un solo if..else y nada más.InterceptedAPI .mitmproxy / mitmweb + regular / transparent / socks5 / reverse:SPEC / upstream:SPEC ) son totalmente compatibles. Este proyecto NO proporciona la eliminación de SSL.
pip install xeporTome el script de ejemplos/httpbin como ejemplo.
mitmweb -s example/httpbin/httpbin.py Configure el proxy HTTP de su navegador en http://127.0.0.1:8080 y acceda a la interfaz web en http://127.0.0.1:8081/.
Envíe una solicitud GET desde http://httpbin.org/#/HTTP_Methods/get_get. Luego podrá ver la modificación realizada por Xepor en la interfaz mitmweb, las herramientas de desarrollo del navegador o Wireshark.
El httpbin.py hace dos cosas.
payload=evil_param dentro de la solicitud HTTP.Authorization de las solicitudes HTTP e imprime la contraseña al atacante.Justo lo que siempre hace mitmproxy, pero con código escrito en forma xepor .
# https://github.com/xepor/xepor-examples/tree/main/httpbin/httpbin.py
from mitmproxy . http import HTTPFlow
from xepor import InterceptedAPI , RouteType
HOST_HTTPBIN = "httpbin.org"
api = InterceptedAPI ( HOST_HTTPBIN )
@ api . route ( "/get" )
def change_your_request ( flow : HTTPFlow ):
"""
Modify URL query param.
Test at:
http://httpbin.org/#/HTTP_Methods/get_get
"""
flow . request . query [ "payload" ] = "evil_param"
@ api . route ( "/basic-auth/{usr}/{pwd}" , rtype = RouteType . RESPONSE )
def capture_auth ( flow : HTTPFlow , usr = None , pwd = None ):
"""
Sniffing password.
Test at:
http://httpbin.org/#/Auth/get_basic_auth__user___passwd_
"""
print (
f"auth @ { usr } + { pwd } :" ,
f"Captured { 'successful' if flow . response . status_code < 300 else 'unsuccessful' } login:" ,
flow . request . headers . get ( "Authorization" , "" ),
)
addons = [ api ]