一.什么是XSS跨站脚本
XSS(Cross Site Scripting)跨站脚本诞生于1996年。XSS一直被OWASP(Open Web Application Security Project)组织评为十大安全漏洞中的第二威胁漏洞,也有黑客把跨站脚本当做新型的“缓冲区溢出攻击”,而JavaScript则是新型的Shellcode。2011年6月份,国内知名信心发布平台新浪微博爆发了XSS蠕虫攻击,新浪微博的XSS蠕虫爆发仅持续了16分钟,感染的用户就达到将近3300个。
XSS最大的特点就是能注入恶意的HTML/JavaScript代码到用户浏览的网页上,从而达到劫持用户会话的目的。由于HTML代码和客户端JavaScript脚本能在受害者主机上的浏览器任意执行,这样等同于完全控制了WEB客户端的逻辑,在这个基础上,攻击者可以轻易地发送各种各样的攻击。
XSS是一种经常出现在WEB应用程序中的计算机安全漏洞,是由于WEB应用程序对用户输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码注入到网页中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等攻击手段。
二.XSS跨站脚本实例
如果不明白跨站脚本漏洞的成因,请思考下面的代码:
<html>
<head>andrew</head>
<body>
<script>alert("XSS")</script>
</body>
</html>
这段代码使用内置的alert()函数来打开一个消息框,消息框中显示XSS信息,使用XSS弹出恶意警告框,代码为:
<script>alert("XSS")</script>
XSS输入也可能是HTML代码段,如要使网页不停地刷新,代码为:
<meta http-equiv="refresh" content="0";>
嵌入其他网站链接的代码为:
<iframe src=http://www.baidu.com width=0 height=0></iframe>
我以一个简单的PHP网页为例来具体说明XSS攻击的原理。
<html>
<head>
<title>Andrew</title>
</head>
<body>
<form action="xss.php" method="post">
请输入名字:<br>
<input type="test" name="name" value=""></input>
<input type="submit" value="提交"></input>
</body>
</html>
xss.php:
<html>
<head>
<title>测试结果</title>
</head>
<body>
<h3>测试结果是:</h3>
<?php
echo $_REQUEST[name];
?>
</body>
</html>
以上代码使用$REQUEST[name]获取用户输入的name变量,然后直接echo输出。打开测试页面,随便输入一些信息,例如:andrew。
文本框中输入:<script>alert(/XSS/)</script>,这就导致一个XSS的生成。
php代码中使用了$_REQUEST方式获取提交的变量,因此我们可以用GET方式触发XSS,即直接浏览器访问:在xss.php后直接加?name=<script>alert(/XSS/)</script>
三.XSS漏洞的危害
以往,XSS跨站脚本一直被当成一种鸡肋漏洞,只能弹窗,稍微有点危害的就用来盗取用户Cookies资料和网页挂马。如今,只要一个站点存在跨站漏洞脚本,该站点的所有用户都可能是受害者。黑客一旦挖掘到XSS漏洞,就会利用漏洞进行会话劫持、资料窃取、渗透入侵和传播蠕虫病毒等。XSS会给网站带来的危害如下:
- 盗取各种用户账号
- 窃取用户cookie资料,冒充用户身份进入网站
- 劫持用户会话,执行任意操作
- 刷流量,执行弹窗广告
- 网页挂马
- 进行DDOS攻击
- 用户提权,进一步渗透网站
- 传播蠕虫病毒
- ……