提⽰需要管理员登录后台删掉carlos⽤⼾.登录接⼝是⽤graphql制作的
输⼊任意凭据登录转到http历史记录
发现query字段和graphql经典格式,http历史记录也发现了路径
https://0a0500f704bfda0583125bdc006a009b.web-security-academy.net/graphql/v1
直接放给
InQL
分析
修改id为1,获取到管理员凭据
使⽤管理员凭据登录,删除carlos⽤⼾
实验室:查找隐藏的 GraphQL 端点
进⼊靶场,找不到任何graphql字样,发现路径api正常访问
⼿动测试
api/
路径:
构造请求
url/api?query=query{__typename}
返回query,证实
查询之所以有效,是因为每个GraphQL端点都有⼀个名为
__typename
的保留字段,该字段以字符串形
式返回查询对象的类型。
继续构造查询:
根据提⽰,发现存在内省
__schema
与
__type
的过滤,这⾥可以考虑⽤
空格
、
逗号
等符号来做绕过:
继续构造:
此处发现⽆法绕过,但是在测试过程中发现
回车(
%0a
)
可以:
从响应中注意到,内省是不允许的
可能是根据正则匹配禁⽤_schema来避免内省查询,⽽graphql对换⾏不敏感,构造换⾏,成功绕过
修改后继续发送
可以看到查询成功。
通过搜索发现存在
username
字段:
复制⽹址并利⽤InQL⼯具加载
得到
编码后发送
根据报错将id改为1继续编码发送
可以得到⽤⼾信息
根据题⽬要删除其中⼀个⽤⼾,继续寻找删除功能的字段:
接下来需要查询到carlos⽤⼾的id(需编码)
通过下⾯的接⼝遍历获取到caros的id
实验室:绕过 GraphQL 暴⼒破解保护
随便输⼊⼀个凭据登录进去,然后在 Burp 中,转到
HTTP 历史记录
可以看到登录请求是作为 GraphQL 突变发送的。
将请求放到inql,解析json获得内省数据
接下来利⽤实验室给的脚本(做了⼀些修改)在控制台中粘贴然后回⻋,⽣成的密码就在
剪贴板
中了
carlos账号密码为
.
实验室:通过 GraphQL 执⾏ CSRF 漏洞利⽤
使⽤实验室给的凭据登录,进⼊修改邮箱界⾯,填写任意邮箱
然后转到HTTP历史记录查看
但是由于请求限制,⽆法测试csrf,更改为
GET
尝试
复制HTML-打开实验室漏洞利⽤场景-发送给受害⼈-成功
我失败了