一、JavaScript事件
在构造XSS代码时,如果对<>进行了编码或过滤,那么无法结束和新建HTML元素,此时可以用事件进行触发(这里不讨论利用HTML标签属性值进行触发,因为只支持少部分浏览器)。
JavaScript脚本中的事件是指用户载入目标页面直到该页面被关闭期间浏览器的动作,以及该页面对用户操作的响应。
窗口事件
当用户执行某些会影响浏览器窗口的操作时,就会发生窗口事件。
onload:页面加载完成触发
onunload:关闭页面时触发
onresize:调整窗口大小时触发
onmove:移动窗口时触发
onabort:取消网页上的图像加载时触发
onerror:当发生JavaScript错误时触发
onscroll:当向上或向下滚动页面时触发
鼠标事件
onmousemove:移动鼠标触发
onclick:单击触发
常用HTML元素事件
<a>链接
onclick:鼠标单击链接
ondbclick:鼠标双击链接
onmouseDown:鼠标在链接的位置按下
onmouseOut:鼠标移出链接所在的位置
onmouseOver:鼠标经过链接所在的位置
onmouseUp:鼠标在链接的位置放开
onKeyDown:键被按下
onkeyPress:按下并放开该键
onkeyUp:键被松开
<img>图片
onerror:加载图片出现错误时触发
onload:图片加载时触发
onkeyDown:键被按下
onkeyPress:按下并放开该键
onkeyUp:键被松开
<input>文本字段
onblur:文本框失去当前输入焦点
onchange:文本框内容发生改变并且失去当前输入焦点
onfocus:文本框得到当前输入焦点
onselect:选择文本框中的文本
<textarea>文本区
onblur:文本区失去当前输入焦点
onchange:文本区内容发生改变并且失去当前输入焦点
onfocus:文本区得到当前输入焦点
onselect:选择文本区中的文本
onkeyDown:在文本区中键被按下
onkeyPress:在文本区中按下并放开该键
onkeyUp:在文本区中键被松开
<form>表单
onreset:复位
onchange:修改表单字段时触发
onsubmit:提交表单
onclick:单击按钮时触发
详情请参考:http://www.w3school.com.cn/jsref/dom_obj_event.asp
在构造XSS代码时,首先尝试输入<>'"等符号,看看编码或过滤了什么。一般首当其冲会对<>进行处理,如果返回值是在html元素里,那么此时可利用事件进行触发,下一步就是单引号或双引号的闭合问题。
二、DOM
在挖掘DOM型XSS漏洞时,首先需要了解DOM。
DOM(文档结构模型)中顶级对象及其作用:
Windows:表示与当前浏览器窗口相关的顶级对象,包括最大小化、新建窗口与关闭等。
Frames:表示文档页面中框架数组对象,每个框架都包含一个Windows对象。
Location:以URL的形式载入当前窗口,并保存正在浏览的文档位置及构成。
Document:包含HTML文档中的HTML标记和构成文档的文本的对象,客户端浏览器中的每个载入的HTML文档都有一个Document对象。
History:包含当前窗口的历史列表对象。
Navigator:包含当前浏览器的相关信息的对象。
Screen:包含当前浏览器允许的物理环境信息的对象,如分辨率等。
这里主要学习下Document对象。
Document 对象
Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
Document 对象属性
属性 | 描述 |
---|---|
body | 提供对 <body> 元素的直接访问。 对于定义了框架集的文档,该属性引用最外层的 <frameset>。 |
cookie | 设置或返回与当前文档有关的所有 cookie。 |
domain | 返回当前文档的域名。 |
lastModified | 返回文档被最后修改的日期和时间。 |
referrer | 返回载入当前文档的文档的 URL。 |
title | 返回当前文档的标题。 |
URL | 返回当前文档的 URL。 |
Document 对象方法
方法 | 描述 |
---|---|
close() | 关闭用 document.open() 方法打开的输出流,并显示选定的数据。 |
getElementById() | 返回对拥有指定 id 的第一个对象的引用。 |
getElementsByNmae() | 返回带有指定名称的对象集合。 |
getElementsByTagName() | 返回带有指定标签名的对象集合。 |
open() | 打开一个流,以收集来自任何 document.write() 或 document.writeln() 方法的输出。 |
write() | 向文档写 HTML 表达式 或 JavaScript 代码。 |
writeln() | 等同于 write() 方法,不同的是在每个表达式之后写一个换行符。 |
详情请参考:http://www.w3school.com.cn/jsref/index.asp
主要就是观察页面JS代码里的Document对象改变页面的方法的参数,参数输入点能否被用户掌握。
关于XSS攻击就到这里,就不给出具体Demo演示了,遇到现实案例后在写出。