Come rivedere un modulo di accesso SQL Injection vulnerabile in PHP

Riepilogo

Abbiamo esaminato un modulo di accesso scritto in php e vulnerabile a SQL Injection. Abbiamo confrontato diverse versioni del codice e creato un payload SQL Injection per ciascun caso.

Ottieni le note sul certificato OSCP

Primo esame del codice

Come rivedere il modulo di accesso PHP per SQL Injection - Codifica sicura

Il codice è un codice php per il modulo di accesso. Come possiamo vedere, il nome utente e la password di accesso sono memorizzati in due variabili. Il valore di ciascuna variabile viene preso come input dall'utente tramite richiesta HTTP POST.

Il problema qui è che qualunque cosa l'utente inserisca nel modulo di accesso, viene utilizzata direttamente nella query SQL nella riga seguente e quindi eseguita nel backend consentendo il verificarsi di input dannosi.

Sfruttamento

Lo screenshot seguente illustra come abbiamo inserito un payload SQL nel modulo di accesso

Come rivedere il modulo di accesso PHP per SQL Injection - Codifica sicura

Possiamo provare diverse varianti di carico utile come

root' o 1=1##

' oppure 1=1 — #

' o 1–

Finché le variabili dei campi di accesso non vengono utilizzate con virgolette singole. Vedremo esempi di codice in cui le variabili sono citate. In questi casi, il payload dell’SQL injection sarebbe diverso.

Lo screenshot seguente mostra lo sfruttamento riuscito del modulo di accesso.

Come rivedere il modulo di accesso PHP per SQL Injection - Codifica sicura

Secondo esame del codice

Nello screenshot seguente, abbiamo esaminato un altro modulo di accesso php vulnerabile a SQL Injection. La differenza è che le variabili di login vengono utilizzate tra virgolette singole nella variabile di query

Pertanto il nostro payload SQL sarebbe diverso. Il nostro payload in questo caso dovrebbe iniziare e terminare con una virgoletta per chiudere quelle utilizzate nella variabile di query.

L'esempio potrebbe essere:

Come rivedere il modulo di accesso PHP per SQL Injection - Codifica sicura

o "='

'radice o ”='

Terzo esame del codice

Abbiamo modificato lo stesso codice per utilizzare parentesi con virgolette singole nella query SQL.

In questo caso, anche il nostro payload SQL dovrebbe iniziare con una virgoletta singola e una parentesi

') o vero–

Esame del Quarto Codice

Cosa succederebbe se il codice contenesse le due variabili di login con parentesi e virgolette doppie?

I nostri payload SQL in questo caso devono chiudere le parentesi e le virgolette doppie

"o vero–

“) o vero–

')) o vero–

Video tutorial completo

Circa l'autore

Creo note sulla sicurezza informatica, note di marketing digitale e corsi online. Fornisco anche consulenza di marketing digitale, inclusi ma non limitati a SEO, annunci Google e Meta e amministrazione CRM.

Visualizza articoli