How To Explore and Exploit GraphQL [Indonesia]
2023-12-22 13:14:56 Author: infosecwriteups.com(查看原文) 阅读量:14 收藏

Nah, sebelum kita fokus nyari bug.. alangkah baiknya kita kumpulin informasi sebanyak-banyaknya

#1 GraphQL Endpoint

How To Explore and Exploit GraphQL [Indonesia] - GraphQL Endpoint

Salah satu informasinya adalah GraphQL Endpoint.. dari sini kita bisa tau target kita pake GraphQL atau REST API. Tapi gak semua web target pake endpoint yang sama kaya diatas, di bawah ini contoh-contoh endpoint yang paling umum:

/v1/explorer
/v1/graphiql
/graph
/graphql
/graphql/console/
/graphql.php

#2 Introspection Query

Kalo kita udah dapet endpoint graphql si target, langkah selanjutnya adalah mencari Full Schema dari GraphQL nya. “Fungsinya buat apa bang?” nah, kita bisa dapet banyak informasi dari Full Schema itu.. Misalnya; Mutation, Query, dan Fields. Introspection Query adalah salah satu cara dapetin schema secara utuh.. Contohnya di bawah ini:

{__schema{queryType{name}mutationType{name}subscriptionType{name}types{...FullType}directives{name description locations args{...InputValue}}}}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 ofType{kind name ofType{kind name ofType{kind name ofType{kind name}}}}}}}}
How To Explore and Exploit GraphQL [Indonesia] — Introspection Query

Sebelah kiri dari gambar diatas adalah Introspection Query, dan yang di respon adalah Full Schema nya. Kita juga bisa pake tool buat dapetin schema dari target. Contohnya InQL, informasi lebih lengkapnya bisa cek disini: https://github.com/doyensec/inql

NB: Ada kemungkinan kita gak bisa pake Introspection Query di beberapa target. Biasanya introspection query di nonaktifkan. Kenapa bang? ya tentu saja karena alasan keamanan.. Pake Nanya *Emot Batu*

How To Explore and Exploit GraphQL [Indonesia] - Introspection Query

Kalo ketemu kasus di atas, kita bisa pake tool Clairvoyance buat dump Schema nya.. info lengkapnya cek disini: https://github.com/nikitastupin/clairvoyance

#3 GraphQL Voyager

Setelah kita dapet Full Schema dari target.. langkah selanjutnya adalah membaca alur dari Schema yang kita dapet, kita bisa manfaatin tool yang bernama GraphQL Voyager. Langkah-langkahnya di bawah ini:

1. Buka https://graphql-kit.com/graphql-voyager

How To Explore and Exploit GraphQL [Indonesia] - GraphQL Voyager

2. Pilih “Change Schema”

How To Explore and Exploit GraphQL [Indonesia] - GraphQL Voyager

3. Paste Full Schema yang berhasil kita dapetin

How To Explore and Exploit GraphQL [Indonesia] - GraphQL Voyager

Nah dari GraphQL Voyager.. yang bisa kita lakuin adalah baca alur, dapetin field tertentu (yang mungkin gak ada di front-end webnya), data apa aja yg disembunyikan dari aplikasi kalo dipake user secara normal, dan lain-lain.

Setelah kita baca alur, dapetin field tersembunyi, dan beberapa info lainnya. Langkah selanjutnya eksploitasi. Terus nyari bug apa bang? Ya kaya biasanya aja sih.. bisa IDOR, Cross Site Scripting (XSS), Business Logic Error, SQL Injection, dsb.

#1 Query

Apa itu Query? Umumnya query adalah pernyataan atau perintah untuk mengambil data dari server. Contohnya di bawah ini:

query {
getUserDetail(userId: Int!) {
email
full_name
address
}
}

Contoh di atas adalah query untuk mengambil data user dari database. Dan userId: Int! adalah argumen untuk menentukan data mana yang mau kita ambil. Sedangkan email, full_name, dan address adalah data yang akan muncul di respon. Di bawah ini adalah contoh penggunaan query untuk mengambil data user dengan ID 182.

How To Explore and Exploit GraphQL [Indonesia] - Query

#2 Mutation

Apa itu Mutation? Kebalikan dari query, Umumnya Mutation adalah pernyataan atau perintah untuk menulis, mengubah, dan menghapus data dari di database. Contohnya di bawah ini:

mutation {
deleteUserAddress(id: Int!)
}

Contoh di atas adalah mutation untuk mengambil menghapus alamat user dari database. Sedangkan id: Int! adalah argumen untuk menentukan data dengan ID berapa yang mau kita hapus. Berikut contoh penggunaan Mutation

How To Explore and Exploit GraphQL [Indonesia] - Query

Terakhir.. Beberapa Query dan Mutation tertentu mungkin bentuknya gini:

mutation {
addProductReview(input: ProductReviewInput!) {
# Contains the completed product review
review {
name
product_id
title
text
}
}
}

Apa maksudnya input: ProductReviewInput! di atas? kalo kita ketemu mutation atau query kaya di atas, kita gak bisa langsung masukin ID (Integer) atau String secara langsung, kita harus balik lg ke GraphQL Voyager buat cek apa aja isi dari Objek ProductReviewInput. Contohnya ada di bawah ini:

How To Explore and Exploit GraphQL [Indonesia] - Contoh Objek dari GraphQL Voyager

Dari gambar di atas.. name, product_id, title, dan text adalah isi dari objek ProductReviewInput. Contoh:

{name: "hacker", product_id: "ABCDEF1234", title: "Mantap", text: "Produknya bagus sesuai deskripsi, pengiriman juga cepat"}
How To Explore and Exploit GraphQL [Indonesia] - Contoh Objek ProductReviewInput

Sekian artikel dari gw.. maaf kalo ada kalimat atau penjelasan yang sulit dipahami. Semoga ini bisa jadi referensi buat belajar.. Thank you ^^

Buat yang mau kasih bansos bisa kesini ya gess wkwkwk ✌️


文章来源: https://infosecwriteups.com/how-to-explore-and-exploit-graphql-indonesia-562c560f46c6?source=rss----7b722bfd1b8d---4
如有侵权请联系:admin#unsafe.sh