XSS 攻击原理:
XSS 属于被动式的攻击。攻击者先构造一个跨站页面,利用 script、<IMG>、<IFRAME>
等各种方式使得用户浏览这个页面时,触发对被攻击站点的 hp 请求。此时,如果被攻击
者如果已经在被攻击站点登录,就会持有该站点 cookie。这样该站点会认为被攻击者发起
了一个 hp 请求。而实际上这个请求是在被攻击者不知情的情况下发起的,由此攻击者在
一定程度上达到了冒充被攻击者的目的。精心的构造这个攻击请求,可以达到冒充发文,
夺取权限等等多个攻击目的。在常见的攻击实例中,这个请求是通过 script 来发起的,因
此被称为 Cross Site Script。攻击 Yahoo Mail 的 Yamanner 蠕虫是一个著名的 XSS 攻击实例。
Yahoo Mail 系统有一个漏洞, 当用 户在 web 上察看信件时,有可能执行到信件内的
javascript 代码。病毒可以利用这个漏洞使被攻击用户运行病毒的 script。同时 Yahoo Mail 系
统使用了 Ajax 技术,这样病毒的 script 可以很容易的向 Yahoo Mail 系统发起 ajax 请求,从
而得到用户的地址簿,并发送病毒给他人。
XSS 攻击主要分为两类:一类是来自内部的攻击,主要指的是利用 WEB 程序自身的漏
洞,提交特殊的字符串,从而使得跨站页面直接存在于被攻击站点上,这个字符串被称为
跨站语句。这一类攻击所利用的漏洞非常类似于 SQL Injec'on 漏洞,都是 WEB 程序没有对
用户输入作充分的检查和过滤。上文的 Yamanner 就是一例。
另一类则是来来自外部的攻击,主要指的自己构造 XSS 跨站漏洞网页或者寻找非目标
机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个跨站网页放在
自己的服务器上,然后通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打
开。这一类攻击的威胁相对较低,至少 ajax 要发起跨站调用是非常困难的。
案例实战:
我们来看一个简单的攻击实例,下表给出了一个简单的网站:
hp://www.bz73.com:8080/testxss,该网站的密码和用户名相同,普通用户可以修改
user value,当以 admin 身份登陆时可以通过向 doadmin.jsp 发起请求来修改 admin value。
index.jsp
<html>
<body>
<textarea rows="3" cols="100" readonly="on">
Current User: ${username}
Admin Value: ${adminvalue}
User Value: ${uservalue}
</textarea>
<br>
<a href="login.jsp"/>logout</a><br>
Login:<br>
<form ac'on="login.jsp" method="post">
username: <input type="text" name="u"></input> <br>
password: <input type="text" name="p"></input> <br>
<input type="submit" /> password == username :-)
</form>
<form ac'on="doadmin.jsp" method="post">
adminvalue: <input type="text" name="v"></input> <br>
<input type="submit" />
</form>