Med Graph

My startup is launching the next big patient portal, using the hottest new tech! Check it out with our guest account: Demo:TUCTF. We're still in beta, but it's so secure we already have users! Note: This challenge requires no bruteforcing or intense scanning of the application.

O desafio consiste em um Insecure Direct Object Reference (IDOR) no GraphQL. Após acessar o site e se autenticar com as credenciais de visitante fornecidos, é possível identificar uma requisição para um endpoint de GraphQL, passando uma query para obter os dados do usuário.

Histórico de requisições do Burp Suite mostrando a query do GraphQL

Podemos então tentar rodar uma query de introspecção para entender um pouco mais do schema do banco de dados. Utilizei essa do PayloadAllTheThings.

Após rodar a query de introspecção, podemos pegar o resultado e passar no GraphQL Visualizer para obter um resultado visual da relação entre as tabelas. Logo podemos perceber que há o campo password para o PacientType e DoctorType.

Visualização do schema do GraphQL

Podemos então tentar mandar uma query com os campos de senha no usuário e doutor.

Como resultado, o servidor nos retorna o hash da senha do usuário atual e do doutor.

O hash é um SHA-256, podemos utilizar o John the Ripper com a wordlist do rockyou.txt para achar a senha do doutor.

Obtemos que a senha é madjac. Assim podemos logar com a conta Ivy:madjac, obtendo a flag.

Dashboard após o login como doutor, assim obtendo a flag

Atualizado