[HacktivityCon 2021] – All Baked Up

Berikut adalah tampilan awal dari web :

Coba capture request dengan burpsuite, disitu terdapat POST request ke /graphql dengan body seperti dibawah :

Kalau kita klik salah satu post, maka POST requestnya adalah sebagai berikut :

Jadi didalam GraphQL, terdapat 2 operasi yang paling umum digunakan, yaitu query dan mutation. Query adalah bentuk operasi yang digunakan ketika kita mau mengambil sebuah data. Sedangkan mutation adalah bentuk operasi yang digunakan ketika kita mau memanipulasi sebuah data, seperti insert, delete, atau update data. Tahap pertama yang biasa saya lakukan ketika berhadapan dengan GraphQL adalah melakukan Introspection Query. Introspection Query adalah bentuk query yang digunakan untuk mengenumerate query, mutation, fields, dan resource lainnya yang tersedia di GraphQL. Berikut adalah request body yang saya gunakan :

Melalui introspection query, berikut adalah response yang diberikan :

Lalu paste hasil introspection ke https://apis.guru/graphql-voyager/ dan disitu terdapat 3 jenis query, yaitu flag, post, dan posts :

Langsung saja saya gunakan body berikut untuk mendapatkan flag :

Berikut adalah responsenya. Berdasarkan analisa saya, sepertinya kita perlu mendapatkan token dulu untuk dapat memperoleh flag :

Selanjutnya kita lihat mutation. Disitu ada 3 mutation yang tersedia, createUser, createPost, dan authenticateUser :

Disini saya akan coba createUser terlebih dahulu, dengan payload :

Response dari server sepertinya menunjukkan bahwa register berhasil :

Selanjutnya, saya coba autentikasi dengan username dan password yang telah didapat, dengan body :

Berikut adalah response dari server. Saya berhasil mendapatkan JWT token :

Lalu ambil flag dengan mengsupply JWT token di request header dan dengan body :

Lalu server memberikan response bahwa hanya congon4tor yang dapat memperoleh flag :

Disitu user congon4tor sudah teregister, makanya userID kita bernilai 2. Lalu terpikirlah saya untuk nyoba SQL injection pada variable, untuk mendapatkan password congon4tor. Ini adalah request mula-mula sebelum payload SQLI:

Setelah payload sqli :

Disitu semua post muncul :

Selanjutnya coba fuzzing jumlah column, dengan payload :

Lalu dapat jumlah columnnya ada 6 :

Lalu dengan payload sqli (disini saya menebak nama tablenya users. Saya coba user tidak bisa, dan saat coba table users bisa) :

Disini saya dapat credential dari congon4tor, yaitu congon4tor:n8bboB!3%vDwiASVgKhv. Berikut responsenya :

Lalu, login sebagai congon4tor dengan body :

Maka kita akan dapat JWT tokennya :

Lalu ambil flag dengan mengsupply JWT token milik congon4tor dan dengan body :

Lalu saya berhasil mendapatkan flag :

Flag : flag{9d26b6e4a765ecd87fe03a1494c22236}

Leave a Reply

Your email address will not be published. Required fields are marked *