XSS -- 三种基本漏洞 (浅谈)

一、  XSS 漏洞的验证
        我们可以用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做PoC(Proof of Concept)。验证XSS 漏洞存在的PoC 如下:
              (1)       
              (2)        
              (3)

二、XSS分类

1. 反射型XSS
        反射型XSS 是非持久性、参数型的跨站脚本。反射型XSS 的JS 代码在Web 应用的参数(变量)中,如搜索框的反射型XSS。在搜索框中,提交PoC[],点击搜索,即可触发反射型XSS。 注意到,我们提交的poc 会出现在search.php 页面的keywords 参数中。

2.存储型XSS
        存储型XSS 是持久性跨站脚本。持久性体现在XSS 代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS 通常发生在留言板等地方。我们在留言板位置留言,将恶意代码写进数据库中。此时,我们只完成了第一步,将恶意代码写入数据库。因为XSS 使用的JS 代码,JS 代码的运行环境是浏览器,所以需要浏览器从服务器载入恶意的XSS 代码,才能真正触发XSS。此时,需要我们模拟网站后台管理员的身份,查看留言。

3.基于DOM的 XSS
       DOM XSS 比较特殊。owasp 关于DOM 型号XSS 的定义是基于DOM 的XSS 是一种XSS 攻击,其中攻击的payload由于修改受害者浏览器页面的DOM 树而执行的。其特殊的地方就是payload 在浏览器本地修改DOM 树而执行, 并不会传到服务器上,这也就使得DOM XSS 比较难以检测。

三、 XSS的构造

1. 利用  [<>]  构造HTML/JS
    在测试页面 提交[]
 
2. 伪协议  ----  可以使用javascript: 伪协议的方式构造XSS
     (1)提交参数[touch me!],然后点击超链接,即可触发XSS。

     (2)也可以使用img 标签的伪协议,但是这种方法在IE6 下测试成功。[]。

3. 产生事件
     (1) “事件驱动”是一种比较经典的编程思想。在网页中会发生很多事件(比如鼠标移动,键盘输入等),JS 可以对这些事件进行响应。所以我们可以通过事件触发JS 函数,触发XSS。
    (2)事件种类
             windows 事件    对windows 对象触发的事件
             Form 事件        HTML 表单内的动作触发事件
             Keyboard 事件    键盘按键
             Mouse 事件    由鼠标或类似用户动作触发的事件
             Media 事件    由多媒体触发的事件

     例如,
       []这个标签会引入一个图片,然后鼠标悬停在图片上的时候,会触发XSS 代码。
       单行文本框的键盘点击事件,[],当点击键盘任意一个按键的时候出发。

4. 利用CSS 跨站
    我们也可以利用CSS(层叠样式脚本)触发XSS。但是这种方法比较古老,基本上不适合现在主流的浏览器,但是从学习的角度,我们需要了解这种类型的XSS。一下代码均在IE6 下测试。
    (1)行内样式
         [

]
    (2) 页内样式

 [



lalalla
]

 


    (3)  外部样式
[

hello

]  

    (4)    expression
[

]
 
    (5)   import
    [
    
    ]
 

    [

AJEST
]
 
5.  其他标签以及手法
    我们也可以用其他标签触发XSS。
      

   

四、XSS变形

    我们可以构造的XSS 代码进行各种变形,以绕过XSS 过滤器的检测。变形方式主要有以下几种
1.大小写转换
    可以将payload 进行大小写转化。如下面两个例子。   
   
    click me

2. 引号的使用
    HTML 语言中对引号的使用不敏感,但是某些过滤函数是“锱铢必较”。
(1)
(2)
(3)

3. [/]代替空格
    可以利用左斜线代替空格
   

4. tab 与回车
    我们可以在一些位置添加Tab(水平制表符)和回车符,来绕过关键字检测。
(1)
(2)click me!
click me!

5. 对标签属性值进行转码     -----   可以对标签属性值进行转码,用来绕过过滤。
   例

    (1)对应编码如下:
         字母    ASCII 码    十进制编码    十六进制编码
            a        97            a        a
            e        101            e        e

      经过简单编码之后的样子。
            click me!

    (2) 我们可以将以下字符插入到任意位置
            Tab             
            换行    
            回车    

    可以将以下字符插入到头部位置
             SOH        
             STX        
                    
       经过编码后的样子。
          
             click me!
          

6.  拆分跨站


 

你可能感兴趣的:(渗透测试)