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

Cómo revisar el formulario de inicio de sesión PHP para inyección SQL: codificación segura

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.

Cómo revisar el formulario de inicio de sesión PHP para inyección SQL: codificación segura

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.

Cómo revisar el formulario de inicio de sesión PHP para inyección SQL: codificación segura

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:

Cómo revisar el formulario de inicio de sesión PHP para inyección SQL: codificación segura

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

Acerca del Autor

Creo notas de ciberseguridad, notas de marketing digital y cursos online. También brindo consultoría de marketing digital que incluye, entre otros, SEO, Google y meta anuncios y administración de CRM.

Ver Artículos