学习笔记之xss原理篇

什么是xss

创新互联建站是一家企业级云计算解决方案提供商,超15年IDC数据中心运营经验。主营GPU显卡服务器,站群服务器,托管服务器,海外高防服务器,机柜大带宽、租用·托管,动态拨号VPS,海外云手机,海外云服务器,海外服务器租用托管等。

  XSS又叫CSS (Cross Site Script) ,跨站脚本***。它指的是恶意***者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。XSS属于被动式的***,因为其被动且不好利用,所以许多人常呼略其危害性。

XSS有哪些类型?

反射型:简单的描述就是把用户输入的数据反射给浏览器,这个数据可能是Html代码或者js代码,反射后让浏览器去执行。

存储型:把用户输入的数据(比如恶意的js代码)存储在服务器端,具有很强的稳定性,危害时间长。

DOM Based XSS:这种不是按照存储在哪里来划分的,可以说是反射型,由于历史原因,归为一类,通过改变DOM结构形成的XSS称之为DOM Based。

实际上,我认为xss主要可以分为:持久型xss非持久型xss

持久型xss就是将对客户端***的脚本植入到服务器上,从而导致每个正常访问页面的用户都会遭到这段xss脚本的***。

非持久型xss是对一个页面的url中的某个参数做文章,把精心构造的恶意脚本包装到url参数中,再将这个url散布到网上, 骗取用户访问这个url,从而对其进行***。


XSS的危害

1、劫持Cookie

2、构建Get和Post请求操作用户的浏览器,使用JavaScript模拟浏览器发包

3、XSS钓鱼

4、获取用户系统,浏览器信息

5、识别用户安装的软件

6、劫持浏览器回话,从而执行任意操作。

7、强制弹出广告页面,刷流量

8、获取用户真实ip

等等。。。。。。。。。。。。

XSS的触发条件

  了解XSS的触发条件就先得从HTML(超文本标记语言)开始,我们浏览的网页全部都是基于超文本标记语言创建的。

      而XSS的原理也就是往HTML中注入脚本,HTML指定了脚本标记.在没有过滤字符的情况下,只需要保持完整无错的脚本标记即可触发XSS,假如我们在某个资料表单提交内容,表单提交内容就是某个标记属性所赋的值,我们可以构造如下值来闭和标记来构造完整无错的脚本标记,

    "><"

    "><"

    结果形成了 <"">Hahaha

(假如做了一些过滤,还可以这样)

测试闭和表单赋值所在的标记,形成完整无错的脚本标记可触发XSS,但是没有脚本标记怎么触发XSS呢?呵呵,我们只好利用其他标记了,假如要在网页里显示一张图片,那么就要使用一个标记,示例如下:

   

    img标记并不是真正地把图片给加入到Html文档把两者合二为一,而是通过src属性赋值。那么浏览器的任务就是解释这个img标记,访问src属性所赋的值中的URL地址并输出图片。问题来了!浏览器会不会检测src属性所赋的值呢?答案是否!那么我们就可以在这里大做文章了,接触过javascript的同志应该知道,javascript有一个URL伪协议,可以使用“javascript:”这种协议说明符加上任意的javascript代码,当浏览器装载这样的URL时,便会执行其中的代码.于是我们就得出了一个经典的XSS示例:

   

    当然并不是所有标记的属性都能用,细心的你应该发现标记的属性在访问文件才触发的XSS,这里我就不再深入,因为离开标记的属性还有事件能帮助我们触发XSS.那什么是事件呢?只有达到某个条件才会引发事件,正巧img标记有一个可以利用的onerror()事件,当img标记内含有一个onerror()事件而正好图片没有正常输出便会触发这个事件,而事件中可以加入任意的脚本代码,其中的代码也会执行.现在我们又得到了另外一个经典的XSS示例:

 过滤了alert来执行弹窗

    

综合这一部分,我们知道XSS的触发条件包括:完整无错的脚本标记,访问文件的标记属性和触发事件。

预防措施

1、输入检测  

  对用户的所有输入数据进行检测,比如过滤其中的“<”、“>”、“/”等可能导致脚本注入的特殊字符,或者过滤 "script"、"javascript" 等脚本关键字,或者对输入数据的长度进行限制等等。同时,我们也要考虑用户可能绕开ASCII码,使用十六进行编码如“<”(“<”)、“>”(“>”)等来输入脚本。因此,对用户输入的十六进制编码,我们也要进行相 应的过滤。只要开发人员能够严格检测每一处交互点,保证对所有用户可能的输入都进行检测和XSS过滤,就能够有效地阻止XSS***。

2. 输出编码   

       通过前面对XSS***的分析,我们可以看到,之所以会产生XSS***,就是因为Web应用程序将用户的输入直接嵌入到某个页面当中,作为该页面的HTML代 码的一部分。因此,当Web应用程序将用户的输入数据输出到目标页面中时,只要用HtmlEncoder等工具先对这些数据进行编码,然后再输出到目标页面中。这样,如果用户输入一些HTML的脚本,也会被当成普通的文字,而不会成为目标页面HTML代码的一部分得到执行。

