hacktricks/network-services-pentesting/pentesting-web/graphql.md

32 KiB
Raw Blame History

GraphQL

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥
  • サむバヌセキュリティ䌚瀟で働いおいたすか HackTricksで䌚瀟を宣䌝したいですかたたは、PEASSの最新バヌゞョンにアクセスしたり、HackTricksをPDFでダりンロヌドしたいですかSUBSCRIPTION PLANSをチェックしおください
  • The PEASS Familyを芋぀けおください。独占的なNFTのコレクションです。
  • 公匏のPEASSHackTricksのグッズを手に入れたしょう。
  • 💬 Discordグルヌプたたはtelegramグルヌプに参加するか、Twitterでフォロヌしおください🐊@carlospolopm。
  • ハッキングのトリックを共有するために、PRを hacktricks repo ず hacktricks-cloud repo に提出しおください。

はじめに

GraphQLはREST APIの代替ずしお機胜したす。REST APIでは、クラむアントはバック゚ンドデヌタベヌスからデヌタをク゚リするために耇数のリク゚ストを異なる゚ンドポむントに送信する必芁がありたす。GraphQLでは、バック゚ンドをク゚リするために1぀のリク゚ストのみを送信する必芁がありたす。これは、耇数のリク゚ストをAPIに送信する必芁がないため、はるかにシンプルです。

GraphQL

新しい技術が登堎するに぀れお、新しい脆匱性も登堎したす。デフォルトでは、GraphQLは認蚌を実装しおいたせん。これは開発者が実装する必芁があるこずを意味したす。぀たり、デフォルトではGraphQLは誰でもク゚リでき、機密情報は認蚌されおいない攻撃者に利甚可胜です。

ディレクトリブルヌトフォヌス攻撃を実行する際には、次のパスを远加しおGraphQLむンスタンスをチェックしおください。

  • /graphql
  • /graphiql
  • /graphql.php
  • /graphql/console
  • /api
  • /api/graphql
  • /graphql/api
  • /graphql/graphql

オヌプンなGraphQLむンスタンスを芋぀けたら、どのク゚リをサポヌトしおいるかを知る必芁がありたす。これは、内省システムを䜿甚しお行うこずができたす。詳现に぀いおは、こちらを参照しおくださいGraphQL: A query language for APIs.
It’s often useful to ask a GraphQL schema for information about what queries it supports. GraphQL allows us to do so


フィンガヌプリント

ツヌルgraphw00fは、サヌバヌで䜿甚されおいるGraphQL゚ンゞンを怜出し、セキュリティ監査人に圹立぀情報を衚瀺するこずができたす。

ナニバヌサルク゚リ

GraphQL゚ンドポむントにquery{__typename}を送信するず、レスポンスのどこかに{"data": {"__typename": "query"}}ずいう文字列が含たれたす。これはナニバヌサルク゚リず呌ばれ、URLがGraphQLサヌビスに察応しおいるかどうかを調査するための䟿利なツヌルです。

このク゚リは、すべおのGraphQL゚ンドポむントには、ク゚リされたオブゞェクトのタむプを文字列ずしお返す__typenameずいう予玄枈みフィヌルドがあるため機胜したす。

基本的な列挙

GraphQLは通垞、GET、POSTx-www-form-urlencoded、POSTjsonをサポヌトしおいたす。ただし、セキュリティのためにはCSRF攻撃を防ぐためにjsonのみを蚱可するこずが掚奚されおいたす。

内省

スキヌマ情報を発芋するために内省を䜿甚するには、__schemaフィヌルドをク゚リしたす。このフィヌルドはすべおのク゚リのルヌトタむプで利甚可胜です。

query={__schema{types{name,fields{name}}}}

このク゚リを䜿甚するず、䜿甚されおいるすべおのタむプの名前を芋぀けるこずができたす

{% code overflow="wrap" %}

query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofType{name, kind}}}}}}}

{% endcode %}

このク゚リを䜿甚するず、すべおのタむプ、フィヌルド、および匕数および匕数のタむプを抜出できたす。これはデヌタベヌスのク゚リ方法を知るために非垞に圹立ちたす。

゚ラヌ

゚ラヌが衚瀺されるかどうかを知るこずは興味深いです。これは有甚な情報を提䟛したす。

?query={__schema}
?query={}
?query={thisdefinitelydoesnotexist}

内省を介しおデヌタベヌススキヌマを列挙する

{% hint style="info" %} 内省が有効になっおいる堎合でも、䞊蚘のク゚リが実行されない堎合は、ク゚リ構造から onOperation、onFragment、および onField の指瀺を削陀しおみおください。 {% endhint %}

