zoukankan      html  css  js  c++  java
  • 渗透测试学习 十七、 XSS跨站脚本漏洞详解

     

    一般用途:拿cookie进后台,将后台地址一起发送过来

    特点:挖掘困难,绕过困难 

     大纲:

    XSS漏洞基础讲解

    XSS漏洞发掘与绕过

    XSS漏洞的综合利用

    XSS漏洞基础讲解

      XSS介绍:

        跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意的Script代码,当用户浏览该页之时,嵌入其中Web里面的Script

    代码会被执行,从而达到恶意攻击用户的目的。

      特点:

        能注入恶意代码到用户的客户端浏览器的网页上,从而达到劫持用户会话的目的。

      什么是跨站脚本?

        介绍:跨站脚本(cross-site scripting,XSS)是一种安全攻击,其中,攻击者在看上去来源可靠的链接中恶意嵌入译码。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户

    端脚本语言。

         XSS脚本示例:    

    <html>
    <head>xss test</head>
    <body>
    <script>alert(/xss/)</script>
    </body>
    </html>

     

        以上代码使用alert函数弹出来一个网页弹框,弹框内容就是/xss/,xss的输入也是可以是html代码,比如能让网站不停地刷新

        <meta http-equiv="refresh" content="0";>

        也可以嵌入其他网页链接

        <iframe src=http://xx.com with=0 height=0></iframe>

      XSS的危害

        窃取Cookies、蠕虫、钓鱼等等。

    JavaScript基础知识

      简介:JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)

    网页上使用,用来给HTML网页增加动态功能。

      document对象

          它代表着当前的页面(文档),我们调用它的write()方法就能向该对象中写入内容,即:document.write(),可以在HTML引用外部js代码<script src=x.js></script>,其中x.js的内容如下:

          document.write("hello xxx");

          在标签、属性、元素这三种地方可能会调用。

      JavaScript变量

        定义变量

          var [变量]

          e.g  var x;  var a=1;  var b="hello";  var c=ture;

      JavaScript流程控制

        if-else控制语句

          e.g 

    var a=20;
    var b=10;
    if(a>b){
    alert("b=20");
    }
    else{
    alert("b=10");
    }

        switch控制语句

          e.g

    var x=10;
    switch(x){
    case 2:
        alert('1');
        break;
    case 10:
        alert('10');
        break;
    }

        for循环

          e.g

    <script>
    for(var i=0;i<100;i++){
    alert(1);
    }
    </script>

        while循环

          e.g

    <script>
    var a=0;
    while(a<100){
    alert(1);
    a++;
    }
    </script>

     

    JavaScript函数

    function x(a,b){
    var c=a+b;
    return c;
    }
    var xx=x(1,2);
    conseole.log(xx);

     

    JavaScript事件

      onclick属性,点击事件

      e.g

    function x(){
    alert(/xss/)
    }
    <h1 onclick="x()">hello</h1>

     

    XSS分类

      反射型、DOM型、存储型

      反射型

        介绍:XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。

        e.g

    http://www.xx.com/src.asp?key="><script>alert(/xss/)</script>

        一般使用的时候是将构造好的URL发送给目标者,诱使其点击链接后触发攻击,但是这种的只能使用一次,非持久化的。

      存储型XSS

        比反射性的XSS更具有威胁性,并且可能影响到web服务器是我自身安全,这种的不需要用户自己点击特定的链接就可以执行,攻击者将恶意代码上传到服务器中,或存储在漏洞服务中,只要浏览器包含有这个恶意代码的问题,就会受到攻击。

      攻击模型

     

    XSS漏洞发掘和绕过

      火狐中常用的XSS调试插件

         hackbar、firebug、tamper data、live http headers、editor cookie(编辑cookie)

    XSS漏洞挖掘:

      挖掘方式:

        手工挖掘、工具挖掘、标签闭合、AWVS

    手工挖掘XSS漏洞

      站点:http://www.xx.com/xss.php?id=1

      将payload分别添加到id=1的地方进行测试

      常测试的地方是有输入的地方,文件上传的地方、flash、、

      闭合标签

     1  1 <script>alert(1)</script>
     2  2 "'><script>alert(1)</script>
     3  3 <img/src=@onerror=alert(1)/>
     4  4 "'><img/src=@onerrer=alert(1)/>
     5  5 'omouseover=alert(1) x='
     6  6 "onmouseover=alert(1) x="
     7  7 'onmousover=alert(1) x="
     8  8 javascript:alert(1)//
     9  9 data:text/html;base64,PHNjcmludD5==
    10 10 "';alert(1)//
    11 11 </script><script>alert(1)//
    12 12 }x:expression(alert(1))
    13 13 alert(1)//

     

     

    工具挖掘XSS漏洞

      AWVS  netsparke  appscan  burp  xsser

      xsscrapy  bratexssr  OWASP Xemotix

       当插入的代码在标签的中间时,需要闭合标签

      当插入的代码在标签的属性时,e.g  <div value="123"><script>alert(1)</script>">

      要先找到位置,尝试闭合

      在留言的地方一般是找存在存储型的XSS必须挖的地方,在存储型的多个要输入内容的框时,我们需要对每个框都进行写入测试,二一般不留弹框的代码,防止管理员发现,一般都是打cookie的代码,

      注意:闭合标签的时候要闭合他加载后的标签,对于文本域的标签加载前后都要闭合</textarea>

      常见的防XSS的代码

    1 $x=preg_replace("/script/","",$x);
    2 $x=preg_replace("/script/i","",$x);
    3 $x=preg_replace("/alert/","",$x);
    4 $x=preg_replace("/script/","",$x);
    5 这里面,i是代表不区分大小写
    6 上述的代码是指将检测到的关键字用空格替换
    7 对于区分大小写我们可以对关键字进大小写的转换
    8 对于替换成空格的我们可以重复覆盖,如:<SCRSCRRTPIPT>他将里面的一个替换成空格后还会剩下一个

       XSS绕过限制

        当存在XSS但又有waf或过滤策略时,有以下几种绕过方法:

        1、绕过magic_quotes_gpc

        2、编码绕过

        3、改变大小写

        4、闭合标签

    XSS漏洞的综合利用

      在网站上进行测试,一般就是寻找这种post型传递参数,进行交互的地方

      可以看到结果,这里是只接受数字型的参数,所以我们就没法注入xss语句了,只能寻找其他的地方

      我们在站内查找的地方输入代码,可以看到他弹框了,说明存在xss漏洞

      这个实验是要用低版本的浏览器进行测试的,在高版本的浏览器中会将这条语句检测出来,直接过滤拦截,报错无法显示。比如Google浏览器

     

     

    留言成功后并不会立即显示出什么,但是等我们登录到后台的时候,点击待审留言,就会出现弹框,这就是存储型的XSS

       也可以使用工具直接跑(BruteXSS)

      他会加载字典进行尝试

      注意:最好选择get类型的方式,如果是post会有很大的可能改变网站排版,导致网站页面扭曲等现象,危害很大;

      因为它是直接留存在服务器里面的,需要网站管理员进行恢复,更严重的可能追究你的刑事责任。

      在他的wordliet文件里面就是他的字典,在跑的时候就是加载的这个文件,里面的语句只可以自己再添加的

     

     

      平台:xss.fbisb.com

      创建一个项目

      填写相关信息

      选择默认模块,这次演示的是盗取管理员的cookie

       如下就时他给出的利用代码

      将XSS代码进行留言

      然后我们登陆管理员,看看审查元素可以发现,他将管理员的cookie发送到那个平台

     

     

       可以看到我们的项目中已经获得了管理员的cookie

      cookie利用

      此时我们用火狐的插件

      路径选择根,里面填写的内容就是在平台中给的cookie的内容

     

      然后去访问,登陆后的连接,如果还是登录不了,九江cookie中的所有信息都添加以下,多添加几个就可以了

     

    2019-05-13  23:38:55

  • 相关阅读:
    pip:No module named setuptools_rust
    pip:ffi.h: No such file or directory"
    docker一键搭建postgresql脚本(全网精华版原创)
    前端父子页面传递消息
    ubuntu内核系统安装node和npm打包前端代码
    强制刷新dom问题
    关于html中属性设置在代码中取消问题
    mybatis-mapper.xml中调用方法
    mysql内置属性及方法
    swagger入门
  • 原文地址:https://www.cnblogs.com/Yuuki-/p/10854316.html
Copyright © 2011-2022 走看看