网络安全从入门到精通 (第六章-3) Dom Based XSS
本文内容:
- 什么是DOM Based XSS
- Dom型XSS核心
- DOM Based XSS
1,什么是Dom Based XSS
Dom Based XSS漏洞是基于文档对象模型的一种漏洞。
Dom是一个平台,编程语言无关的接口,它允许程序或脚本动态地访问更新文档内容,结构和样式,处理后的结果能够成为现实页面的一部分。
Dom中有很多对象,其中一些使用户 可以操纵的。如URL,location,refelTer等。
简单来说:
Dom的核心就是操纵document,document的核心就是操纵浏览器。
每个载入浏览器的HTML文档都会成为document对象,所以注意一件事:
Dom型攻击与服务器基本没关系,document是一个JS语句
浏览器F12控制台运行的一般都是JS
2,Dom型XSS核心:
原本 不应该出现XSS的地方,但是经过javascript的操作之后产生XSS。
举例:
script=>后端过滤了这个代码
<script> <= javascript 它会自动的把+号变为为P
<script> 就变成了<scri+t> 然后这样后端就不认识它了,就会输出,然后经过js的渲染之后,它就产生了漏洞。
3,Dom Baesd XSS
每个载入浏览器的HTML文档都会成为Document。
Document对象使我们可以从脚本中HTML页面中的所有元素进行访问。
Document对象是可以被操作的,它操作室当前网页,可以被JS操作。
Document对象属性:
body:提供对<body>元素直接访问,对于定义了框架集的文档,该属性引用最外层的<frameset>。
cookie:设置或返回与当前文档有关的所有cookie。
domain:返回当前文档的域名。
lastModified:返回文档被最后修改的日期和时间,可以通过它判断页面是不是伪静态。
referer:返回载入当前文档的文档URL。
title:返回当前文档的标题。
URL:返回当前文档的URL。
注意:
XSS窃取COOKIE其实XSS平台就实用累洗浴Document.cookie这样的东西,来获取页面的Cookie值。
js是在客户端运行的,是不占用服务器资源的。
纯静态页面是没有办法做SQL注入的。
伪静态页面可以做SQL注入,伪静态注入其实与动态注入没有一丝一毫的区别。
Document对象方法:
close():关闭用document.open()方法打开的输出流,并显示选定的数据。
getElementsByid():返回对拥有指定ID的第一个对象的引用。
getElementsByName():返回带有指定名称的对象集合。
getElementsByTagName():返回带有指定标签名的对象集合。
open():打开一个流,以收集来自任何document.write()或documnet.writeln()方法的输出。
write():向文档写HTML表达式或JavaScript代码。
writeln():等同于write()方法,不同的是在每个表达式之后写一个换行符。
docum.write():核心在于输出,它可以接收native编码值。它是js语句,js语句会解码某些编码。
转码地址:http://tool.oschina.net/encode?type=3
注意:
在做XSS的时候,建议使用Burp。
因为有些时候前端某些地方做了输入限制。
反射型XSS,因为js的参与就变成了反射Dom型xss
存储型XSS,因为js的参与就变成了存储Dom型xss
js中两种操纵浏览器的两种方法:
Document:核心控制页面,文档对象模型
window:核心控制浏览器,浏览器对象模型使javascript有能力与浏览器"对话"
防御XSS核心:
说了很多次了,应该可以记住了吧,嘿嘿!!!
1.过滤参数:单引号、双引号、尖括号
2.HTML实体编码。
补充:
SQL注入防御核心:过滤,不允许输入其他数据,强转数字型,就一点办法没有了。