Descubriendo usuarios a través de SMTP con smtpguess
Esta semana descubrí el pentest lab de heorot.net (en los foros tenéis las descargas y algo de documentación y pistas) y decidí probarlo. Dedicaremos otro post más adelante a ver la solución que hallé al nivel 1 del reto cuando lo complete definitivamente. No es que haga falta comerse mucho el coco para superar este primer nivel -no me gusta la forma que he hallado de superar algunas partes, pero ya lo comentaremos despacio en un post futuro-, pero su desarrollo ha dado lugar a una pequeña herramienta que pongo a vuestra disposición.
Llegado un punto del reto, resulta útil e interesante tratar de obtener los usuarios existentes en el sistema objetivo a través de SMTP. Partimos de una lista de usuarios que hemos recopilado -cada uno como ha podido/querido-. El proceso de enumeración a través de SMTP es sencillo, pero tedioso, por lo que decidí que podía automatizarlo de manera sencilla en python, y así nació smtpguess. De momento smtpguess funciona en python 2.6 -debería funcionar igual en 2.5 pero no en 3.x-, requiere que el servicio SMTP esté escuchando y que el puerto en el que lo haga no esté cerrado. Lo he liberado bajo GPLv2 y está disponible para su descarga desde aquí: https://sites.google.com/site/securityetalii/
La versión actual es la 0.1 y su funcionalidad aún no es completa -falta completar el soporte SSL por ejemplo-. Por ahora permite los métodos VRFY y RCPT TO para enumerar usuarios y funciona en un sólo thread. Aquí os dejo un ejemplo de uso:
adrian@Andromeda:~$ ./smtpguess.py Missing Parameter! smtpguess v0.1 by Adrián Bravo Usage: ./smtpguess.py -h [-p ] -m -u [-s] [-v] where: -h -- Targets hostname -p -- SMTP server port -m -- Supported enumerating modes are verify and rcpt -u -- Path to the file containing user names to be tested -v -- Verbose: Shows the server responses -s -- Use SSL. NOT FULLY IMPLEMENTED IN THIS VERSION
Vamos a pedirle que se conecte a localhost, dejaremos el puerto sin especificar (por defecto es el 25) y le indicaremos que utilice el método RCPT TO, ya que normalmente el método VRFY está deshabilitado por los administradores.
adrian@Andromeda:~$ ./smtpguess.py -h localhost -m rcpt -u users.txt Trying to connect to SMTP server... Conection established successfully Enumerating Users... -------------------- --> root exists! --> lp exists! manolito doesnt exist : ( --> syslog exists! antoñito doesnt exist : ( --> adrian exists!
Como podéis ver, ha encontrado varios nombres de usuario
Ahora ya tenemos parte del trabajo, encontrar credenciales para alguno y a jugar. Y ya sabéis, si tenéis cualquier duda o sugerencia, poned un comentario.