Errore di errore del database: SQLSTATE [23000]: violazione del vincolo di integrità. È vulnerabile a SQLi?

2

Sto eseguendo test di penetrazione su un sito. La maggior parte della richiesta viene eseguita per posta in background. Quando ho intercettato una richiesta utilizzando l'intestazione HTTP Live e l'ho riprodotta utilizzando gli stessi parametri della richiesta originale dopo che l'errore era stato generato (tuttavia la richiesta originale era andata a buon fine):

Database Error

Errore: SQLSTATE [23000]: Violazione del vincolo di integrità: 1048 La colonna 's_id' non può essere null

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

Avviso: se si desidera personalizzare questo messaggio di errore, creare app / Visualizza / Errori / pdo_error.ctp Stack Trace

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 seguente richiesta è stata effettuata con l'intestazione 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

Il s_id e la variabile di stato sono stati inviati attraverso la richiesta post, tuttavia il server sta rispondendo con un errore del database come se fosse stata inviata una variabile nulla. Ciò accade solo quando vengono inviate singole richieste tramite intestazione LiveHTTP o Burp. Questo database è vulnerabile a qualche tipo di iniezione SQL basata su errori?

    
posta Abiral Shrestha 01.09.2016 - 15:53
fonte

3 risposte

2

Errore Errore di database Errore: SQLSTATE [23000]: La violazione del vincolo di integrità stesso indica che la colonna 's_id' potrebbe essere una chiave primaria e, a causa di ciò, il sistema non gli consente di essere nullo. I dettagli pubblicati sopra non possono dare una risposta definitiva se l'applicazione è vulnerabile all'iniezione SQL o meno.

    
risposta data 29.09.2016 - 10:57
fonte
2

Molto probabilmente no, perché hai ricevuto la pagina di errore predefinita di CakePHP. L'errore indica che nella richiesta mancano i dati (da cui derivano valori NULL) o che i dati di riferimento (s_id) non sono stati trovati (è necessario guardare il file SController.php).

Potrebbe esserci un'iniezione solo se lo sviluppatore ha aggirato il generatore di database predefinito di CakePHP (che genera schema di database, modelli e istruzioni CRUD) e ha creato un'istruzione PDO personalizzata.

    
risposta data 28.11.2016 - 12:44
fonte
2

Non è possibile determinare se il parametro è vulnerabile a SQLi in base a questo solo errore. Per una prova più definitiva, è necessario modificare il parametro s_id e vedere se è possibile ottenerlo per restituire un errore sintassi . Ciò indicherebbe che l'input di s_id non viene correttamente disinfettato o parametrizzato.

Poiché il messaggio di errore mostra la query SQL, è piuttosto facile da testare. Prova a fare alcune delle seguenti iniezioni:

S_ID = 1,1,1 & status = 1

La query diventa: INSERISCI A2.user_s_likes (s_id, user_id, status, added_on) VALUES (1,1,1, 924300, NULL, '2016-09-01 13:28:29')

Se vulnerabile, ti aspetteresti di ricevere un errore su troppi argomenti / parametri.

S_ID = 1) & status = 1

La query diventa: INSERISCI A2.user_s_likes (s_id, user_id, status, added_on) VALUES (1), 924300, NULL, '2016-09-01 13:28:29')

Se vulnerabile, ti aspetteresti di ricevere un messaggio di errore su una parentesi inattesa.

S_ID = 1' & status = 1

La query diventa: INSERISCI A2.user_s_likes (s_id, user_id, status, added_on) VALUES (1 ', 924300, NULL,' 2016-09-01 13:28:29 ')

Se vulnerabile, ti aspetteresti di ricevere un messaggio di errore su una stringa letterale non terminata.

Se ricevi messaggi di errore su s_id che hanno un tipo di dati errato / che non sono un numero, questo implicherebbe che la query sia parametrizzata e quindi non sia vulnerabile.

Per dimostrare che esiste una vulnerabilità di SQL injection, è necessario dimostrare che il valore di s_id è interpretato come SQL. Gli errori di sintassi sono il modo più semplice per farlo.

    
risposta data 26.02.2017 - 18:21
fonte

Leggi altre domande sui tag