Demostración en vídeo del post.

En la parte anterior se ha explicado cómo crear scripts en Python que utilicen TOR, algo que resulta sencillo de implementar cuando se utilizan librerías como Stem o Requests. En este post se explorarán otras alternativas interesantes.

Creando un objeto Session de requests para evitar DNS Leaks

En el post anterior se ha visto cómo usar Requests con TOR, no obstante se pueden producir fugas DNS solamente utilizando las funciones definidas en el módulo requests y esto evidentemente es algo que se debe evitar. La forma más fácil, rápida y limpia de hacerlo consiste en utilizar el objeto Session definido en Requests y realizar todas las peticiones HTTP utilizando dicho componente.

Como se puede apreciar en la imagen anterior, utilizar «Session» es una forma limpia y sencilla de ejecutar peticiones HTTP de forma anónima y además, se evitan las fugas DNS. La única diferencia desde la perspectiva del programador es que las funciones para ejecutar las peticiones HTTP (get, post, delete, put, etc) ya no se invocan desde el módulo «requests» sino desde el objeto «session. No cambia la estructura de dichos métodos así que si hace falta pasar de «requests» a «session» los cambios son mínimos.

Otras librerías que pueden utilizar TOR

En ocasiones es necesario utilizar librerías para hacer pentesting ya que Requests como cliente HTTP funciona estupendamente, pero se puede ser insuficiente. Existen otras librerías útiles para hacer pruebas sobre servicios web tales como Mechanize o Selenium, las cuales permiten automatizar casos de pruebas y simular la interacción de un usuario con el sitio web. Ambas librerías funcionan muy bien con TOR ya que admiten el uso de un proxy SOCKS.

Mechanize

En el caso de Mechanize es necesario crear un objeto «Browser» y a continuación, indicar todas las características que va a incluir antes de ejecutar cualquier petición. En realidad, es tan simple como invocar al método «set_proxies» e indicar un diccionario que contenga el proxy SOCKS de TOR.

En el script anterior se obtiene un objeto Browser, se establecen algunas cabeceras que contendrán todas las peticiones HTTP y además, se indica el proxy SOCKS que utilizará el navegador. Finalmente, se abre el sitio «thehackerway.com», se obtienen todos los enlaces y se busca aquel que tenga en el texto la palabra «Contact». Una vez recuperado dicho elemento, se «hace click» en él. Cabe anotar que esto se ha hecho utilizando TOR y que se podría hacer sobre cualquier otro sitio web.

Selenium

Es una de las librerías más interesantes y extendidas en el mundo del testing, existen múltiples herramientas que basan su funcionamiento en ella y por supuesto, existe una implementación para Python así como para otros lenguajes de programación comunes.

Sockets en Python con TOR

Aunque es lo más habitual, no siempre se utiliza TOR para conectar con sitios web y en ocasiones se utiliza para establecer conexiones con otros tipos de servicios TCP (no hay que olvidar que TOR únicamente soporta este protocolo).
En este sentido, la forma más rápida y directa consiste en importar el modulo socket de la API estándar de Python e indicarle el proxy SOCKS de TOR. A partir de este punto, cualquier conexión que se realice a un host remoto utilizando TCP, pasará primero por TOR. No obstante, hay que tener en cuenta que no todas las librerías y proyectos en Python están pensados para, por ejemplo, hacer peticiones a sitios «onion» y se pueden producir excepciones que hay que controlar.

En la imagen anterior simplemente se aprecia que se establece una conexión TCP a una dirección onion, a la cual solamente se podría acceder si existe una conexión a TOR, lo cual se consigue con el módulo «socks» y la función «setdefaultproxy». A continuación, se envía una cadena de texto y suponiendo que en el servicio oculto se esté ejecutando algo como un «netcat» o cualquier otro tipo de servicio TCP, el programa en Python recibirá la respuesta por parte de dicho servicio.

Como se ha podido apreciar en éste y en el post anterior, crear scripts en Python que se conecten a la red de TOR no es una tarea compleja y existen múltiples alternativas, en estos artículos desde luego no las he mencionado todas, solamente aquellos que utilizo con mayor frecuencia en mis proyectos, no obstante me interesa saber tu opinión ¿qué otras alternativas conoces para hacer esto mismo? te leo en los comentarios.

Un saludo y Happy Hack!
Adastra.