zoukankan      html  css  js  c++  java
  • XSS攻击与绕过

    概念:

      1、跨站脚本(Cross-Site Scripting),简称XSS或CSS或跨站脚本攻击,是一种针对网站应用程序的安全漏洞攻击技术,代码注入的一种。

      2、XSS漏洞一直被认为是web安全中危害较大的漏洞,在owasp一直处于top3,而在对sql注入防范越来越严密的今天,xss也成了绝大部分黑客更喜欢的漏洞利用方式。

      3、XSS可分为三种:反射性、存储型、DOM型

    原理:

      攻击者再有漏洞的前段页面嵌入恶意代码,导致受害者访问页面时不知情的情况下触发恶意代码,获取受害者关键信息。

    反射性XSS

    反射性XSS又称非持久型XSS,这种攻击方式往往具有一次型。

    攻击方式:攻击者通过电子邮件等方式将包含XSS代码的恶意连接发给目标用户。当目标用户访问改链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,浏览器解析这段代码后就会触发XSS攻击,完成攻击者想要的功能(获取cookie、url、浏览器信息、IP等)

    例:

    1、“输入”表单中输入内容,单击“提交”按钮后,将输入的内容放到“输出”表单中,例如当输入“12”,单击“提交按钮”,“12”将被输出到“输出”表单中。

    2、当访问http://127.0.0.1/web/XSS/xss1.php?xss_input_value="><img src=1+onerror=alert('xss')>

    输出到页面的HTML代码变成了如下所示。可以看到,输入的双引号闭合了value属性的双引号,输入的>闭合了input的标签<,导致输入的<img src=1 onerror=alert(‘xss’)>变成了HTML标签。

    浏览器渲染时,执行了<img src=1 onerror=alert(‘xss’)>,JS函数alert()导致浏览器弹窗。

    (注::弹框实际上并不能造成什么危害,但这是我们用来测试xss漏洞点的一个方法。

    <script>标签中可以执行javascript代码,所以理论上可以做任何事)

    存储型XSS:

    存储型XSS又称持久型XSS,攻击脚本将被永久地存放在目标服务器的数据库或文件中,具有很高的隐蔽性。

    攻击方式:这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意叫你本的帖子时,恶意脚本会在他们的浏览器中得到执行。

    例:

    1、储存型XSS页面实现的功能是:获取用户输入的留言信息,标题和内容,然后将标题和内容插入到数据库中,并将数据库的留言信息输出到页面上。

    2、当输入标题为<img src=X onerror=alert(‘xss’)>,然后将标题输出到页面时,页面执行了<img src=1 onerror=alert(‘xss’)>,导致弹窗。此时,这里的XSS就是持久性的,也就是说,任何人访问该URL时都会导致一个显示XSS的框

     DOM型XSS:

    DOM全称Document Object Model,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。

    DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。

    HTML的标签都是节点,而这些节点组成了DOM的整体结构——节点树。通过HTML DOM,树中的所有结点均可通过JavaScript进行访问。所有HTML元素(节点)均可被修改,也可以创建或删除节点。

    攻击方式

    用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。

    1、XSS常用的测试语句:

      <script>alert(1)</script>

      <img src=x onerror=alert(1)>

      <svg onload=alert(1)>

      <a href=javascript:alert(1)>

    2、常见的绕过

    JS编码、HTML实体编码、URL编码

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

      三个八进制数字,如果个数不够,在前面补0,例如“e”的编码为“145”。

      两个十六进制数字,如果个数不够,在前面补0,例如“e”的编码为“x65”。

      四个十六进制数字,如果个数不够,在前面补0,例如“e”的编码为“u0065”。

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

    HTML实体编码:  

      命名实体:以&开头,以分号结尾如 “<”的编码是“<”。

      字符编码:十进制、十六进制ASCII码或Unicode字符编码,样式为“&#数值”。例如”<”可以编码为“<”和“<”。

    URL编码:

      在使用XSS编码测试时,需要考虑HTML渲染的顺序,特别是针对多种编码组合时,要选择合适的编码方式进行测试。

  • 相关阅读:
    Ubuntu18.04连不上网的解决办法
    springboot 踩雷 invalid bound statement (not found): com.atguigu.springboot.mapper.employeemapper.getempbyid
    IDEA的pom文件总是出现Failed to read artifact descriptor forXXX:jar:unknow的解决方法
    IDEA快捷键记录
    在ubuntu18.04中使用chorme浏览器,发现鼠标向下滑动速度真的很慢!更改鼠标滚动速度解决!!
    使用docker拉取镜像时,一直报错get https://registry-1.docker.io/v2/: net/http: tls handshake timeout
    启动django服务器访问admin站点时,django服务器自动关闭的问题解决方案。
    mathtype 6.9 setup cannot continue as an installation of mathtype 7 has be detected。彻底删除MathType的方法。
    转载:Microsoft Office 365激活,一键激活,无需登录Microsoft账号,无需下载KMS等激活工具,cmd命令激活。
    SpringBoot快速开发01
  • 原文地址:https://www.cnblogs.com/xiangbing123/p/12969428.html
Copyright © 2011-2022 走看看