WEB安全
00-HTTP协议
01-前端基础【HTML】
02-前端基础【CSS】
03-后端基础【PHP速通】
04-后端基础【PHP面向对象】
05-MySQL基础操作
06-前后端联动【代码练习】
07-SQL注入
08-SQL注入 Labs
09-跨站脚本攻击【XSS】
09-XSS Labs
10-CSRF
11-SSRF
12-XML 外部实体注入【XXE】
13-代码执行漏洞
14-命令执行漏洞
15-文件包含漏洞
16-文件上传漏洞
17-反序列化漏洞
18-业务逻辑漏洞
19-未授权访问漏洞集合
20-跨源资源共享【CORS】
21-SSTI模板注入
22-并发漏洞
23-点击劫持【Clickjacking 】
24-请求走私
25-路径遍历
26-访问控制
27-身份验证漏洞
28-WebSocket
29-Web缓存中毒
30-HTTP 主机头攻击
31-信息泄露漏洞
32-原型污染
33-API概述
34-API分类类型
35-API交换格式
36-API身份验证
37-API常见漏洞
38-crAPI靶场
39-JWT
40-DVGA靶场
41-服务器端参数污染
42-API Labs
43-OAuth Labs
44-GraphQL API Labs
45-JWT Labs
46-小程序抓包
47-云存储
48-对象存储OSS
49-存储桶
50-存储桶漏洞
51-STS访问OSS
-
+
44-GraphQL API Labs
浏览
1
靶场地址:https://portswigger.net/web-security/all-labs#graphql-api-vulnerabilities ## 访问私人 GraphQL 帖子 任务:请找到隐藏的博客文章并输入密码。 1、观察网站有四篇文章,不难发现改变postId参数的传参就可以访问不同的文章。   2、当传参为3时,发现访问不了  3、通过burp进行抓包,找到graphql,将该数据包发送到repeater模块中。  4、将参数改为3,再进行发包观察  成功访问  5、通过burp自带的自省查询,在响应包中找到了postPassword字段。   6、添加postPassword字段。  ## 意外暴露私有 GraphQL 字段 任务:以管理员身份登录并删除用户名carlos 1、既然以管理员的身份,就先尝试登录口。  2、在burp 的http history中发现/graphql/v1  3、发送到repeater模块中,鼠标右键选择**GraphQL > Set introspection query**,自省能力   4、将数据包发送到站点地图【site map】模块中。 Burp 的站点地图本质是对目标应用所有可访问资源(如页面、API 端点、参数、数据类型等)的结构化梳理。  5、观察站点地图,发现有不同的请求类型。  6、找到getUser类型,很明显可以观察到,通过传入id,返回id对应的账户名和密码,将数据包发送到repeater模块中。  7、改变ID,查询数据。   8、登录管理员账户,删除账户。  ## 查找隐藏的 GraphQL 端点 任务:请找到隐藏的端点并删除carlos。 1、观察目标网站,为购物网站,每件商品有详情页,还有登录功能,尝试进行登录。 商品的详情页通过productId传参    2、在burp的http history中没有发现和api相关的链接。  3、猜测后缀并且输入自省语法。 ``` /api?query={__typename} ```   4、通过burp自带的自省语句。**GraphQL > Set introspection query。**   被拦截,尝试绕过。 5、在__schema后加入%0a,尝试绕过。 ```txt /api?query=query+IntrospectionQuery+%7B%0D%0A++__schema%0a+%7B%0D%0A++++queryType+%7B%0D%0A++++++name%0D%0A++++%7D%0D%0A++++mutationType+%7B%0D%0A++++++name%0D%0A++++%7D%0D%0A++++subscriptionType+%7B%0D%0A++++++name%0D%0A++++%7D%0D%0A++++types+%7B%0D%0A++++++...FullType%0D%0A++++%7D%0D%0A++++directives+%7B%0D%0A++++++name%0D%0A++++++description%0D%0A++++++args+%7B%0D%0A++++++++...InputValue%0D%0A++++++%7D%0D%0A++++%7D%0D%0A++%7D%0D%0A%7D%0D%0A%0D%0Afragment+FullType+on+__Type+%7B%0D%0A++kind%0D%0A++name%0D%0A++description%0D%0A++fields%28includeDeprecated%3A+true%29+%7B%0D%0A++++name%0D%0A++++description%0D%0A++++args+%7B%0D%0A++++++...InputValue%0D%0A++++%7D%0D%0A++++type+%7B%0D%0A++++++...TypeRef%0D%0A++++%7D%0D%0A++++isDeprecated%0D%0A++++deprecationReason%0D%0A++%7D%0D%0A++inputFields+%7B%0D%0A++++...InputValue%0D%0A++%7D%0D%0A++interfaces+%7B%0D%0A++++...TypeRef%0D%0A++%7D%0D%0A++enumValues%28includeDeprecated%3A+true%29+%7B%0D%0A++++name%0D%0A++++description%0D%0A++++isDeprecated%0D%0A++++deprecationReason%0D%0A++%7D%0D%0A++possibleTypes+%7B%0D%0A++++...TypeRef%0D%0A++%7D%0D%0A%7D%0D%0A%0D%0Afragment+InputValue+on+__InputValue+%7B%0D%0A++name%0D%0A++description%0D%0A++type+%7B%0D%0A++++...TypeRef%0D%0A++%7D%0D%0A++defaultValue%0D%0A%7D%0D%0A%0D%0Afragment+TypeRef+on+__Type+%7B%0D%0A++kind%0D%0A++name%0D%0A++ofType+%7B%0D%0A++++kind%0D%0A++++name%0D%0A++++ofType+%7B%0D%0A++++++kind%0D%0A++++++name%0D%0A++++++ofType+%7B%0D%0A++++++++kind%0D%0A++++++++name%0D%0A++++++%7D%0D%0A++++%7D%0D%0A++%7D%0D%0A%7D%0D%0A ```  6、成功之后,将数据包发送到站点地图模块,方便观察。  7、找到了一个getUSer。  8、将数据包发送到repeater模块中,更改id参数,以获得不同的username。    找到了目标账号对应的id号。 8、回到站点地图,发现还有一个数据包,观察命名,好像是可以通过id删除用户账号。  9、发送到repeater模块中,将id修改为3,请求成功。  10、刷新目标网站,通关。 
毛林
2026年11月15日 18:27
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~