¿Inyección de SQL en PostgreSQL en un campo entero?

2

Estaba intentando https://server/shared/sendemail?sendto=" y obtuve esta respuesta:

Database operation "0or1row" failed
(exception ERROR, "ERROR:  invalid input syntax for integer:"""
LINE 4:  where user_id = '"';
                     ^
")

    while executing
"ns_pg_bind 0or1row nsdb0 {
      select first_names, last_name 
      from cc_users
      where user_id = :sendto
    }"
    ("uplevel" body line 1)
    invoked from within
"uplevel $ulevel [list ns_pg_bind $type $db $sql]"
     ("postgresql" arm line 2)
     invoked from within
"switch $driverkey {
            oracle {
                return [uplevel $ulevel [list ns_ora $type $db $sql] $args]
            }
     ..."

Si pongo un ID de usuario aleatorio como en https://server/shared/sendemail?sendto=999 , el servidor muestra este mensaje:

Query did not return any rows.
      while executing
"db_1row user_to_info { *SQL* }"
      ("uplevel" body line 22)
      invoked from within
"uplevel {
ad_page_contract {
      Sends an email to the user with user_id = sendto

Mis preguntas es, es explotable? Algunas explicaciones de lo que está sucediendo serían excelentes.

    
pregunta Nemesius 29.10.2018 - 05:15
fuente

1 respuesta

4

No es una inyección de SQL, y no debería explotarse directamente como una sola, ya que has usado un parámetro con nombre ( :sendTo ) en lugar de concatenar cadenas directamente.

Sin embargo, es de hecho explotable, porque un atacante puede simplemente cambiar el número de ID y hacer que su servidor envíe correo no deseado a otras cuentas.

También, casos como este, donde el cliente envía el tipo incorrecto de entrada, activará mensajes de error informativos; un atacante ahora sabe que estás ejecutando PostgreSQL, por ejemplo.

En general, pasar la entrada directamente a las consultas SQL sin validarla es una práctica muy arriesgada.

    
respondido por el ThrawnCA 29.10.2018 - 06:05
fuente

Lea otras preguntas en las etiquetas