Quali codici di stato HTTP indicano che esiste una vulnerabilità SQLi?

1

In questo blogpost che descrive un pentest, il autore aggiunge ' a un campo che richiede un certo valore e conclude che esiste una vulnerabilità SQLi:

Upon further investigation adding a single quote would make the server return a 500 status error, which.... SCREAMS SQLi

Un codice HTTP 500 significa che è vulnerabile a SQLi? Oppure tutti i codici di errore HTTP significano un'iniezione SQL? Quale codice HTTP non significa un SQLi?

    
posta nothing1 27.10.2017 - 18:56
fonte

3 risposte

2

Does an HTTP 500 code mean it is an SQLi?

Un codice di errore di 500 significa Errore interno del server . Si prega di dare un'occhiata qui per i codici di stato HTTP e il loro significato. Un codice 500 in questo caso (quando si aggiunge una virgola singola) non significa necessariamente che si tratta di un SQLi, perché può avere altre cause (una cattiva prevenzione SQLi, altri problemi di analisi). Ma le probabilità sono davvero buone, che è un SQLi!

or do all HTTP error codes mean it is an SQL injection?

No. Ad esempio, potrebbe essere fornito un 400 (Bad Request) , poiché le virgolette singole non sono consentite. Questo potrebbe indicare che uno SQLi è prevenuto (in modo sporco).

Which HTTP code do not mean an SQLi?

Questo non è mai sicuro, perché la prevenzione SQLi di solito sfugge alla stringa e la memorizza nel database, mentre tutto funziona normalmente e non vengono lanciate eccezioni. Quindi in entrambi i casi (SQLi e SQLi prevenuto) il codice di risposta potrebbe essere 200 (OK) .

    
risposta data 05.04.2018 - 11:00
fonte
1

Non ci sono codici di errore per le iniezioni SQL. Il codice di stato HTTP 500 indica semplicemente un errore interno del server. Quando si è in grado di rompere il codice aggiungendo solo alcuni caratteri speciali, il codice è vulnerabile a un'iniezione SQL poiché l'input non è sterilizzato,

Ad esempio:

$sql = "SELECT * FROM mytable WHERE name = '$name'";

Quando si aggiunge "Jose's" nel campo, l'istruzione SQL sarebbe:

$sql = "SELECT * FROM mytable WHERE name = 'Jose's'";

che sarebbe un errore nella sintassi.

Se l'input non è igienizzato, è possibile aggiungere ulteriori istruzioni SQL dopo "e quindi eseguire le proprie istruzioni SQL.

    
risposta data 27.10.2017 - 19:03
fonte
-1

Supponiamo che l'URL assomigli a questo:

http://anysite.com/somefile.php?id=1

E la query diventa:

SELECT * FROM product WHERE id='1'

Ora, quando provi a iniettare la singola citazione in questo modo:

http://anysite.com/somefile.php?id=1'

Quindi la query diventa questa:

SELECT * FROM product WHERE id='1''

Ma qui inserisci la citazione singola in modo che restituisca sempre l'errore di sintassi. Poiché il database non può soddisfare la query, restituirà l'errore di sintassi. Il punto di nota è che il database sta ripristinando l'errore, non il server. Quindi, non c'è alcuna relazione tra l'errore del server 500 per l'errore SQL.

Nota: gli sviluppatori possono nascondere l'errore di sintassi utilizzando @ o l'uso di altri, in modo da non visualizzare l'errore di sintassi. Quindi, SQL cieco viene in soccorso.

    
risposta data 04.02.2018 - 08:14
fonte

Leggi altre domande sui tag