Error en la base de datos: SQLSTATE [23000]: violación de la restricción de integridad. ¿Es vulnerable a SQLi?

2

Estoy realizando pruebas de penetración en un sitio. La mayoría de las solicitudes se realizan por solicitud de correos en el fondo. Cuando intercepté una solicitud utilizando Live HTTP Header y la reproduje utilizando los mismos parámetros que en la solicitud original, se generó el siguiente error (sin embargo, la solicitud original fue exitosa):

Database Error

Error: SQLSTATE [23000]: Violación de la restricción de integridad: 1048 La columna 's_id' no puede ser nula

Consulta SQL: INSERT INTO a2 . user_s_likes ( s_id , user_id , status , added_on ) VALUES (NULL, 924300, NULL, '2016-09-01 13:28: 29 ')

Aviso: si desea personalizar este mensaje de error, cree la aplicación / Ver / Errores / pdo_error.ctp Rastreo de pila

CORE/Cake/Model/Datasource/DboSource.php line 460 → PDOStatement->execute(array)
CORE/Cake/Model/Datasource/DboSource.php line 426 → DboSource->_execute(string, array)
CORE/Cake/Model/Datasource/DboSource.php line 1004 → DboSource->execute(string)
CORE/Cake/Model/Model.php line 1827 → DboSource->create(UserSLike, array, array)
APP/Controller/SController.php line 1584 → Model->save(array)
[internal function] → SController->sActivity()
CORE/Cake/Controller/Controller.php line 490 → ReflectionMethod->invokeArgs(SController, array)
CORE/Cake/Routing/Dispatcher.php line 187 → Controller->invokeAction(CakeRequest)
CORE/Cake/Routing/Dispatcher.php line 162 → Dispatcher->_invoke(SController, CakeRequest, CakeResponse)
APP/webroot/index.php line 116 → Dispatcher->dispatch(CakeRequest, CakeResponse)

La siguiente solicitud se realizó con el encabezado LiveHTTP

Host: www.xyz.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Referer: https://www.xyz.com/Dashboard/
Content-Length: 24
Cookie: live_cookie[support_chat_me]=35dbce45627dcff25cc9c2176e0d2085a; CAKEPHP=96abc64p54s524dgrj6injsfx5; __tawkuuid=e::xyz.com::C8WeiSHNj53hAYU545QNvyDPV+tNvx0+usD3q564jk2EenfhtToWQj0BER7V7cqG::2; Tawk_56497b21458b0ebc5e6d22b6=vs17.tawk.to:443::0; __auc=943798cd156cf1c4684725d7a45; PHPSESSID=kjk7fsap9kk25ib182euqfqk71; AWSELB=213575250CC01012FFAB662292465465sldfjJDHFN8A45F10D97D09300BDA1AF5D7A0DA8E6C1C41D40BC34DD2C2E0SDnskjdh Dlkf5FD6A5E;

s_id=12536&status=1

La variable s_id y el estado se enviaron a través de una solicitud posterior, sin embargo, el servidor responde con un error en la base de datos como si la variable nula se hubiera enviado. Esto solo ocurre cuando se envía una solicitud individual a través del encabezado LiveHTTP o Burp. ¿Es esta base de datos vulnerable a algún tipo de inyección SQL basada en error?

    
pregunta Abiral Shrestha 01.09.2016 - 15:53
fuente

3 respuestas

2

El error Error de error en la base de datos: SQLSTATE [23000]: la propia violación de la restricción de integridad significa que la columna 's_id' podría ser una clave principal y, debido a eso, el sistema no permite que sea nula. Los detalles publicados anteriormente no pueden dar una respuesta definitiva si la aplicación es vulnerable a la inyección de SQL o no.

    
respondido por el Chiragh Dewan 29.09.2016 - 10:57
fuente
2

Probablemente no, porque recibiste la página de error predeterminada de CakePHP. El error indica que en la solicitud faltan datos (por lo tanto, se obtuvieron valores NULL) o no se pudieron encontrar los datos a los que se hace referencia (s_id) (deberá buscar en el archivo SController.php).

Solo podría haber una inyección si el desarrollador eludió el generador de base de datos predeterminado de CakePHP (que genera el esquema de la base de datos, los modelos y las declaraciones de CRUD) e hizo una declaración de DOP personalizada.

    
respondido por el user2239149 28.11.2016 - 12:44
fuente
2

No puede determinar si el parámetro es vulnerable a SQLi solo por este error. Para obtener una prueba más definitiva, debe manipular el parámetro s_id y ver si puede obtenerlo para devolver un error sintaxis . Esto indicaría que la entrada de s_id no está siendo correctamente saneada o parametrizada.

Dado que el mensaje de error le muestra la consulta SQL, esto es bastante fácil de probar. Trate de hacer algunas de las siguientes inyecciones:

s_id = 1,1,1 & status = 1

La consulta se convierte en: INSERT INTO a2.user_s_likes (s_id, user_id, status, added_on) VALUES (1,1,1, 924300, NULL, '2016-09-01 13:28:29')

Si es vulnerable, esperaría recibir un error sobre demasiados argumentos / parámetros.

s_id = 1) & status = 1

La consulta se convierte en: INSERT INTO a2.user_s_likes (s_id, user_id, status, added_on) VALUES (1), 924300, NULL, '2016-09-01 13:28:29')

Si es vulnerable, esperaría recibir un mensaje de error sobre un paréntesis inesperado.

s_id = 1 '& status = 1

La consulta se convierte en: INSERT INTO a2.user_s_likes (s_id, user_id, status, added_on) VALUES (1 ', 924300, NULL,' 2016-09-01 13:28:29 ')

Si es vulnerable, esperaría recibir un mensaje de error sobre una cadena literal sin terminar.

Si recibe mensajes de error sobre si s_id tiene un tipo de datos incorrecto / no es un número, esto implicaría que la consulta está siendo parametrizada y, por lo tanto, no es vulnerable.

Para probar que existe una vulnerabilidad de inyección de SQL, debe probar que el valor de s_id se interpreta como SQL. Los errores de sintaxis son la forma más fácil de hacer esto.

    
respondido por el Brian Williams 26.02.2017 - 18:21
fuente

Lea otras preguntas en las etiquetas