XSS原理分析、绕过及利用思路

作者: H0r2yC 分类: 渗透测试 发布时间: 2019-09-04 19:52

目录

前言

XSS漏洞原理

DOM XSS详解

XSS过滤绕过

XSS进阶攻击方式

0x01 前言

    好久没更了,最近一直在忙别的事情,接下来会不定期更新,每一篇文章力求干货,谢谢支持。

0x02 漏洞原理

    之前的项目每次做到xss漏洞验证就结束,对于漏洞的利用一直没有深入研究,前几天经过前辈指点发现自己对于DOM XSS等一些漏洞原理了解有些出入,所以打算把原理重新梳理一下,结合漏洞利用过程能在脑海中有一个清晰的概念。

xss漏洞原理:

通过对网页注入了可执行的代码,并导致代码执行,就形成了XSS攻击。

XSS按形式分为:反射XSS,存储XSS,按照触发介质分为JSXSS,FLASHXSS,按照接口分为DOM XSS以及非DOM XSS。

    在这之前我以为的XSS分类是反射XSS,存储XSS,DOMXSS三种,但是实质上并没有这种分类,因为这三种XSS并没有相同的分类依据,之前我一直想不明白DOM和反射型到底区别在哪里,现在来看其实没办法区分,可以说反射型XSS包含了DOM base XSS,只不过DOM base XSS触发在DOM中。

0x03 DOM base XSS详解

    DOM(文档对象模型)是由W3C定义的访问HTML和XML文档的标准,可以把它简单的理解成就是一个可以访问的库,库中包含各种标签(html,head,body等),JS可以非常方便的对标签的值进行调用。而DOM中的某些对象是可以被客户端控制修改的,比如url、location等,DOM base XSS就是通过DOM对象实现的攻击,由于DOM是前端直接呈现的,所以发生在客户端,不与服务端进行交互。这里通过pikachu的环境做一个演示, 输入xss,点击,发现输入框下面出来一个可以点击的内容what do you see?,看一下源码发现输入内容作为href指向的内容

构造一个简单的payload

分析一下这个payload:

#' onclick="alert(123)"

无论我们正常输入还是构造了payload输入,通过源码可以发现都是在<a>标签内,正常输入xss时标签内内容是

<a href="xss">what do you see?</a>

当我们点击的时候会跳转到当前目录的xss目录下,但是我们需要触发XSS,所以这里使用#号,#在HTML中被解析为锚点,不设置其他锚点的情况下默认#指向页面TOP位置。接着使用双引号闭合标签,这时候发现payload没办法触发,找到源码看一下

发现href内容是使用’闭合,所以构造的payload也需要用单引号闭合,接着添加一个点击的事件onclick=”alert(123)”

这时候可以在页面中看到a标签内容为

<a '="" onclick="alert(123)" href="#">what do you see?</a>

成功触发。

0x04 XSS过滤绕过

1.大小写绕过

    例如:

<script>alert(xss)</script>

,使用大小写绕过为

<ScrIPt>AleRT(Xss)</sCRipT>

2.url编码绕过

    将传递的参数内容进行url编码

%31%32%33%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%22%78%73%73%22%29%3C%2F%73%63%72%69%70%74%3E

3.HTML实体编码绕过

    在过滤了特殊符号的情况下,可以尝试进行HTML实体编码绕过,例如:

<script>alert(xss)</script>

使用HTML实体编码为

<script>alert(xss)</script>

4.unicode绕过

使用JS的fromCharCode()方法,将内容转换为unicode,例如:

<script>alert(xss)</script>转换为<script>alert(String.fromCharCode(120, 115, 115))</script>

测试中我把alert函数进行unicode编码之后,没有被解析,对payload部分进行unicode才会正常弹窗,但是在script脚本包含内应该都能被执行,后面会再结合浏览器解析原理进行研究,再发一篇文章。

5.标签绕过

    除了直接使用<script>标签外,还可以使用其他标签引用JS,如img或embed,标签可以配合onerror等事件函数执行js。常用的事件函数还有onmouseover,onload等,alert被过滤还可以使用confirm,prompt函数。

<img src=1 onerror="alert(document.cookie)">

实际中我们可能遇到不同的触发点位置,仔细观察触发点标签位置,尝试黑名单绕过,构造payload

其他绕过方式,可参考

https://blog.csdn.net/free_xiaochen/article/details/82289316

http://blog.nsfocus.net/xss-advance/

0x05 XSS利用方式

之前做的项目一直停留在cookie方面,虽然cookie简单又直接,但是总感觉对于XSS这个漏洞利用方式了解太少。

1.XSS跳转

图片点击跳转

payload:

<img onclick="window.location.href='http://www.h0r2yc.cn'" width='300' src='http://www.h0r2yc.cn/avatar.png'/>

JS劫持跳转

payload:

<script>window.location.href="http://www.h0r2yc.com";</script>

JS被执行后直接跳转

可以创建一个多次操作的js文件,通过xss执行该js执行一系列操作,如添加后台系统管理员、用户等。

0x06 小结

    通过写文章的过程对于XSS原理有一定的了解,但是对于XSS的利用还有很多姿势没有解锁,由于公众号最多修改20字,所以后续会继续更新XSS利用在博客文章。

参考资料

https://www.anquanke.com/post/id/156377?appinstall=0

https://blog.csdn.net/free_xiaochen/article/details/82289316

https://www.hackersb.cn/hacker/85.html

http://blog.nsfocus.net/xss-advance/

https://blog.csdn.net/dongxie_tk/article/details/78529717

     

如果觉得我的文章对您有用,欢迎关注我的公众号:网安成长笔记