3. Cookie防盗   

        利用XSS***,***者可以很方便地窃取到合法用户的Cookie信息。因此,对于网站来说,不能在Cookie信息中存放太多敏感信息,也不能将 Cookie作为身份认证的唯一标识,等等。因此,对于Cookie,我们可以采取以下的措施。首先,我们要尽可能地避免在Cookie中泄露隐私,如用 户名、密码等;其次,我们可以将Cookie信息用MD5等Hash算法进行多次散列后存放;再次,为了防止重放***,我们也可以将Cookie和IP进行绑定,这样也可以阻止***者冒充正常用户的身份。

4. 严格限制URL访问   

        攻 击者使用XSS***,通常都要借助于自己指定的网站页面,比如用它来记录敏感信息等等。因此,在页面的脚本代码执行过程中,只要我们 严格限制其访问的URL,比如只允许脚本代码访问本网站的URL等方式,就可以避免脚本的执行链接到其它可能是***者指定的页面上。

5   网站程序端

       防范XSS***的一种方法是在服务器端采取防范措施。在大部分的跨站漏洞里,就是因为程序的过滤不严格,导致了***者可以在网站中加入“<”、“>”等字符,从而导致XSS***的产生.所以我们在程序的编写中就要强制过滤关键字,过滤“<”、“>”,把用户的输入放入引号内,以达到数据与代码隔离、过滤双引号,防止用户跨越许可的标记,添加自定义标记、过滤TAB和空格,防止关键字被拆分、过滤script关键字、过滤&#,防止HTML属性绕过检查.下面是一些实例

5.1   过滤“<”、“>”实例

          ***语句:<script>alert(/XSS/)</script>

          防范方法:replace(str,“<”,“&#x3C;”)&#ascii

          replace(str,“>”,“&#x3E;”)

          注:script为服务器端语句,不进行ascii解释,用户输入的语句中含有“<”,“>”,都用&#x代替.所以过滤“<”、“>”基本可以防范跨站.&#(unicode编码的十进制数)是unicode的HTML表示方式

5.2   HTML属性过滤

          上面的代码可以过滤掉“<”和“>”标记,让***者无法构造HTML标记.但是,有经验的***者就有可能会利用已存在的脚本属性来进行针对性***,假如***者利用插入图片功能,把图片的路径属性修改为一段script代码,也是可以达到跨站的目的的.

          下面我们来用实例来演示如何防范运用插图片方式进行***的手法:

           ***语句:<imgsrc=“javascript:alert(/XSS/)”width=100>

           很多的HTML标记里属性都支持“javascript:跨站代码”的形式,因此就需要对***者输入的数据进行如下转换

           防范方法:replace(str,“javascript:”,“”)

                            replace(str,“jscript:”,“”)

                            replace(str,“vbscript:”,“”)

           从而达到的效果是:用户输入的语句中含有“javascript”,“jscript”,“vbscript”,都用空白代替.从而让***者利用插入图片功能修改路径属性进行跨站***的企图失败

5.3    过滤特殊字符

          因为HTML属性的值,是用可支持“&#ASCii”的形式进行表示的,所以***语句代码可变型为:

      ***语句:<imgsrc=“javascript:alert(/XSS/)”width=100>   这样就可以突破过滤程序进行跨站***.

           其防范代码为: replace(str,“&”,“&”)   这个代码中把“&”替换为了“&”,后面的语句就变得没有意义了.

5.4    其他的方式绕过 

           过滤例如下面这段代码:

           ***语句:<imgsrc=“javascript:alert(/XSS/)”width=100>

           注意中间的空格,此空格分隔了关键字,也就是说,对Tab键进行了拆分.这样就需要考虑把Tab空格过滤.

5.5    HTML属性跨站的彻底防范

           就算是程序员考虑到了大多数的***方法,并做出了相应的过滤.***者也是有可能利用程序的缺陷进行***的.例如下面这两条语句实例:

          <imgsrc=“#”style=“XSS:expression(alert(/XSS/));”>

          <imgsrc=“#”/**/onerror=alert(/XSS/)width=100>

            ***者仍然可以绕过过滤进行XSS***,所以也要考虑到这种情况的防范.


XSS为什么真正的***过程中个很少用呢?

1、耗时间

2、有一定几率不成功

3、没有相应的软件来完成自动化***

4、前期需要基本的html、js功底,后期需要扎实的html、js、actionscript2/3.0等语言的功底

5、是一种被动的***手法

6、对website有http-only、crossdomian.xml没有用

没事可以都收据一些xss***脚本没准就用上了呢学习笔记之xss原理篇

这一篇文章很不错适合新手看  https://zhuanlan.zhihu.com/p/26177815


文章题目:学习笔记之xss原理篇
网页路径:http://scyanting.com/article/pooopi.html