• XSS


    xss cheat sheet 常见的测试用例

    在深入了解之前,我们先来了解一下浏览器常用的安全策略

    0x00 什么是源和同源策略

    源就是主机,协议,端口名的一个三元组。

    同源策略(Same Origin Policy, SOP)是Web应用程序的一种策略机制,该机制规定了应用程序代码可以访问的资源范围。同源策略的基本思想是,源自于某台服务器上的代码只能访问同一台服务器上的web资源。重要的事情说三遍,它只是个机制,而不是标准(哪怕标准在实现的时候也会千差万别)。SOP影响范围包括:普通的HTTP请求、XMLHttpRequest、XSLT、XBL。

    0x01 如何判断同源

    定义:给定一个页面,如果另一个页面使用的协议、端口、主机名都相同,我们则认为两个页面具有相同的源。 举个例子,我们假设需要比对的目标页面来自这个URI: http://sub.eth.space/level/flower.html 

    http://p6.qhimg.com/t01fc6b57095c09e943.png

    0x02 同源策略究竟限制了什么?

    首先,我们要明确同源策略只作用在实现了同源策略的WEB客户端上。 我们来看一个具有误导性的结论:百度词条对于同源策略的解释说“只有和目标同源的脚本才会被执行”,这是不对的,同源策略没有禁止脚本的执行,而是禁止读取HTTP回复。 更正了这个概念之后,我们会发现,SOP其实在防止CSRF上作用非常有限,CSRF的请求往往在发送出去的那一瞬间就已经达到了攻击的目的,比如发送了一段敏感数据,或请求了一个具体的功能,是否能读取回复并不那么重要(唯一的作用是可以防止CSRF请求读取异源的授权Token)。 另外,一般静态资源通常不受同源策略限制,如js/css/jpg/png等

    xss在线练习

    xss练习答案

    XSS概述

    全称 Cross Site Scripting ,跨站脚本攻击,因为CSS这名字被样式表拿走了,重名毕竟不太好,所以只好取名为XSS。那么这个“跨站”什么意思呢,强行解释的话,大概就是因为有可能会运行一个外来的脚本吧,称之为“跨站”。

    Xss分类

    xss大致分为:反射型、存储型、DOM型(这三种为主流)
    反射型xss:只是简单地把用户输入的数据”反射”给浏览器,攻击时需要用户配合点击,也叫”非持久型xss”。

      将恶意脚本附加到URL地址的参数中,特点:用户单击时触发,而且只执行一次,非持久化

    存储型xss:会把用户输入的数据”存储”在服务器端,也叫”持久性xss”,常见留言板等可以提交展示用户输入内容的功能点。
    DOM型xss:从是否存储可划分成反射型,可通过修改页面的DOM节点形成的xss漏洞。

    注意:无论反射型还是存储型,都是需要与服务端交互的,即服务端将提交的内容反馈到了html源码内,导致触发xss,也就是说返回到html源码中可以看到触发xss的代码;而DOM型xss是不与服务端交互的,只与客户端上的js交互,也就是说提交的恶意代码,被放到了js中执行,然后显示出来。那么这种形式有一个问题,就是html源码里面不存在触发xss的代码,因为服务端返回的源码都是一样的,只不过源码里面包含了一段js,这段js再执行后生成了一段xss代码,可以在审查元素中查看到。

    存储型和反射型的分别

    (原文链接在题目上,感觉那位分享人说得好有道理)

    对于存储型和反射型就好比一个是铅球,一个是足球

    铅球用力砸在地上是不是砸了一个坑?这个坑是不是一直在那儿?

    足球砸在地上是不是就反弹回来了?

    那么问题来了?

    如何攻击?

    如果是铅球的话是不是两种方法

    1.直接拿铅球丢人家!(也就是说,把带xss的恶意网址发过去)

    2.用铅球砸个坑,等用户来跳(比方说,你在留言板留了一个xss,那么所有看见留言板的用户就都掉坑里(中招)了)

    如果是足球的话,是不是只能拿球丢人家?(也就是说,把带xss的恶意网址发过去)

    最后一个问题,存储跟反射哪个危害严重?那我问你个问题,足球跟铅球打你,哪个比较痛?

    Xss危害

      xss漏洞是发生在客户端,目的是让浏览器执行一段用户提交的恶意js代码,从而达到某种目的。从表面上看,xss漏洞的危害止步于客户端,且主要就是用来执行js获取用户信息(比如浏览器版本等等)。然而由于xss漏洞可能发生的地方很多,因此被利用的情况也不统一,以下列举了xss漏洞能够造成的一些危害(xss漏洞危害包含但不仅限于以下几种)。

    • cookie劫持(窃取cookie)
    • 后台增删改文章等操作(类似于csrf骗取用户点击,利用js模拟浏览器发包,借助xmlhttprequest类)
    • 钓鱼,利用xss构造出一个登录框,骗取用户账户密码。
    • Xss蠕虫(利用xss漏洞进行传播)
    • 修改网页代码
    • 利用网站重定向
    • 获取用户信息(如浏览器信息,IP地址等)

    防御

    CSP(Content Security Policy)详细介绍

    Content Security Policy (CSP)内容安全策略,思想是以服务器白名单的形式来配置可信的内容来源,客户端Web应用代码可以使用这些安全来源。

    CSP的特点就是他是在浏览器层面做的防护,是和同源策略同一级别,除非浏览器本身出现漏洞,否则不可能从机制上绕过。

    CSP只允许被认可的JS块、JS文件、CSS等解析,只允许向指定的域发起请求。

    CSP对前端攻击的防御主要有两个: 1、限制js的执行。 2、限制对不可信域的请求。

    防御详细介绍:https://thief.one/2017/05/31/1/

     总结:总得来说防御xss的方式只是三种:httponly、过滤字符、转义字符。

    xss与htmlspecialchars实体编码

    XSS攻击的核心就是靠HTML<script>标签或元素属性来执行Javascript脚本。
    而 htmlspecialchars 则可以转义 <> 这样就无法通过script标签攻击。同时又可以过滤掉双引号,单引号(需要另外加个参数),阻止靠元素属性来触发事件执行脚本

    它的语法如下:
    htmlspecialchars(string,flags,character-set,double_encode)

        其中第二个参数flags需要重要注意,很多开发者就是因为没有注意到这个参数导致使用htmlspecialchars()函数过滤XSS时被绕过。因为flags参数对于引号的编码如下:

    可用的引号类型:

    • ENT_COMPAT - 默认。仅编码双引号。
    • ENT_QUOTES - 编码双引号和单引号。
    • ENT_NOQUOTES - 不编码任何引号。
    默认是只编码双引号的!默认只编码双引号!默认只编码双引号……重要的事情说三遍!!!  默认配置是不过滤单引号的
     

    倘若是在script、input标签当中,即可突破。
    Payload

    ' oninput=alert`1` //      当要在input中输入内容时触发事件
    ' oninput=alert`1` '       同上
    ' onchange=alert`1` //  发生改变的时候触发该事件
    ' onchange=alert`1` '   同上

    在script里直接alert

    JavaScript伪协议

    将js的内容写入到url中

    https://www.cnblogs.com/tekkaman/p/6171372.html

  • 相关阅读:
    JavaScript得到当前窗口的所有大小值
    JavaScript 变量、作用域和内存问题
    jQuery html5Validate基于HTML5表单验证插件
    新世界
    2001年的火花
    High Dynamic Range Compression on Programmable Graphics Hardware
    运筹帷幄
    你还要在学校找什么东西?
    图行天下
    Supra Team
  • 原文地址:https://www.cnblogs.com/loo5mity/p/10673343.html
Copyright © 2020-2023  润新知