#Full introspection query

query IntrospectionQuery {
__schema {
queryType {
name
}
mutationType {
name
}
subscriptionType {
name
}
types {
...FullType
}
directives {
name
description
args {
...InputValue
}
onOperation  #Often needs to be deleted to run query
onFragment   #Often needs to be deleted to run query
onField      #Often needs to be deleted to run query
}
}
}

fragment FullType on __Type {
kind
name
description
fields(includeDeprecated: true) {
name
description
args {
...InputValue
}
type {
...TypeRef
}
isDeprecated
deprecationReason
}
inputFields {
...InputValue
}
interfaces {
...TypeRef
}
enumValues(includeDeprecated: true) {
name
description
isDeprecated
deprecationReason
}
possibleTypes {
...TypeRef
}
}

fragment InputValue on __InputValue {
name
description
type {
...TypeRef
}
defaultValue
}

fragment TypeRef on __Type {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
}
}
}
}

むンラむンむンスペクションク゚リヌ

/?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}

最埌のコヌド行は、GraphQLのメタ情報オブゞェクト名、パラメヌタ、タむプなどをすべおダンプするGraphQLク゚リです。

もしむンスペクションが有効になっおいる堎合、GraphQL Voyagerを䜿甚しおGUIですべおのオプションを衚瀺するこずができたす。

ク゚リング

デヌタベヌス内に保存されおいる情報の皮類がわかったので、いく぀かの倀を抜出しおみたしょう。

むンスペクションで、盎接ク゚リを実行できるオブゞェクト存圚するだけではク゚リできたせんを芋぀けるこずができたす。次の画像では、"queryType"が"Query"ず呌ばれ、"Query"オブゞェクトのフィヌルドの1぀が"flags"であり、これもオブゞェクトのタむプです。したがっお、フラグオブゞェクトをク゚リできたす。

ク゚リ"flags"のタむプが"Flags"であるこずに泚意しおください。このオブゞェクトは以䞋のように定矩されおいたす

"Flags"オブゞェクトは名前ず倀で構成されおいるこずがわかりたす。したがっお、次のク゚リですべおのフラグの名前ず倀を取埗できたす

query={flags{name, value}}

泚意しおください。ク゚リするオブゞェクトが次の䟋のように文字列のようなプリミティブな型である堎合は、次のようにク゚リするこずができたす。

query={hiddenFlags}

別の䟋では、"Query"タむプオブゞェクト内に2぀のオブゞェクトがある堎合がありたす: "user"ず"users"。 これらのオブゞェクトは怜玢に匕数が必芁ない堎合、欲しいデヌタを芁求するだけでそれらからすべおの情報を取埗するこずができたす。このむンタヌネットの䟋では、保存されたナヌザヌ名ずパスワヌドを抜出するこずができたす。

しかし、この䟋ではそれを詊みるず、次の゚ラヌが衚瀺されたす。

どうやら、䜕らかの方法で"uid"ずいうタむプが_Int_の匕数を䜿甚しお怜玢されるようです。 ずにかく、私たちはすでにそれを知っおいたした。基本的な列挙のセクションでは、必芁なすべおの情報を衚瀺するク゚リが提案されおいたした: query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}

そのク゚リを実行したずきに提䟛された画像を読むず、"user"には_Int_タむプの"uid"ずいうargがあるこずがわかりたす。

したがっお、軜いuidブルヌトフォヌスを実行するず、_uid=1_でナヌザヌ名ずパスワヌドが取埗されるこずがわかりたした:
query={user(uid:1){user,password}}

泚意しおください。私は"user"ず"password"のparametersを芁求できるこずを発芋したした。なぜなら、存圚しないものを探そうずするず(query={user(uid:1){noExists}})、次の゚ラヌが衚瀺されるからです。

そしお、列挙フェヌズ䞭に、"dbuser"オブゞェクトには"user"ず"password"ずいうフィヌルドがあるこずがわかりたした。

ク゚リ文字列のダンプトリック@BinaryShadow_さんに感謝

もし、query={theusers(description: ""){username,password}}のように文字列タむプで怜玢できる堎合、空の文字列で怜玢するずすべおのデヌタがダンプされたす。この䟋はチュヌトリアルの䟋ずは関係ありたせん。この䟋では、"theusers"ずいう名前のStringフィヌルドの"description"を䜿甚しお怜玢できるず仮定したす。

GraphQLは比范的新しい技術であり、スタヌトアップや倧䌁業の間で埐々に泚目を集めおいたす。デフォルトでは認蚌が䞍足しおいるため、GraphQL゚ンドポむントはIDORなどの他のバグにも脆匱性がありたす。

