The Day I Almost Compromised Your Teachers - and "thoughts"
Tengo una taza de café en mi mesa y Peace Machine sonando en Spotify. Creo que estoy listo para escribir mi primer post de 2023. Aunque voy un poco tarde para el primer post del año, he tenido algunos cambios importantes en mi vida en los últimos cuatro meses. Me he mudado de Barcelona al Baix Montseny, he pedido una excedencia para trabajar en remoto para una empresa en los Estados Unidos, y posteriormente he vuelto a mi empresa anterior.
A pesar del título, que puede sonar un poco clickbait, en este post quiero incluir varias cosas.
En primer lugar, quiero compartir una charla que tenía preparada para los alumnos del Grado Superior de D.A.W del Instituto donde estudié en Torelló, pero que por motivos varios no he podido impartir. Me parecía una lástima que no pudiera explicar esto, así que si estás leyendo el post espero que seas un estudiante de dicho grado en el Instituto de Torelló (o de otro centro), y que pueda transmitirte la idea que había detrás de esta charla. Si no eres estudiante, no pasa nada, espero que disfrutes de la lectura, al igual algo te llevas también.
Aunque el “hacking” que hay de trasfondo en la historia no es tan importante, lo que me encantaría transmitir es ese sentimiento de un conocimiento insaciable, del placer de aprender por aprender sin esperar nada a cambio. Para mí, esto (entre otras) define, al menos en el inicio de una carrera laboral, a un “buen ingeniero/a de Software”.
También quería jugar un poco con cuestionar la definición del éxito. ¿Por qué iba yo a dar una charla a los alumnos? En años anteriores, se nos presentaba como “alumnos de éxito” o “buenos alumnos”, pero ¿qué es el éxito? ¿Se mide por las empresas que figuran en mi CV? ¿Es peor alguien que se queda trabajando en una consultora local de su provincia? ¿Se mide por las cifras anuales de ingresos? (Dejo estas preguntas en el aire).
Cualquiera que sea la definición de “éxito” para vosotros, me da igual. Mi idea es transmitir inquietud y que los alumnos, al salir del grado, tengan una visión más amplia de la que les podrían ofrecer sus profesores.
El estilo de este post (y el de las diapositivas) puede que algunos lo consideren “brusco”, pero quería deshacerme rápidamente de la adulación que valida el plan de estudios y que hace que los alumnos vean que sus prácticas y/o exámenes, son de utilidad, tienen sentido, etc., y así ir directo al grano. Voy a seguir el orden tal cual. Las diapositivas estaban divididas por las “preguntas clásicas”.
La primera era:
Is it worth it? Will I get a job after studying this?
Respuesta: Es probable, hay demanda, pero depende…
Cuando yo hice el grado, tuve la suerte de tener un compañero muy bueno técnicamente, y gracias a una competencia sana (echo de menos esos tiempos) y a trabajar juntos después de las prácticas, aprendimos muy rápido.
Si vives con tus padres y/o dispones de tiempo libre, y si disfrutas con lo que estás haciendo, mi consejo es que diversifiques tus actividades. Si te gusta leer, sigue leyendo; si tocas la guitarra, sigue tocando (¡Por favor! ♥️); pero si te apasiona lo que estás estudiando, dedica tiempo a ello, simplemente por el placer de aprender.
No te fijes metas inalcanzables ni busques reconocimiento en las redes sociales (al menos por ahora), ni caigas en las frases típicas de emprendedores/influencers.
Hazlo solo por el placer de aprender.
¿Por qué? Porque se pierde, y luego se justifica diciendo que al final todos estamos aquí por un salario, que obviamente es cierto, pero al menos no fue así en un inicio (de nuevo, en mi caso).
¡Ojo! Estoy generalizando… obviamente no todo el mundo es así, pero lo he visto con “frecuencia” y, personalmente, me entristece. That’s life I guess.
La intensidad del comienzo puede disminuir, es algo normal, y muchas veces en el futuro verás que es cíclico.
Sin embargo, en el sector se te valorará por otras habilidades y/o competencias. Es cierto que tu conocimiento técnico seguirá siendo importante, pero luego (al menos en mi opinión) nos dejamos influenciar por las posiciones que aparecen delante del nombre en LinkedIn, como por ejemplo: Staff/Lead/etc. Software Engineer at …. Twitter está lleno de esta toxicidad (entre otras). Entonces, seguirás formándote, pero es posible (y de nuevo, no todo el mundo) que lo hagas con el objetivo “X” en mente. ¿Era ese el motivo por el que decidiste dedicarte a esto? Eso dependerá de cada uno, pero es importante no seguir un camino por inercia o por haber sido influenciado, y darse cuenta demasiado tarde.
Entonces, ¿estás en un buen lugar? Sí, pero aprenderás las bases aquí (como mucho), el resto dependerá de ti.
Como mencioné antes, ¿Crees que alguien técnicamente bueno pero que haya decidido, por su propia voluntad o por motivos personales, trabajar en una consultora pequeña de cuatro personas estaría dando una charla aquí o en cualquier otro lugar?
Aclaro que no estoy llamando clasista a nadie, pero creo que a veces hay cierta tendencia en esa dirección.
Creo que las aulas son el lugar donde todavía podemos enseñar a valorar a las personas por lo que aportan, en lugar de idolatrarlas por su estatus o procedencia. De lo contrario, estaríamos dando un mal ejemplo con estas charlas.
Pero hagamos un acto de hipocresía y vamos a empezar con la definición del éxito estándar, la clásica, la de toda la vida. En Twitter vi que está muy de moda el hashtag #Nudismofinanciero, así que me copié y en un acto de refuerzo a la cultura neoliberal incluí en una de las diapositivas una captura de mi nómina.
¡A ver si así demostramos que somos unos tiburones!
(No la voy a incluir aquí, internet no es tan efímero como el momento slide, pero imaginad una horquilla entre 100K - 130K brutos/anuales - mediante EOR.)
Sí, es posible ganarse bien la vida, fin de la historia.
El salario que mencioné fue durante el “break” en Estados Unidos, remoto 100%.
El sueldo no siempre se correlaciona con un “buen” nivel técnico. Al menos ese fue mi caso en Estados Unidos.
Algunos, si leen esto, podrían pensar que es mejor cobrar mucho y “jugar” con sideprojects… pero personalmente, no me compensa, y créeme que he reflexionado mucho sobre ello. Por supuesto, podrás pagar las facturas y ahorrar mucho, pero a mis 28 años, tengo tiempo para hacer otras cosas, equivocarme, volver a empezar, etc.
Capítulo cerrado. Esa nomina no es gracias al grado superior tampoco… He echado muchas horas programando y aún me quedan muchas más. La suerte también juega su papel, así que no os creáis todo lo que os cuentan… Tener un buena posición o sueldo no es sinónimo de nada. A veces coinciden, pero no siempre. ¿Deberíamos cambiar a los speakers habituales que dan charlas? Casi siempre son los mismos. ¿Es más importante la “imagen” que los hechos para inspirar a las nuevas generaciones? El problema es que no vemos muchos casos de “éxito” en la imagen inversa. Me parece un debate muy interesante.
¿A dónde quieres llegar, Edgar? Ni idea, pero este es mi post y aquí digo lo que me parece.
¿Qué hace un buen programador? Eso defínelo tú. Yo no reparto carnets de ingeniero/programador…
Este post será largo, así que si has llegado hasta aquí, gracias!
Me saltaré las preguntas clásicas restantes que básicamente eran un resumen del stack que utilizo en mi día a día para que sepas si estás actualizado o por dónde tirar, etc. Si quieres preguntarme más, puedes hacerlo en Twitter.
¡Vamos al lío!
Intro
The Day I Almost Compromised Your Teachers
Recuerdo las prácticas con un amor/odio muy fuerte. No te pagan (al menos a mí no me pagaron), pero es un lugar magnífico donde aprender (o debería). Normalmente, son pequeñas consultoras, lo cual es perfecto, ya que son el caldo de cultivo ideal para experimentar con diferentes tecnologías, lenguajes, infraestructuras y como no… vulnerabilidades. Además, es posible marcar la diferencia y hacer un favor enorme a la empresa si eres capaz de encontrar alguna. (Siempre dependiendo de cómo se lo tomen…)
Que conste que no estoy haciendo apología de actos cibercriminales sin permiso. Mi posición es la de investigar más allá de lo que te enseñan. No te quedes solo con saber cuándo es mejor usar un simple array o un Set en JavaScript (¡que también es importante!), pero hay mucho más por explorar.
El “hacking” no me ha dado ni un euro. He invertido mucho tiempo en ello. ¿Es una inversión inteligente? Ah… vuelve a leer lo que dije sobre el éxito, a ver si todo tiene que traducirse en rendimiento económico para ser considerado inteligente No me ha generado ni un euro, pero al mismo tiempo me ha ahorrado algunos. :)
Sin embargo, si hay algo que me ha dado, son momentos de diversión brutal y un nivel WTFs por minuto increíble.
Y aquí es donde encontramos el hilo conductor de todo este post:
Curiosidad, investigar por amor al arte (y consultoras).
En mi opinión, creo que la IA (Nota: Prueba Phind es top!) no nos quitará nuestros trabajos, por ahora, sino que nos ayudará muy significativamente. Entonces, quiero pensar que lo que más vale la pena desarrollar (entre otros) es la capacidad de pensamiento “creativo”, lateral, llámalo como quieras.
Day 0
The Day I Almost Compromised Your Teachers
El factor suerte también juega un papel importante aquí. Puede que un día estés navegando por una página web común, incluso podría ser la página web de tu empresa de prácticas, y te encuentres con una URI como esta:
https://www.example.com/index.php?page=xls&table=ofertas&query=
¿Lo ves, verdad? Sin tener acceso previo al código, podemos suponer que la página está invocando una función que nos permitiría descargar la información de la tabla de Ofertas en formato XLS. El parámetro de consulta está vacío… ¿Aceptaría una consulta? ¿Podría dejar el campo de tabla en blanco y tener acceso a un cliente de MySQL a través de HTTP? ¿Tendrá algunas consultas bloqueadas? ¿Quién es el usuario que ejecuta esas queries en el servidor? ¿Podré obtener una shell? ¿Credenciales? ¿Hay más sitios hospedados en ese servidor? ¿Será un CMS personalizado de la empresa que ha creado esta web? ¿Quiénes son? ¿De dónde son?
Preguntas miles. Pues a investigar.
Pero antes, disclaimer.
Lo primero sería probar a obtener las tablas:
https://www.example.com/index.php?page=xls&table=&query=SELECT table_name FROM information_schema.tables;
La request anterior nos devuelve un excel con 597 rows… y las tablas tienen nombres claros, como “admin_users”, “marketing_reports” o “stock_123”.
A continuación, se podría intentar obtener información de la tabla de usuarios administradores utilizando la siguiente consulta:
https://www.example.com/index.php?page=xls&table=&query=SELECT * FROM admin_users;
Bueno… si os encontráis con un caso así y tenéis la oportunidad de hablar con el responsable, sugiero que le recomiendes que apague el servidor.
La tabla de admin_users
incluía los correos electrónicos del personal de la consultora, junto con las contraseñas cifradas en MD5.
Day 1
The Day I Almost Compromised Your Teachers
Hemos identificado una vulnerabilidad/error en el código desarrollado. Esa URI debería estar protegida, al menos, por algún tipo de autorización específica si es necesario tener ese código allí. Aunque lo mejor sería eliminarlo por completo.
Ahora tenemos acceso a los emails, el dominio y las contraseñas, lo que nos permite buscar subdominios para ver si existe alguna forma de iniciar sesión con esos emails. También podríamos buscar más dominios bajo la misma IP, por ejemplo, utilizando el siguiente comando:
curl https://api.hackertarget.com/reverseiplookup/?q=<IP_GOES_HERE>
Resumiendo, se descubre lo siguiente:
- 200 dominios bajo la misma IP.
- 20-30 subdominios.
- Dos trabajadores de la consultora usan la misma contraseña en todos los sitios, lo que nos ha permitido acceder a sus correos electrónicos.
- Hemos encontrado un subdominio que apunta al control de versiones self-hosted, lo que nos ha dado acceso a todos los repositorios de la consultora con las mismas credenciales de usuario.
- Los correos electrónicos filtrados indican que los trabajadores de la consultora utilizan un servicio de mensajería instantánea, lo que podría ser una fuente de información adicional.
- También hemos encontrado correos electrónicos que comparten contraseñas y claves SSH en texto plano, dándonos acceso a esos servidores de inmediato.
- No se ha detectado la presencia de doble factor de autenticación en ninguno de los sitios críticos.
¿Deberíamos enseñar esto en las aulas? En mi opinión, sería interesante un enfoque de aprendizaje transversal que cubra todo, desde scripting hasta redes, etc,. como en este caso, aunque este no sea real :)
Pero, ¿y si lo fuera? Quizás ese alumno imaginario en el que estoy pensando ya habría solucionado todos estos problemas antes de que alguien más los encontrara, y espero que le hubieran dado una buena recompensa por ello.
Day 2
The Day I Almost Compromised Your Teachers
En resumen, al visitar un sitio web al que podrías acceder diariamente, encontramos una URI “sospechosa” y logramos obtener acceso a toda una organización. Esto no debería ser tan fácil.
Todos conocemos los grandes ataques dirigidos que aparecen en las noticias, como los recientes ataques al Hospital Clínic de Barcelona o a la UAB.
Espero creer que estos ataques dirigidos requieren una dificultad técnica superior (por el bien de todos…), pero
¿no sería preocupante si empezaran con la simple contraseña en MD5 de un usuario que también está registrado en una web creada por una consultora como la de este ejemplo?
Estamos llegando al final del post, y lo que sucede a continuación es bastante simple.
Como mencioné anteriormente, encontramos el control de versiones self-hosted en uno de los subdominios, y a partir de ahí pudimos acceder. Después de realizar una pequeña investigación, obtenemos el control completo de una web que alberga los registros de cientos de profesores de distintos municipios, incluyendo el vuestro.
Descargamos un archivo Excel con un formato como este:
| id | email | position | password
|----------|--------------------------|----------|---------------------------------|
| 1000 | myteachername@nice.cat | null | 7c6483ddcd99eb112c060ecbe0543e86
Las casualidades se alinearon y me llevaron a encontrar todo esto.
¿Me creerías si te explicara que incluso tirando del hilo podríamos tener gasolina gratis? Nada, nada, una locura. 🤯
Fin de la historia.
En el caso de que hubiese sido real :-) - Se reportan las incidencias y se solucionan colaborando con el equipo.
End
The Day I Almost Compromised Your Teachers
Espero haber despertado al menos tu curiosidad y señalado dónde deberías enfocarte al principio (o donde me gustaría que te enfocaras según mi opinión).
Me gustaría también animarte a ser crítico al evaluar a cualquier persona, ya sea online o en el mundo físico, antes de tomarla como modelo a seguir. Analiza quién es y por qué debería ser un referente para ti. ¿Qué tipo de “éxito” te está vendiendo? ¿Títulos? ¿Un salario? No te aísles y escucha diferentes perspectivas, pero cuando encuentres una respuesta, tómala con precaución y no como una verdad absoluta. Piensa si realmente quieres tener a esa persona como referente en tu vida por decisión propia, no porque alguien te lo venda.
Esta era mi charla, un intento de no solo mostrar el “show off” laboral, sino de expandir esa llama de curiosidad en ti mediante “el hacking”, y la de intentar poner en tela de juicio algunas cosas que a veces se nos pasan por alto.
Espero que si has llegado hasta aquí, te haya gustado.
Fins aviat! 💋