- Se incorporó
- 16 Noviembre 2021
- Mensajes
- 455
Edit: Ahora que ya hicimos farándula del tema, dejó una pequeña explicación de lo que estaba mal.
Hace un tiempo en internet me encontré con ésto al interior de un sistema mirando el source del cambio de claves de usuarios, en un archivo llamado algo así como change_user_pass.php.
El perfil de la empresa era top cash en equipamiento dentro de su área técnica, y en principio uno se pregunta que diablos pasó aquí en pleno 2023, porque la cosa no termina de cuadrar. Pero la respuesta, luego de buscar los avisos de trabajo que publicaban era perfectamente lógica: "Practicantes". Incluso había gente que en linkedin tenía prácticas asociadas. Para no ahondar mas, el practicante había hasta dejado un comentario con su nombre en el archivo.
Igual todos aprenden de menos a mas, pero la culpa no es de los practicantes, si nó de los emprenegros que quieren abaratar costos a costa de personas que están aprendiendo. Lo fome es que los chismes llegan eventualmente a oidos de los empleadores (me ha tocado verlo), y entre empresarios nunca se hechan la culpa.
Lo penca del asunto, es que el tamaño del problema no da para un parchado de seguridad, el sistema se debe dar de baja o restringir a la red local de la oficina y volver a desarrollar desde cero, algo que los emprenegros por su puesto no estuvieron dispuestos a costear, es mas, querían demandar al practicante .
Entonces queda la moraleja, si uno es practicante, a veces por apuro se termina trabajando con emprenegros. Y a la larga, yo creo que es mas beneficioso quedar en una empresa donde uno pueda proyectarse aunque sea con el conocimiento aprendido y el dinero del transporte mas que apechugar solo con un sistema en la era del ciber crimen en pleno apogeo.
El source debería haber quedado usando sentencias preparadas (si fuera en PHP puro) de la siguiente forma:
PHP:// $db es una instancia de PDO $query = "UPDATE user SET pass=:user_password WHERE id=:user_id"; $statement = $db->prepare( $query ); $statement->execute([ ':user_password' => $pass, ':user_id' => $user_id ]);
En cambio, incrustar dentro del SQL una variable que viene directamente desde el front como lo es $_GET, da pie a la entrada de lo que se conoce como SQL Injection. Y aunque no fuera así, la ausencia de validaciones circundantes que no comenté, daban pié a cambirle la clave a cualquier usuario, permitiendo de esa forma un movimiento horizontal para luego escalar privilegios dentro del sistema.
Es decir que (sin inyectar nada) se puede manipular el id de usuario para cambiarle la contraseña al administrador, escalando así tus privilegios dentro del sistema de la siguiente forma (mediante GET):
Código:GET change_user_pass.php?p=12345#&id=1
Para el que quiera practicar SQL injection, dejo 2 guías, la idea es habilitar una instancia en MySQL/MariaDB por ejemplo, luego hacer log de las queries y en otra ventana tener la consola o el DBMS para el motor andando como MySQL Workbench, para ir testeando las queries a ver si sacan algo interesante, y de ésta forma aprender.
Tienen que hacerlo en las 2 formas, con sentencias preparadas y sin ellas, para ver en contraste cómo se mitiga un ataque de tipo admin' or 1 = 1, y además tienen que dejar que el programa corra normalmente para analizar como se comporta, a ver si hace lo que tiene que hacer, o si tiene algún otro tipo de fallo.
Hace un tiempo en internet me encontré con ésto al interior de un sistema mirando el source del cambio de claves de usuarios, en un archivo llamado algo así como change_user_pass.php.
PHP:
"UPDATE `user` SET pass='$p' WHERE id=".$_GET['id']." "
El perfil de la empresa era top cash en equipamiento dentro de su área técnica, y en principio uno se pregunta que diablos pasó aquí en pleno 2023, porque la cosa no termina de cuadrar. Pero la respuesta, luego de buscar los avisos de trabajo que publicaban era perfectamente lógica: "Practicantes". Incluso había gente que en linkedin tenía prácticas asociadas. Para no ahondar mas, el practicante había hasta dejado un comentario con su nombre en el archivo.
Igual todos aprenden de menos a mas, pero la culpa no es de los practicantes, si nó de los emprenegros que quieren abaratar costos a costa de personas que están aprendiendo. Lo fome es que los chismes llegan eventualmente a oidos de los empleadores (me ha tocado verlo), y entre empresarios nunca se hechan la culpa.
Lo penca del asunto, es que el tamaño del problema no da para un parchado de seguridad, el sistema se debe dar de baja o restringir a la red local de la oficina y volver a desarrollar desde cero, algo que los emprenegros por su puesto no estuvieron dispuestos a costear, es mas, querían demandar al practicante .
Entonces queda la moraleja, si uno es practicante, a veces por apuro se termina trabajando con emprenegros. Y a la larga, yo creo que es mas beneficioso quedar en una empresa donde uno pueda proyectarse aunque sea con el conocimiento aprendido y el dinero del transporte mas que apechugar solo con un sistema en la era del ciber crimen en pleno apogeo.
Última modificación: