预备知识
跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。
XSS的分类:
反射型XSS
存储型XSS
基于DOM的XSS
HTML基础知识:http://www.w3school.com.cn/html/
JavaScript基础知识:http://www.w3school.com.cn/js/
实验目的
1.能够理解XSS产生的原理。
2.了解XSS的分类。
3.掌握XSS盗取COOKIE的方法。
实验环境
一台windows7、安装wampserver、火狐浏览器、Chrome浏览器。
实验步骤一
XSS攻击,指通过在页面注入恶意JAVASCRIPT代码,从而在用户浏览被注入恶意代码的页面时,控制用户的浏览器行为的一种攻击。
XSS一般分为3类:
1.反射型XSS,相对来说,危害较低,需要用户点击特定的链接才能触发。
2.存储型XSS,该类XSS会把攻击代码保存到数据库,所以也叫持久型XSS,因为它存在的时间是比较长的。
3.DOM型XSS,这类XSS主要通过修改页面的DOM节点形成XSS,称为DOM Based XSS。
我们先来看下反射型XSS,本步骤的页面代码如下:
源码保存在C:\wamp\www\xss目录下。
功能很简单:检测用户是否通过GET方法传参,如果传了msg参数,则直接输出,否则什么都不干,需要注意的是,这个表单使用的传参方法为GET方法。
正常情况下,用户只会输入一些普通字符,也就是数字、字母或者中文,所以,不会有什么安全问题。
首先打开本次实验的页面,xss.com/xss-ref.php,随便输入一些普通字符测试,我输入的内容为“test测试”。
然后点击submit,提交数据,会直接输出我们输入的内容,注意这里使用的是GET方法传参。
但是恶意的用户就会尝试输入一些特殊字符,比如“<>'"”等,甚至直接尝试使用<script>标签来往页面插入一段JavaScript,来测试后台是否有过滤。如果服务端接收了用户的输入后,对一些特殊字符没有进行html实体编码,那么用户输入的字符就会被浏览器当成html代码解析。
我们输入<script>alert(‘xss’)</script>测试,测试XSS最常用的就是<script>alert(‘xss’)</script>,如果页面存在XSS,那么就会弹出“XSS”这个字符。
然后点击submit,弹出了XSS,说明我们输入的数据被浏览器当成指令执行了!
点击确定,发现您输入的内容后面没有任何显示,这是为什么?在页面鼠标右击,选择查看页面源码,可以看到我们输入的内容确实输出了。
为什么没有显示在页面上来呢?
因为我们输入的数据被当成了代码来执行,如何确定我们输入的数据是否被浏览器当成代码解析了呢?一个简单的办法就是查看我们输入的标签的字体的颜色,如果是深紫