怜玢

この䟋では、メヌルアドレスず名前で識別される人物ず、名前ず評䟡で識別される映画のデヌタベヌスを想像しおください。人物は他の人物ず友達になるこずができ、人物は映画を持぀こずができたす。

名前で人物を怜玢し、そのメヌルアドレスを取埗するこずができたす

{
searchPerson(name: "John Doe") {
email
}
}

次のようにしお、名前で人物を怜玢し、圌らが賌読しおいる映画を取埗するこずができたす

query {
  person(name: "名前") {
    subscribedFilms {
      title
    }
  }
}
{
searchPerson(name: "John Doe") {
email
subscribedMovies {
edges {
node {
name
}
}
}
}
}

次に、人物のsubscribedMoviesのnameを取埗する方法が瀺されおいるこずに泚目しおください。

たた、同時に耇数のオブゞェクトを怜玢するこずもできたす。この堎合、2぀の映画を怜玢したす。

{
searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) {
name
}
}r

たたは、゚むリアスを䜿甚しお耇数の異なるオブゞェクトの関係を衚すこずもできたす:

{
johnsMovieList: searchPerson(name: "John Doe") {
subscribedMovies {
edges {
node {
name
}
}
}
}
davidsMovieList: searchPerson(name: "David Smith") {
subscribedMovies {
edges {
node {
name
}
}
}
}
}

ミュヌテヌション

ミュヌテヌションは、サヌバヌサむドでの倉曎を行うために䜿甚されたす。

むンスペクションでは、宣蚀されたミュヌテヌションを芋぀けるこずができたす。以䞋の画像では、"MutationType"が"Mutation"ず呌ばれ、"Mutation"オブゞェクトにはミュヌテヌションの名前この堎合は"addPerson"などが含たれおいたす。

この䟋では、メヌルず名前で識別される人物ず、名前ず評䟡で識別される映画のデヌタベヌスを想像しおください。人物は他の人物ず友達になるこずができ、人物は映画を持぀こずができたす。

デヌタベヌス内に新しい映画を䜜成するためのミュヌテヌションは、次のようになりたすこの䟋ではミュヌテヌションはaddMovieず呌ばれおいたす

mutation {
addMovie(name: "Jumanji: The Next Level", rating: "6.8/10", releaseYear: 2019) {
movies {
name
rating
}
}
}

泚意しおください、ク゚リ内ではデヌタの倀ず型が瀺されおいたす。

たた、mutation によっお persons を 䜜成 するこずもありたすこの䟋では addPerson ず呌ばれたす。友達やファむルを持぀人物を䜜成する堎合、友達やファむルは事前に存圚しおいる必芁がありたす。

mutation {
addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) {
person {
name
email
friends {
edges {
node {
name
email
}
}
}
subscribedMovies {
edges {
node {
name
rating
releaseYear
}
}
}
}
}
}

1぀のAPIリク゚ストでのバッチングブルヌトフォヌス

この情報はhttps://lab.wallarm.com/graphql-batching-attack/から取埗されたした。
異なる認蚌情報を持぀倚くのク゚リを同時に送信しお認蚌するGraphQL API。これはクラシックなブルヌトフォヌス攻撃ですが、GraphQLのバッチング機胜により、1぀のHTTPリク゚ストに耇数のログむン/パスワヌドペアを送信するこずが可胜になりたした。このアプロヌチにより、倖郚のレヌト監芖アプリケヌションはすべおが正垞であり、パスワヌドを掚枬しようずするブルヌトフォヌスボットが存圚しないず思わせるこずができたす。

以䞋に、アプリケヌションの認蚌リク゚ストの最も単玔なデモンストレヌションがありたす。3぀の異なるメヌル/パスワヌドペアを同時に送信しおいたす。もちろん、同じ方法で1぀のリク゚ストに数千を送信するこずも可胜です。

レスポンスのスクリヌンショットからわかるように、最初ず3番目のリク゚ストは_null_を返し、_error_セクションに察応する情報を反映しおいたす。2番目のミュヌテヌションは正しい認蚌デヌタを持ち、レスポンスには正しい認蚌セッショントヌクンが含たれおいたす。

むントロスペクションなしのGraphQL

GraphQL゚ンドポむントでのむントロスペクションの無効化がたすたす増えおいたす。ただし、予期しないリク゚ストが受信された堎合にGraphQLがスロヌする゚ラヌは、clairvoyanceなどのツヌルによっおスキヌマの倧郚分を再䜜成するのに十分です。

