渗透测试基础-DOM型XSS原理及实操
只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力💪!
DOM是什么,DOM型XSS又是什么
Dom
是一个与平台,编程语言无关的【端口】,它允许程序或者脚本动态的访问和更新文档的内容,结果和样式,处理后的结果能够成为显示的一部分,不依赖于提交数据到服务器端,从而客户端获得Dom中的数据在本地执行,如果Dom
中的数据没有经过严格的确定,就会产生Dom
型XSS漏洞。
在简单点描述:(Dom型Xss是一种基于文档对象模型的一种漏洞)
一个东西的出来,必定是有原因的。当我们在访问一个网站时,我们的某些操作是会使用到提供网页数据的服务器做运算的,服务器在相应的运算之后,再将结果返回给我们。这个看起来没有毛病,但是一个人的访问,对他的所有需求都给予处理的话这样服务器运算还跟的上,但如果访问的人非常的多呢?这个所需的运算量就会上升非常多,所以那些开发前辈就弄出来像DOM
这样的平台,它将我们的某些操作所需的运算,在我们本地执行,不对网站服务器发起请求,这样就减少了不必要的运算消耗。
来了解一下Dom的具体使用方法和一些它能做到的功能。
点击F12打开控制台,然后找到console
,然后在下面输入document.cookie
,它就会返回我们当前的Cookie值
输入document.url
,就会返回当前的url值
比如还有
Document.body
可获取网页body里面的全部代码
Document.domain
可获取网站域名
这些就不一一演示了,在了解高级一点的
1.getElementbyid()
返回对拥有指定id的第一个对象的引用
2.getElementbyname()
返回指定名称的对象集合
3.getElementbytagname()
返回指定标签的对象集合
4.document.write()
页面输出
5.innerHTML()
改变内容
6.eval()
执行代码
可以拿一些做演示,比如url
和write
配合,就可以在网页上显示网站的域名
Dom平台
的功能还有许许多多,就先介绍到这,来直接看一下靶场是这样的。
Dom型XSS靶场演练
在图片上能看到,在URL
上显示的/dom_xss/
其实是因为documen.write
显示出来的
在上面url
进行传参尝试一下。
简单的尝试了一下可以看到,在上面传参后,页面发生了一样的改变,这里就可以理解是,在url
传参,后端接收到了信息,将数据交给document.write
来输出到页面上。
既然url
传参可行,那试试弹窗语句
在url
后面传参后,网页受到了安全狗的阻拦,那我们这就可以用一下DNS注入
里面学来的技巧,用txt类型
放在后面,前面跟上index.php
,来绕过安全狗的阻拦。【1.apache的特性,当遇到不认识的,默认往前解析一位。2.安全狗或其他安全设备,在考虑用户体验性上,有一些妥协,比如会放入一些白名单,如url
里面带有txt
,png
这样的文件类型,不做拦截。两个搭配,就有了绕过】
测试语句:
index.php/1.txt?<script>alert(1)</script>
输入之后不在拦截了,那我们右键看一下发生了什么情况,为什么没有弹窗
发现问题出在我们输入的</script>
与其本身的<script>
配对了,导致语句并没有被执行。这里的处理方法也很简单,只用在前面在加上一个</script>
,让其先闭合就好
测试语句:
index.php/1.txt?</script><script>alert(1)</script>
这样就成功弹窗了。但是因为在现实情况中,会遇到各种个样的问题,所以我们在多学一种绕过的方式,那就是编码,要知道的js
是支持识别NITIVE
格式的,只要将弹窗语句做一下编码即可
这里能够注意到一点,并没有像刚刚那样,在前面加上一个</script>
做闭合,其实这里是不用加的,我们来看一下F12
document.write()
是输出,这里它输出了两个东西,一个是/dom_xss/?
一个就是咱们的弹窗语句,它是正大光明触发的弹窗,经过的编码既逃过了waf
的检测,实实在在的让我们的语句能够触发弹窗。
既然证明了XSS
的存在,那就需要获得flag
了,将弹窗语句替换为XSS平台
的恶意语句,当管理员用户点击链接,xss平台
就能获取管理员的cookie
【我们的flag】
漏洞总结
XSS的防护方法可采用设置实体编码函数来处理,但记得要将单引号和尖括号设置进去,因为实体编码的函数,默认只会对双引号进行实体编码。可以跟员工普及安全知识,因为像反射型XSS需要别人的点击才会触发,所以在点击链接时因考虑一下这个链接会不会存在问题。
《最好的防御,是明白其怎么实施的攻击》