Istruttore: Bene, ora vorrei mostrarti
un'iniezione SQL e in un file diverso
e in
una pagina diversa e ti mostrerò alcune
cose diverse che puoi fare per sfruttare la vulnerabilità.
Quindi la prima cosa che vado alla pagina di
accesso che è qui.
Informazioni utente
Quindi la prima volta che siamo andati alla pagina di accesso da lì,
questa volta siamo andati alla pagina Informazioni utente.
Quindi questa pagina ti mostrerà le informazioni sull'utente a condizione
che tu fornisca il nome utente e la password.
Quindi farò lo
zaid e inserirò la mia password, 123456.
E mostrerà i miei dettagli, nome utente e password e la
mia firma come aa.
Quindi l'affermazione che viene eseguita qui
è simile a quella che veniva eseguita al
momento del login.
Quindi selezionando la stella dagli account
in cui nome utente è ciò che hai inserito nel campo
utente e password è ciò che hai inserito nel campo password.
Quindi quello che faremo ora
vedremo un modo diverso di sfruttare questo
tipo di vulnerabilità.
Nel video
precedente, lo stavamo facendo usando una casella di testo POST.
Quindi, qualsiasi cosa tu abbia
inserito nella casella di testo è stata pubblicata usando un metodo POST nell'applicazione web.
Ora, queste vulnerabilità possono esistere in GET.
E cosa intendo
per Get, è quando fai un Get quando qualcosa viene inviato
come GET, lo vedrai qui nell'URL.
Quindi, se
guardi l'URL qui, vedi che viene inviato come
nome utente zaid e password 123456.
Vorrei solo copiare questo URL qui.
E inizieremo a
giocarci dall'URL invece di farlo sulla pagina web.
Voglio solo mostrarti un esempio
diverso perché in molti luoghi,
potrebbero non esserci nemmeno caselle
di testo, ad esempio, potrebbe essere qualcosa come
notizie e notizie. php, quindi possiamo vedere qui, ad esempio, in
questo esempio, è indice. php.
E nel tuo test con la penna, potresti
vedere qualcosa di simile alle notizie. php e,
ad esempio, id è uguale a due e quindi
puoi provare a iniettare cose lì dentro.
Quindi avremo un
esempio qui in cui inietteremo
cose nel campo del nome utente che
è questo campo e inietteremo cose qui.
Quindi ogni volta che esegui il test con
la penna, ogni volta che vedi parametri come questo,
dovresti provare a iniettarli.
Ogni volta che vedi qualcosa. php e
quindi hai un parametro uguale a qualcosa, quindi
cerca sempre di iniettare cose lì dentro e vedere
se funziona per te.
Quindi abbiamo anche visto un modo per scoprire l'iniezione
e che stava usando le virgolette e usando
il e.
Quindi facciamo un falso e un vero e
uno è uguale
a uno e poi e
uno è uguale a due e se il server sta
eseguendo ciò che vogliamo, allora sapremo che c'è un'iniezione SQL.
Ti mostrerò
un altro modo per scoprire
questi exploit e sta usando l'ordine di.
Come suggerisce il
nome, l'ordine per istruzione viene utilizzato
per ordinare i risultati che otteniamo sullo schermo in
base a una colonna specifica.
Quindi la nostra iniezione sarà così.
Quindi ordinerò per uno.
Quindi, se esiste l'iniezione, dovrebbe funzionare perché
in
ogni istruzione select dovrebbe
esserci almeno una colonna selezionata.
Pertanto, quando diciamo ordina per
uno, stiamo dicendo che voglio ordinare i
risultati in
base alla prima colonna, quindi, questo dovrebbe essere
sempre accettabile dal database.
E restituire un vero o qualcosa che ci aspettiamo.
Dobbiamo anche aggiungere il commento qui
ed eseguire questo codice.
Quindi è esattamente come prima.
Quindi, quando
lo facciamo, fondamentalmente questo è il nostro URL e cosa
accadrà sul database, quindi
questo è il codice
che viene eseguito sul database, sembrerà così.
Quindi sarà selezionata la stella dagli
account in cui il nome
utente è uguale a zaid e nota come
questo sta chiudendo il preventivo e faremo un ordine per uno e
non ci dovrebbe essere questo codice
per e, e questo commento dirà al Interprete SQL per ignorare tutto
ciò che viene dopo, quindi
tutto questo verrà ignorato.
Quindi sto copiando questo.
Quindi puoi effettivamente incollare questa iniezione per
ordine zaid da uno
nel nome proprio qui e funzionerà, ma
di nuovo, voglio solo mostrarti un
modo diverso di farlo iniettandolo attraverso il browser.
Un'altra cosa che voglio che
tu noti
è quando stai iniettando cose nel browser, il browser, il codice dovrebbe essere codificato.
Quindi, ad esempio, questo segno di solito,
quando lo metti
nell'URL, dovrebbe essere scritto come% 23.
Gli spazi, ad esempio, vengono convertiti
in% 20 e% 23 è il commento che stiamo utilizzando.
Quindi lo copierò e sostituirò il mio segno di commento con esso.
Ora, puoi google HTTP Encoder e vedrai
online che ci sono strumenti
online che lo convertiranno solo per te.
Per me ora so che l'hashtag può
essere convertito in% 20.
Ecco perché lo sto usando lì.
E io premerò Invio.
E come puoi
vedere ora, stiamo vedendo qualcosa di accettabile.
Niente di male e poi mi sta mostrando
le informazioni su zaid 123456 e mi sta mostrando la firma.
Quindi sta ignorando la password,
quindi l'iniezione ha funzionato
e sta ordinando per uno, quindi
non mi sta mostrando nulla di sbagliato.
Proviamo a rendere questo numero uno un
numero molto grande, quindi inserirò 10.000 o 100.000 ora.
Quindi quello che
stiamo dicendo in questo momento è
che voglio che tu ordini i risultati che verranno restituiti
dall'attuale istruzione select in base alla colonna 100.000.
Ora è probabile che non ci siano 100.000 colonne utilizzate
in questa istruzione select
e quindi questo dovrebbe restituire un errore.
Quindi quando eseguo questo,
vedrai che c'è un errore.
E l'errore è nell'ordine vicino.
E c'è ancora una colonna sconosciuta per 100.000 e questo è fantastico
perché ora sappiamo che
il database sta eseguendo ciò che vogliamo.
Quindi quando gli abbiamo detto di ordinare i
risultati in base alla prima colonna, ci ha mostrato i risultati.
Quindi ha seguito quello che gli abbiamo
detto e poi
quando gli abbiamo detto di ordinare i risultati in base a
una colonna che non esiste, ci ha dato un errore.
Quindi è ovviamente vulnerabile alle iniezioni di SQL.