API安全
01web应用程序
02HTTP协议
03API概述
04分类类型
05交换格式
06身份验证
07常见API漏洞
08crAPI靶场
09JWT
10OAuth 2.0身份验证
11GraphQL
12DVGA靶场
13服务器端参数污染
14API文档
15API Labs
16OAuth Labs
17GraphQL API Labs
18JWT Labs
-
+
首页
17GraphQL API Labs
靶场地址: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、刷新目标网站,通关。 
毛林
2025年10月21日 20:07
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码