zoukankan      html  css  js  c++  java
  • XSS的构造技巧

    XSS的构造技巧

    By:Mirror王宇阳 E-mail:2821319009@qq.com

    本文为长期持续维护,一旦遇到新的技术技巧将及时更新本文内容

    非常的欢迎技术大佬纠正并补充,也欢迎技术同僚讨论学习

    利用字符编码

    利用字符编码构造成一个xss,在道哥的书中是这样描述的:

    百度搜索存在一个script标签输出一个变量,但是转义了双引号

    var ** = "  ";alert(/xss/);" 
    

    正常情况下,双引号被转义了,后面的(引号外)内容是会被赋给**并得不到有效输出的~(一旦赋值那么这就知识一个普通的字符串,而不会构成xss)

    但是百度使用了GBK的编码方式返回页面,在返回中“%c1/”会组合成为一个Unicode字符,在浏览器中会被认为是一个合法的字符,意义:表示这个转义的斜杠就失去了作用,同理双引号也就不会被转义

    # 构造
    %c1";alert(/xss/);//
    # 页面返回效果
    var ** = "%c1/";alert(/xss/);//"
    //这时的**的值时特殊的字符 alert(/xss/);被当做一条可执行的语句存在script标签中构成了xss
    

    绕过长度限制

    存在xss漏洞的攻击点,服务端对该处有逻辑上的长度限制;在有限的长度限定内无法完成自己需要的xss语句构造!

    举例:<input type=text value="$var" > 该处的$var可以实现xss><script>alert(/xss/)</script>等一定字符限制内容的xss构造……

    如果服务端对$var变量的长度设置了字符长度限制……攻击者可以利用事件Event来缩短自己xss的字符长度例如:" onclick=alert(/xss/) 这时候也会鼠标触发事件导致xss的执行……

    但是如果长度的限制导致我们也无法使用事件来构造xss;道哥给出的解决办法是:将xss Payload写到其他地方,在构造简短的代码加载Payload xss

    使用location.hash

    location.hash是一个很好的藏代码的地方,他下载地址栏#符号后面,长度理论上没有限制而且HTTP协议中是不会计算该内容的……

    # URL构造
    http://www.xxx.com/index.html#alert(/xss执行/)
    # 构造xss $var变量的值
    " onclick="eval(location.hash.substr(1))" 
    

    当触发鼠标时间后,就会执行eval函数(执行js代码),调用location.hash的内容且从第一个字符开始(因为第0个字符是符号#)

    特定环境注释绕过长度限制

    当我们的xss测试环境下,有两个以及两个以上的可输入的文本框,则可以利用HTML的注释符特性,将两个文本框之间的HTML代码内容全部注释,最终将多个文本框之间连通在一起可以实现多字节长度的xss Payload的构造和使用……

    <base>标签

    <base>标签是一种用于定义HTML文档中定义的“相对路径”链接属性源地址的标签;通俗的说:

    <img src="/imgage/2001/9/img_222993.png">
    

    这是一个图片标签,使用的是相对地址,默认情况是从当前的位置寻找imgage文件夹一路追溯找到png图片,但是本地并没有这个png图片,这个图片是从一个图穿网站上找来的,但是没有使用绝对路径导致图片无法加载,而正有几百个img标签存在与这同样的问题;为了方便可以使用<base>标签,定义:

    <base href="http://www.xxx.con/">
    

    在这个标签之后的所有地址链接都会从这个网站开始构造成一个绝对路径进行追溯文件并加载……

    攻击者可以在适当的地方加入<base>标签,导致该标签后的所有链接地址重新定义追溯地址的起点位置,攻击者可以利用这个伪造图片、链接等等……这是一种链接地址劫持

    巧妙运用window.name

    window.name是对当前窗口的对象操作,而非document……利用window.name可以实现不一样的神奇的操作…

    index_1.html:

    <script>
    	window.name = "text";
        alert(document.domain + "~" + window.name);
        window.location = "index_2.html";
    </script>
    

    index_2.html:

    <script>
    	alert(document.domain + "~" + window.name)
    </script>
    

    最后的测试结果显示:两个HTML页面的window.name的内容为一致!由此可得出:window.name是可以跨站、跨页面实现一定的操作内容的

    同理:window.name的内容值实现了跨页面后,就可以在另外一个由该页面跳转的HTML页面中发现xss漏洞后利用window.name;若window.name是一个xss Payload语句,在页面xss利用处直接写入eval(window.name)岂不是美哉!

  • 相关阅读:
    深度学习原理与框架-神经网络-线性回归与神经网络的效果对比 1.np.c_[将数据进行合并] 2.np.linspace(将数据拆成n等分) 3.np.meshgrid(将一维数据表示为二维的维度) 4.plt.contourf(画出等高线图,画算法边界)
    深度学习原理与框架-神经网络-cifar10分类(代码) 1.np.concatenate(进行数据串接) 2.np.hstack(将数据横着排列) 3.hasattr(判断.py文件的函数是否存在) 4.reshape(维度重构) 5.tanspose(维度位置变化) 6.pickle.load(f文件读入) 7.np.argmax(获得最大值索引) 8.np.maximum(阈值比较)
    深度学习原理与框架-神经网络架构 1.神经网络构架 2.激活函数(sigmoid和relu) 3.图片预处理(减去均值和除标准差) 4.dropout(防止过拟合操作)
    Linux执行命令unable to create new native thread问题
    ElasticSearch的备份迁移方案
    Mycat高可用集群搭建
    Mogodb集群搭建
    SparkStreaming和Drools结合的HelloWord版
    Drools的HelloWord例子
    Drools环境搭建
  • 原文地址:https://www.cnblogs.com/wangyuyang1016/p/12229458.html
Copyright © 2011-2022 走看看