istruttore: parliamo di come
possiamo prevenire queste vulnerabilità ora.
La prima cosa è che molte di
queste vulnerabilità esistono a causa della funzionalità che forniscono.
Ad esempio, il problema di caricamento dei file che
abbiamo avuto, consente all'utente di caricare qualsiasi estensione di file, qualsiasi tipo
di file, questo non dovrebbe accadere, non ci dovrebbe essere
un modo per gli utenti di caricare tutti
i file che vogliono.
Forse se vuoi che caricino un'immagine, quindi
assicurati che stiano caricando l'immagine, controlla
i tipi di file.
Se ti aspetti che caricino un brano, un file MP #,
assicurati che sia un file multimediale, non un
PHP o un codice eseguibile.
Di solito, non dovresti mai
consentire agli utenti di caricare alcun file eseguibile.
I filtri possono essere utilizzati per verificare se, per
controllare l'estensione e assicurarsi
che il file in fase di caricamento sia JPEG o altro.
Ma non è
un buon modo, il modo migliore è controllare il
tipo di file e assicurarsi che il tipo di file sia un'immagine
o sia un file multimediale, invece
di controllare l'estensione perché può essere bypassata.
Il secondo tipo di vulnerabilità che
abbiamo esaminato erano le vulnerabilità legate all'esecuzione del codice.
In questi exploit, siamo stati in grado di eseguire qualsiasi codice
desiderato sul computer di destinazione.
Ancora una volta questa funzionalità dovrebbe essere
evitata, dovresti evitare di consentire agli utenti di eseguire qualsiasi tipo
di codice sul tuo server.
Cerca di evitare tutte queste
funzioni come var pass
through e tutte queste funzioni che consentono a
un utente di eseguire il codice del sistema operativo sul server.
Se hai dovuto assolutamente usare
qualcosa di simile, assicurati di analizzare l'input prima di eseguirlo.
Ad esempio, nell'esempio abbiamo visto dove il codice stava
eseguendo un ping e eseguirà il ping di tutto ciò che abbiamo inserito
nella casella di testo.
Quindi sto mettendo qui / $ textbox solo per mostrare che
questo è l'input che abbiamo inserito nella casella di testo.
Questo è come appare il
programma se sembra troppo complicato dimenticatene,
stiamo solo parlando del concetto qui.
Quindi ne parleremo qui.
Quindi, ad esempio, metti quello che abbiamo fatto
è che abbiamo inserito un IP
normale, e poi abbiamo inserito il punto e virgola, e poi abbiamo
messo un comando che volevamo fare, così per esempio ls -la.
Il problema con questo è l'applicazione
Web utilizzata per farlo così com'è, copiarlo ed eseguirlo qui.
Il che, quando esegui questo comando,
eseguirà prima il ping, quindi eseguirà ls -la che è
il comando che volevamo.
Ciò che devi fare è, ad esempio, se dovessi
farlo, ciò che ti consiglio è che non usi queste funzioni.
Se hai dovuto usare una funzione come questa, allora
quello che dovresti fare è controllare che l'input sia quello che
ti aspetti,
ad esempio, ti aspetti un indirizzo IP
e nient'altro, quindi puoi usare regex per essere
sicuro, ora io non parlerò di regex o
di cosa sia regex, regex
è fondamentalmente una regola che farà
in modo che l'input appaia
nel seguente formato.
Quindi ci vuole una
cifra, cifra punto cifra cifra cifra cifra cifra cifra
cifra cifra che se metto
qualcos'altro, allora l'applicazione web dovrebbe rifiutarla.
Puoi anche assicurarti che non ci siano
punti e virgola e che non
ci siano spazi, quindi tutto arriva come una
cosa e poi viene eseguito.
Ancora una volta, questo è un modo per renderlo più sicuro,
ma la cosa migliore è semplicemente evitare queste funzioni.
Il terzo tipo di vulnerabilità
che abbiamo esaminato era l'inclusione dei file e
ne abbiamo esaminati due.
L'inclusione di file
locale che ci ha permesso di includere qualsiasi file
sul sistema e quindi leggere
i file che causeranno una vulnerabilità di divulgazione dei file
e quindi sarai in grado di leggere qualsiasi file
sul server e quindi abbiamo esaminato l'inclusione
dei file remoti che
è molto pericoloso che ci ha permesso di includere qualsiasi
file da qualsiasi server Web in modo da poter includere shell PHP
e quindi ottenere la connessione dal computer di destinazione.
Per evitare questi, prima
di tutto, assicurati di impedire l'inclusione dei file remoti.
Quindi, nel caso in
cui qualcosa vada storto, le persone non possono includere file
dall'esterno del server e puoi farlo
allo stesso modo
in cui l'abbiamo abilitato usando l'ini in
PHP disabilitando allow_url_fopen e allow_url-include.
E se andiamo qui al nostro
Metasploitable, ti mostrerò molto
velocemente, quindi se facciamo sudo nano che è l'editor di testo / etc
/ PHP / cgi / php. ini, lo stesso file che
abbiamo usato, questo
è il file per le impostazioni di PHP.
Se apri quel
file, e ora farò Control
+ W, e cercherò allow_url.
E vuoi assicurarti che allow_url_fopen
sia impostato su
Off e allow_url_include sia impostato anche su Off.
Control + X + Y e inserisci e
questo lo salverà per te.
L'altro modo per prevenire
questi exploit è utilizzare l'inclusione di file statici,
quindi invece di utilizzare l'inclusione di
file dinamica che abbiamo visto, è possibile codificare i file
che si desidera includere nel
codice e non ottenerli utilizzando GET o POST.
Ad esempio, ciò che sta accadendo negli esempi che
vediamo negli esempi di vulnerabilità è che abbiamo
una pagina chiamata pagina o indice. php.
E poi questo indice. php accetta un parametro chiamato page
e quindi un'altra pagina,
ad esempio news. php.
E include questa notizia. php nel codice.
Allora, com'è il codice?
Nel codice PHP, vedrai qualcosa come include.
Quindi, ciò che
farà fondamentalmente, e questo sembra, credo, ciò che
fa, include tutto ciò
che viene dopo il parametro della pagina.
Quindi il codice prenderà in modo dinamico tutto ciò che arriva dopo
il parametro della pagina e lo includerà nella pagina
corrente, quindi sarà nell'indice. pagina php.
Va bene,
questo è molto brutto perché anche
se non è GET,
a volte le persone
usano POST e in POST non lo vedrai
quindi verrà pubblicato ma puoi
usare un proxy come
Burp proxy e questo sembrerà
così e poi puoi modificarlo e farlo includere tutto
quello che vuoi, quindi viene visualizzato sulla pagina.
Ciò che vogliamo davvero fare è che l'utente non sia in grado
di manipolare ciò che verrà incluso, quindi se si
desidera includere una pagina chiamata notizie. php, includilo semplicemente all'interno
di questo senza dare
all'utente la possibilità
di cambiarlo.
So che programmerai il
tuo codice in modo che assomigli a questo, ma gli utenti,
sappiamo, abbiamo visto come gli utenti possono
giocare con questo e farlo includere
per includere tutto ciò che vogliono.
Il modo migliore per farlo è solo
per farlo includere la pagina. php quindi
il tuo codice non utilizza alcuna variabile.
È hard coded, potrebbe allungare il codice ma
è molto più sicuro.