目录
1.概述
2.风险
3.存储式XSS漏洞
4.反射式XSS漏洞
5.DOM式XSS漏洞
XSS(cross site script)或者说跨站脚本是一种Web应用程序的漏洞,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
1.盗取用户cookie,然后伪造用户身份登录,泄漏用户个人身份及用户订单信息。
2.操控用户浏览器,借助其他漏洞可能导致对https加密信息的破解,导致登录传输存在安全风险。
3.结合浏览器及其插件漏洞,下载病毒木马到浏览者的计算机上执行。
4.修改页面内容,产生钓鱼攻击效果,例如伪造登录框获取用户明文帐号密码。
1.概念
存储式XSS,持久化,攻击代码是存储在Web服务器中的。
存储式XSS是当不可信的用户输入被处理并在没有任何验证的情况下保存在文件或数据库,同时该不可信的数据从存储中被获取然后在没有编码或转义的情况下反馈给其他的浏览者,导致了永久性的每次存储数据中的反馈代码就会在浏览器中执行的一种XSS漏洞。
2.影响
1.通过javascript获取用户的cookie,根据这个cookie窃取用户信息
2.重定向网站到一个钓鱼网站
3.重新更改页面内容,假装让客户输入用户名,密码,然后提交到黑客的服务器
4.生成蠕虫,迅速扩散到整个网站用户(微博等)
参考:http://www.freebuf.com/articles/web/19408.html
3.检测
攻击者向被攻击页面写入恶意代码的方法很多,最常见的就是在论坛或留言本中发帖时将html代码写入到被攻击页面中,此外在用户资料修改、签名、联系方式等地方也是攻击者写入html代码常用的地方,如果被攻击页面对用户输入过滤不严的话,就可以被攻击者写入类似如下的一段代码。
由于攻击者输入恶意数据保存在数据库,再由服务器脚本程序从数据库中读取数据。所以大部分的存储型XSS漏洞都是在表单提交上会发生的。
针对这种特性,我们需要做的就是在程序任何有可能提交表单上进行验证。
1.传统测试方式:
任意可以输入的地方,使用上面代码尝试是否可以有如下的弹窗:
这个是最简单的XSS漏洞检测方式
2.img标签属性跨站
第一种方法受挫后,黑客可能尝试利用img标签。
结果是与之前相同
3.DIV标签属性跨站
img标签外,DIV标签也可以利用。同样也是图片载入
结果是与之前相同
4.HTML标签属性的一些特点
javascript字符被过滤了,我们也可以用其它方法:
通过构造错误属性,让浏览器执行特定的javascript代码。
即使这种方式被防住,我们也可以使用自行构造事件
除了font, 还有table,a,ul等标签也可以利用
4.存储式XSS的安全防护
浏览器解析顺序:
HTML语言
CSS语言
JavaScript语言
浏览器解码顺序:
HTML编码
URL编码
JavaScript编码
第一是对用户输入的特殊字符进行转译
对HTML中不可信字符串进行HTML转义。
& &
< <
> >
" "
` `
' '
/
对于HTML属性中不可信字符串进行HTML转义,并且总是为你的属性加上引号,无论是( ‘ 或“ ),不要使用反引号( ` )。
除了字母数字字符,用格式(或者命名实体,如果可用)转义所有ASCII值小于256的字符以防止“控制”字符引伸出属性来。恰当的为属性加上引号可以只被对应的引号转义。不带引号的属性可以被分解为许多个其它字符。
对于JavaScript字符串中不可信的HTML,先执行HTML转义,然后执行JavaScript字符串转义,保持这个顺序。
创建Web应用程序应该定义允许的来自用户的标签和属性的白名单。黑名单很容易的被绕过。不推荐使用黑名单。
使用UTF-8为默认的字符编码以及设置content为text/html
不要将用户可以控制的文本放在标签前。通过使用不同的字符集注入也可能导致XSS攻击。
使用告诉你的浏览器遵循标准进行HTML解码,以及CSS的渲染如何执行。
5.常用WEB漏洞扫描工具对存储式XSS漏洞扫描方法
snuck
1.snuck是一款自动化的漏洞扫描工具,它可以帮助你扫描Web应用中存在的XSS漏洞。snuck基于Selenium开发,并且支持Firefox、Chrome和IE浏览器。
2.snuck与传统的Web安全扫描工具有显著的区别,它会尝试利用特殊的注入向量来破坏网站的XSS过滤器,并通过这种方法提高漏洞的检出成功率。基本上说,snuck所采用的检测方法与iSTAR漏洞扫描工具的检测方法较为相似,但snuck针对的是特定的XSS过滤器。
通常都是利用收集的各类XSSpayloads来进行尝试
1.概念
反射式XSS一般是提交信息的一部分内容通过服务器解析后反馈到浏览器,而不存储到服务器。
与存储式XSS不同的是,不能存储在服务器中
攻击方法一般都是构造了有恶意代码的链接(一般都是可信度高的网站)发送给受害者,受害者点击后会执行注入的XSS代码。
2.如何促发反射式xss
1.构造有问题的链接
http://.../dvwa/vulnerabilities/xss_r/?name=a%3Cscript%3Ealert%281%29%3C%2Fscript%3E
2.发送给受害者
受害者打开页面
3.服务器解析了地址,然后返回给用户
4.用户收到有scirpt注入的页面
受害者浏览器根据script内容运行
3.反射式XSS的利用与修复
基本原理:就是通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特定的代码参数会被HTML解析,执行,如此就可以获取用户的COOIKE,进而盗号登陆。
检测与修复方式与存储式XSS类似。区别仅仅是不能存储到服务端。
4.安全防范
1.第一是对用户输入的特殊字符进行转译
对HTML中不可信字符串进行HTML转义。
& &
< <
> >
" "
` `
' '
/
对于HTML属性中不可信字符串进行HTML转义,并且总是为你的属性加上引号,无论是( ‘ 或“ ),不要使用反引号( ` )。
除了字母数字字符,用格式(或者命名实体,如果可用)转义所有ASCII值小于256的字符以防止开关的值伸出属性。恰当的为属性加上引号可以只被对应的引号转义。不带引号的属性可以被分解为许多个字符,包括和。
2.对于JavaScript字符串中不可信的HTML,先执行HTML转义,然后执行JavaScript字符串转义,保持这个顺序。
3.创建个Web应用程序应该允许的来自用户的标签和属性的白名单。黑名单可以很容易的被绕过。
4.使用UTF-8为默认的字符编码以及设置content为text/html
5.不要将用户可以控制的文本放在标签前。通过使用不同的字符集注射可以导致XSS。
6.使用告诉你的浏览器遵循标准进行HTML,CSS的渲染以及如何执行
1.特点
此类漏洞也是不存储在服务器里的。
此类漏洞不需要服务器进行任何解析
漏洞是利用js代码中提取了url地址中的部分内容
JS中下面代码可以提取URL地址
document.location.href
只要网站的代码中有这类代码或类似的取URL内容的代码,就可能会有DOM式的XSS漏洞
触发形式跟反射式XSS类似,也是需要访问页面
2.检测与修复方式
与之前两类XSS漏洞不同的是:
漏洞发生原因跟服务器解析无关,存粹是JS代码读取了URL内容
因此检测JS代码:
document.location
document.URL
document.referrer
或其它类似的
修复方式主要是“在浏览器这一端对JS代码过滤”
1.写入页面前先转义
2.慎用危险的“eval”
3.编写安全的函数方法,从看似“可靠”的数据源获取参数值
4.参考/使用filter.js库