Questa domanda ha avuto risposta nella sezione commenti, ma questa è una risposta esplicativa per chiunque voglia guardare. Quindi, guardando lo snippet di codice potremmo effettivamente vedere
$login = "SELECT fName,lName FROM great WHERE email= '$email' AND pwd = MD5('$pwd')";
Come puoi vedere alla fine di pwd = MD5('$pwd') , il codice accetta effettivamente una password immessa dall'utente e la converte in MD5 e la confronta nel database. Ora, il piano prevede di interrompere il pwd nella query MYSQL.
Per questo, è possibile fornire ') in modo che assomigli a pwd = MD5('')') in questo caso l'ultimo ') non ha alcun utilizzo e fornirebbe Errore di sintassi SQL poiché la Query non identificherà due ')') Quindi il nostro il prossimo Piano è di commentare l'ultimo ') dalla Query, per questo ho usato il Tip Two Hyphens -- - . Ora il Magic qui è se fornisci solo -- rispetto alla Query alla fine non verrà commentato perché risulterebbe in --') Fornendoti un Errore di Sintassi! Quindi, per questo motivo, ho fornito lo spazio Intentional dopo -- e aggiunto un altro trattino per la dimostrazione. Poiché in molti casi di Blackbox SQL Injection non è possibile prevedere ed Exact Syntax error è l'unica speranza, quindi in questo commento di -- - l'ultimo trattino non ha alcun significato ma lo SPAZIO tra di essi contiene il chiave per commentare ') out dal retro.
Ora, la query funzionerebbe come al solito e, a causa della mancanza di sanitizzazione dell'ingresso, possiamo sempre VERO la query di or '1'='1' . Ma, questo da solo non risolverà il problema poiché or '1'='1' selezionerebbe Ogni RIGA dal database e il frammento di codice indicato qui sotto fa un controllo aggiuntivo qui
if($exe){
$num = mysqli_num_rows($exe);
if($num == 1){
//You are in
}
Aha, Now mysqli_num_rows > 1 Che non ti permetterebbe di andare alla parte if e non verrebbe ignorata. Quindi nel Payload iniziale, questo è l'unico motivo per cui stiamo aggiungendo LIMIT 1 per evitare le nostre righe > 1. Il LIMIT 1 seleziona la prima riga del loro database back-end e VOILA che hai visitato.
Quindi, unendo tutti questi piccoli pezzi, potremmo costruire il nostro payload finale come ') or '1'='1' LIMIT 1-- - quindi la query finale sarebbe
$login = "SELECT fName,lName FROM great WHERE email= '$email' AND pwd = MD5('') or '1'='1' LIMIT 1-- -')";
Questo è tutto! :)