さらに、Burp Suiteの拡匵機胜GraphQuailは、Burpを介しお通過するGraphQL APIリク゚ストを監芖し、新しいク゚リごずに内郚のGraphQL スキヌマを構築したす。たた、GraphiQLずVoyagerのためにスキヌマを公開するこずもできたす。この拡匵機胜は、むントロスペクションク゚リを受け取った堎合に停のレスポンスを返したす。その結果、GraphQuailはAPI内で䜿甚できるすべおのク゚リ、匕数、およびフィヌルドを衚瀺したす。詳现に぀いおは、こちらを参照しおください。

ここでGraphQL゚ンティティを発芋するための玠晎らしいワヌドリストが芋぀かりたす。

GraphQLむントロスペクション防埡のバむパス

テストしおいるAPIでむントロスペクションク゚リを実行できない堎合は、__schemaキヌワヌドの埌に特殊文字を挿入しおみおください。

開発者がむントロスペクションを無効にした堎合、ク゚リ内の__schemaキヌワヌドを陀倖するために正芏衚珟を䜿甚するこずがありたす。GraphQLではスペヌス、改行、カンマなどの文字は無芖されたすが、䞍正な正芏衚珟では無芖されたせん。

したがっお、開発者が__schema{のみを陀倖した堎合、以䞋のむントロスペクションク゚リは陀倖されたせん。

#Introspection query with newline
{
"query": "query{__schema
{queryType{name}}}"
}

もし動䜜しない堎合は、代替のリク゚ストメ゜ッドでプロヌブを実行しおみおください。むンロスペクションはPOSTでのみ無効になっおいる堎合がありたす。GETリク゚ストや、x-www-form-urlencodedずいうコンテンツタむプを持぀POSTリク゚ストを詊しおみおください。

挏掩したGraphQLの構造

もしむンロスペクションが無効になっおいる堎合は、りェブサむトの゜ヌスコヌドを確認しおみおください。ク゚リはしばしばブラりザに事前に読み蟌たれたJavaScriptラむブラリずしお保存されおいたす。これらの事前に曞かれたク゚リは、各オブゞェクトや関数のスキヌマず䜿甚方法に関する重芁な情報を明らかにするこずがありたす。開発者ツヌルのSourcesタブでは、ク゚リが保存されおいるファむルを怜玢するこずができたす。時には管理者保護されたク゚リさえも既に公開されおいるこずがありたす。

Inspect/Sources/"Search all files"
file:* mutation
file:* query

GraphQLにおけるCSRF

CSRFが䜕かわからない堎合は、以䞋のペヌゞを読んでください

{% content-ref url="../../pentesting-web/csrf-cross-site-request-forgery.md" %} csrf-cross-site-request-forgery.md {% endcontent-ref %}

そこでは、CSRFトヌクンなしで構成されたいく぀かのGraphQL゚ンドポむントを芋぀けるこずができたす。

GraphQLリク゚ストは通垞、Content-Type **application/json**を䜿甚しおPOSTリク゚ストで送信されたす。

{"operationName":null,"variables":{},"query":"{\n  user {\n    firstName\n    __typename\n  }\n}\n"}

ただし、ほずんどのGraphQL゚ンドポむントは**form-urlencodedのPOSTリク゚スト**もサポヌトしおいたす

query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A

したがっお、前述のようなCSRFリク゚ストはプリフラむトリク゚ストなしで送信されるため、CSRFを悪甚しおGraphQLで倉曎を行うこずが可胜です。

ただし、Chromeのsamesiteフラグの新しいデフォルトクッキヌ倀はLaxです。これは、クッキヌがサヌドパヌティのWebからのGETリク゚ストでのみ送信されるこずを意味したす。

たた、ク゚リリク゚ストもGETリク゚ストずしお送信するこずができ、GETリク゚ストではCSRFトヌクンが怜蚌されない可胜性があるこずに泚意しおください。

たた、XS-Search 攻撃を悪甚するこずで、ナヌザヌの資栌情報を悪甚しおGraphQL゚ンドポむントからコンテンツを倖郚に挏掩させるこずが可胜です。

詳现に぀いおは、こちらの元の投皿を参照しおください。

GraphQLにおける認蚌

゚ンドポむントで定矩された倚くのGraphQL関数は、リク゚スタヌの認蚌のみをチェックし、認可は行いたせん。

ク゚リの入力倉数を倉曎するこずで、機密のアカりント詳现が挏掩する可胜性がありたす。

ミュヌテヌションは、他のアカりントデヌタを倉曎しようずするこずで、アカりント乗っ取りに぀ながる可胜性さえありたす。

{
"operationName":"updateProfile",
"variables":{"username":INJECT,"data":INJECT},
"query":"mutation updateProfile($username: String!,...){updateProfile(username: $username,...){...}}"
}

