zoukankan      html  css  js  c++  java
  • 2、XSS漏洞

    2 XSS

    2.1 Xss概念

    同源策略

    javaScript中的同源,需要对比 两者中的协议、域名、端口。三者完全相同才认为是同源的,否则即是来自不同源的内容。

    Xss概念

    恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

    用户提交的数据没有过滤,或者过滤不严格,输出到网页中 ,导致可以构造执行JS代码,或者修改网页内容。

    2.2 Xss危害

    •盗取用户或者管理员的Cookie

    • XSS Worm

    • 挂马(水坑攻击)

    • 有局限性的键盘记录

    2.3 Xss分类

    • 反射型

    非持久型XSS。XSS代码出现在URL参数或者请求中,浏览器发出请求时,参数值作为输入提交到服务器,服务器接受处理后参数值出现在响应的HTML中,最后浏览器解析执行了这段XSS代码。

    (1) 反射get

    (2) 反射post

    • 存储型

          又称持久型XSS,他和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器的数据库或文件中。

    • DOM

    与反射型XSS和存储型XSS的差别是在于DOM XSS的代码不需要服务器解析响应的直接参与,触发XSS靠的是浏览器DOM解析器的解析,可以完全认为是客户端的事情。

    dom1

    dom2

     

    dom3

    • flash

          利用的是网页上flash文件缺陷来执行js脚本,一般是反射型xss

     

    2.4 测试方法

    条件

    1. 需要向web页面注入恶意代码;

    2. 恶意代码能够被浏览器成功的执行。

    工具扫描:Appscan、awvs、burp suite、XSSERXSSF

    Xss输出点位置

      • 输出在标签外:需要可以构造标签

    • 输出到标签中

    如果输出在"双引号或者'单引号内部,需要能够闭合引号,如果不能闭合引号,看能否在当前的标签属性中执行js代码

    如果没有输出在"双引号或者'单引号内部,或者可以闭合引号,可以构造新属性,使用新的属性的值来执行JS代码,如事件属性

    • 输出到Script标签中

    @ 如果输出在"双引号或者'单引号内部,需要能够闭合引号,

    @ 如果不能闭合引号,需要看当前变量能不能innerHTML或者document.write,插入到网页中,如果可以就可以构造XSS,如果没有,就不存在XSS(引号内部可以使用unicode编码, < 不能编码)

    @ 如果输出"双引号或者'单引号内部,需要能够闭合引号,如果可以闭合引号,就可以直接传递进去js代码,使用注释符号,注释掉后面的js代码就可以构造XSS

    Xss输出点位置

    • 基于黑名单的过滤和基于白名单的过滤。

    • 在cookie中加入httponly属性可以在一定程度上保护用户的cookie,减少出现XSS时损失

    • (1,apache2.2.x;2.注册网站,把攻击者自己的加了httponly的cookie复制过去,补全信息)

    • Flash XSS的修复需要对相应的flash进行修改或升级替换。

    常用编码

    URL编码:一个百分号和该字符的ASCII编码所对应的2位十六进制数字。

         

    #

    %23

    .

    %2e

    +

    %2b

    !

    %21

    %3c

    %3e

    空格

    %20

    &

    %26

    (

    %28

    )

    %29

    %22

    %27

    HTML编码

          HTML实体编码:&开头,分号结尾 如“<”编码为“&lt;”

          HTML10进制: “<”编码为&#60;

          HTML16进制: “<”编码为&#x3c;

    JavaScript编码:js提供了四种字符编码的策略

    1、三个八进制数,如果不够个数,前面补0,例如“<”编码为“74”

    2、两个十六进制数,如果不够个数,前面补0,例如“<”编码为“x3c”

    3、四个十六进制数,如果不够个数,前面补0,例如“<”编码为“u003c”

    4、对于一些控制字符,使用特殊的C类型的转义风格(例如 )

    测试xss漏洞代码:

    “ /></textarea><script>alert(1)</script> ”
    
    <script>alert(1)</script>
    
    <svg onload=alert(1)>
    
    <img src=x onerror=alert(1)> 过滤<> ' " javascript,整条base64编码
    
    <img src=javascript:alert('XSS')>
    
    <img src=1 onerror="u0061u006cu0065u0072u0074(1)">  对alert十进制HTNL实体编码
    
    <img src=1 onerror="u0061u006cu0065u0072u0074`1`">  对alert十六进制HTNL实体编码
    
    <img src=1
    
    onerror="&#0097;&#0108&#000101&#114;&#116;&#40;&#39;&#120;&#115;&#115;&#39;&#41;">   实体编码的数字前加多个0绕过
    
    <a href=javascr http://www.gdftu.org.cn/ ipt:alert(1)>
    
    <a href=<script>alert(1)</script>>
    
    <a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">test</a>    base64加密
    
    <a href="javasc&NewLine;ript&colon;alert(1)">click</a> 
    
    H5新增实体命名编码  &colon; => [冒号]   &NewLine; => [换行]  (内容必须加引号)
    
    <iframe src=<script>alert(1)</script>></iframe>
    
    <object data=<script>alert(1)</script>></object>
    
    "onclick=alert(1)//                                  input标签过滤的<>符号
    
    “onchange=alert(1)
    
    onfocus=alert(1)
    
    autofocus onfcus=alert(1)

    2.5 攻击防御

          1. 在表单提交或者url参数传递前,对需要的参数进行过滤

          2. 过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出

  • 相关阅读:
    odoo开发笔记 -- 异常、错误、警告、提示、确认信息显示
    odoo开发笔记--前端搜索视图--按照时间条件筛选
    odoo开发笔记-自定义发送邮件模板
    html表格导出Excel的一点经验心得
    throw和throw ex的区别
    js中对String去空格
    根据不同的多语言环境来切换不同的页面样式的具体示例
    HTML中 :after和:before的作用及使用方法(转)
    CSS清除浮动方法集合
    页面的Tab选项卡 简单实例
  • 原文地址:https://www.cnblogs.com/guike/p/11187100.html
Copyright © 2011-2022 走看看