学习笔记-XSS跨站脚本
XSS主要基于javascript语言完成恶意的攻击行为。
XSS的验证:
<script>alert(/xss/)</script> 常用
<script>confirm('xss')</script>
<script>prompt("xss")</script>
XSS分类:
反射型XSS(非持久型);存储型XSS(持久型,通常在服务器中);DOM型XSS(文档,在浏览器端执行)
反射型XSS:(数据流量走向:浏览器>后端>浏览器)
1.非持久性
2.参数型脚本
3.反射型XSS的JS代码在Wed应用的参数(变量中),如搜索框等
存储型XSS:流量走向:浏览器>后端>数据库>后端>浏览器
攻击者发送恶意脚本到服务器,用户浏览到页面读取到脚本,并且在客户端解析并执行
持久性
DOM型XSS:URL>浏览器
<body><p><ul>之类的元素在文档中的布局形成了文档的结构,它们既是元素节点
文档通常会包含一些内容,这些内容多数由文本提供,这就是文本节点
元素通常都有一些属性,属性用于对元素做出更具体的描述,这就是属性节点
DOM型XSS不需要服务器的解析响应,浏览器端就可以DOM解析,客户端上的JS脚本可以访问浏览器的DOM并修改页面内容
非持久性
XSS paload构造
利用【<>】构造HTML标签和<script></script>标签 //原始的标签,无防waf的能力
利用HTML标签的属性值(伪协议) <a href="javascript:alert(/xss/)">touch me !</a>; <img src="javascript:alert('xss')">(此标签需要在IE6下测试)
利用事件
<img src='./aa.jpg' onmouseover='alert(/xss/)'> 写入图片,鼠标移动到会触发,出现弹窗。
<input type="text" onclick="alert(/xss/)"> 鼠标点击会触发
考虑突破过滤:
大小写;
双写关键字;
引号;如果在HTML标签中,可以不用引号;如果在js中可以考虑用反引号代替单双引号
<img src="#" onerror="alert(/xss/)"/>
<img src='#' onerror='alert(/xss/)'/>
<img src=# onerror=alert(/xss/)/>
<img src="#" onerror=alert(`xss`)/>
<img src="#" onerror=alert`xss`/>
斜杠代替空格;
Tab与回车;
在一些位置添加tab和回车符来绕过关键字过滤
编码;
HTML实体编码;URL编码;