Cómo revisar un formulario de inicio de sesión de inyección SQL vulnerable en PHP
Resumen
Revisamos un formulario de inicio de sesión escrito en php y vulnerable a la inyección SQL. Comparamos diferentes versiones del código y creamos una carga útil de inyección SQL para cada caso.
Obtenga notas del certificado OSCP
Primer examen de código
El código es un código php para el formulario de inicio de sesión. Como podemos ver, el nombre de usuario y la contraseña de inicio de sesión se almacenan en dos variables. El valor de cada variable se toma como entrada del usuario a través de una solicitud HTTP POST.
El problema aquí es que cualquier cosa que el usuario ingrese en el formulario de inicio de sesión, se usa directamente en la consulta SQL en la siguiente línea y luego se ejecuta en el backend, lo que permite que se realicen entradas maliciosas.
Explotación
La siguiente captura de pantalla ilustra cómo inyectamos una carga útil SQL en el formulario de inicio de sesión.
Podemos probar diferentes variaciones de carga útil, como
raíz' o 1=1##
' o 1=1 — #
' o 1–
Siempre y cuando las variables de los campos de inicio de sesión no se utilicen entre comillas simples. Veremos ejemplos de código donde se citan las variables. En esos casos, la carga útil de la inyección SQL sería diferente.
La siguiente captura de pantalla demuestra la explotación exitosa del formulario de inicio de sesión.
Segundo examen del código
En la siguiente captura de pantalla, revisamos otro formulario de inicio de sesión PHP vulnerable a la inyección SQL. La diferencia es que las variables de inicio de sesión se usan entre comillas simples en la variable de consulta.
Por lo tanto, nuestra carga útil de SQL sería diferente. Nuestra carga útil en este caso debe comenzar y terminar con una cotización para cerrar las utilizadas en la variable de consulta.
Ejemplo sería:
‘ o "='
'raíz o ”='
Tercer examen del código
Modificamos el mismo código para usar paréntesis con comillas simples en la consulta SQL.
En este caso, nuestra carga útil SQL también debería comenzar con comillas simples y paréntesis.
') o verdadero–
Examen del Cuarto Código
¿Qué pasaría si el código contuviera las dos variables de inicio de sesión entre paréntesis y comillas dobles?
Nuestras cargas útiles de SQL en este caso deben cerrar el paréntesis y las comillas dobles.
”o verdadero-
“) o verdadero–
')) o verdadero–
Tutorial completo en vídeo