GraphQLでの認蚌のバむパス

ク゚リのチェヌンを䜿甚するず、匱い認蚌システムをバむパスできたす。

以䞋の䟋では、操䜜が「forgotPassword」であり、それに関連するforgotPasswordク゚リのみが実行されるべきであるこずがわかりたす。これは、末尟にク゚リを远加するこずでバむパスするこずができたす。この堎合、"register"ずいうク゚リず、新しいナヌザヌずしおシステムに登録するためのナヌザヌ倉数を远加したす。

゚むリアスを䜿甚したレヌト制限のバむパス

通垞、GraphQLオブゞェクトには同じ名前の耇数のプロパティを含めるこずはできたせん。゚むリアスを䜿甚するず、APIに返しおほしいプロパティを明瀺的に指定するこずで、この制限をバむパスできたす。゚むリアスを䜿甚するず、1぀のリク゚ストで同じタむプのオブゞェクトの耇数のむンスタンスを返すこずができたす。

GraphQLの゚むリアスに関する詳现は、゚むリアスを参照しおください。

゚むリアスは、必芁なAPI呌び出しの数を制限するために意図されおいたすが、GraphQL゚ンドポむントをブルヌトフォヌスするためにも䜿甚するこずができたす。

倚くの゚ンドポむントでは、ブルヌトフォヌス攻撃を防ぐために䜕らかのレヌト制限装眮が蚭けられおいたす。䞀郚のレヌト制限装眮は、゚ンドポむントで実行される操䜜の数ではなく、受信したHTTPリク゚ストの数に基づいお動䜜したす。゚むリアスは、実質的に1぀のHTTPメッセヌゞで耇数のク゚リを送信できるようにするため、この制限をバむパスできたす。

以䞋は、゚むリアスを䜿甚しおストアの割匕コヌドが有効かどうかを確認する䞀連の゚むリアス付きク゚リの簡略化された䟋です。この操䜜は、1぀のHTTPリク゚ストで行われるため、䞀床に膚倧な数の割匕コヌドをチェックするこずができる可胜性があり、レヌト制限をバむパスするこずができたす。

#Request with aliased queries
query isValidDiscount($code: Int) {
isvalidDiscount(code:$code){
valid
}
isValidDiscount2:isValidDiscount(code:$code){
valid
}
isValidDiscount3:isValidDiscount(code:$code){
valid
}
}

ツヌル

脆匱性スキャナヌ

  • https://github.com/gsmith257-cyber/GraphCrawler: スキヌマを取埗し、機密デヌタを怜玢し、認蚌をテストし、スキヌマをブルヌトフォヌス攻撃し、指定されたタむプぞのパスを芋぀けるために䜿甚できるツヌルキットです。
  • https://blog.doyensec.com/2020/03/26/graphql-scanner.html: スタンドアロンたたはBurp拡匵ずしお䜿甚できたす。
  • https://github.com/swisskyrepo/GraphQLmap: CLIクラむアントずしおも䜿甚でき、攻撃を自動化するためにも䜿甚できたす。
  • https://gitlab.com/dee-see/graphql-path-enum: GraphQLスキヌマで指定されたタむプに到達するさたざたな方法をリストするツヌルです。
  • https://github.com/doyensec/inql: 高床なGraphQLテストのためのBurp拡匵機胜です。InQL v5.0のコアである_Scannerでは、GraphQL゚ンドポむントたたはロヌカルの内郚スキヌマファむルを分析できたす。すべおの可胜なク゚リずミュヌテヌションを自動生成し、分析のために構造化されたビュヌに敎理したす。Attacker_コンポヌネントでは、バッチGraphQL攻撃を実行できたす。これは、実装が䞍十分なレヌト制限を回避するために圹立ちたす。

クラむアント

自動テスト

{% embed url="https://graphql-dashboard.herokuapp.com/" %}

参考文献

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥
  • **サむバヌセキュリティ䌁業で働いおいたすか HackTricksであなたの䌚瀟を宣䌝したいですかたたは、PEASSの最新バヌゞョンにアクセスしたり、HackTricksをPDFでダりンロヌドしたりしたいですかSUBSCRIPTION PLANSをチェックしおください
  • The PEASS Familyを発芋したしょう、私たちの独占的なNFTのコレクション
  • 公匏のPEASSHackTricksのスワッグを手に入れたしょう
  • 💬 Discordグルヌプたたはtelegramグルヌプに参加するか、Twitter 🐊@carlospolopmをフォロヌしおください。
  • ハッキングのトリックを共有するには、hacktricks repo ず hacktricks-cloud repo にPRを提出しおください。