只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力!
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平台
的功能还有许许多多,就先介绍到这,来直接看一下靶场是这样的。
在图片上能看到,在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?
输入之后不在拦截了,那我们右键看一下发生了什么情况,为什么没有弹窗
发现问题出在我们输入的与其本身的
配对了,导致语句并没有被执行。这里的处理方法也很简单,只用在前面在加上一个
,让其先闭合就好
测试语句:
index.php/1.txt?
这样就成功弹窗了。但是因为在现实情况中,会遇到各种个样的问题,所以我们在多学一种绕过的方式,那就是编码,要知道的js
是支持识别NITIVE
格式的,只要将弹窗语句做一下编码即可
这里能够注意到一点,并没有像刚刚那样,在前面加上一个做闭合,其实这里是不用加的,我们来看一下F12
document.write()
是输出,这里它输出了两个东西,一个是/dom_xss/?
一个就是咱们的弹窗语句,它是正大光明触发的弹窗,经过的编码既逃过了waf
的检测,实实在在的让我们的语句能够触发弹窗。
既然证明了XSS
的存在,那就需要获得flag
了,将弹窗语句替换为XSS平台
的恶意语句,当管理员用户点击链接,xss平台
就能获取管理员的cookie
【我们的flag】
XSS的防护方法可采用设置实体编码函数来处理,但记得要将单引号和尖括号设置进去,因为实体编码的函数,默认只会对双引号进行实体编码。可以跟员工普及安全知识,因为像反射型XSS需要别人的点击才会触发,所以在点击链接时因考虑一下这个链接会不会存在问题。
《最好的防御,是明白其怎么实施的攻击》