Broken Access Control
Atualizado
Atualizado
Encontre um sandbox de código para escrever contratos em tempo real que foi implantado acidentalmente.
Esse desafio é bem simples e basta analisar o código-fonte da aplicação. Pesquisando sandbox
no arquivo main.js
, encontramos o caminho para acessar o sandbox.
Acesse a seção administrativa da loja.
Para resolver esse desafio, você pode tentar adivinhar onde está localizado o painel do administrador ou descobrir por força bruta usando uma wordlist. Nesse caso, o painel está localizado no endpoint /administration
.
Veja o carrinho de outro usuário.
Para esse desafio, podemos analisar as requisições que são realizadas ao acessar nosso carrinho.
Perceba a requisição realizada ao endpoint /rest/basket/1
. É uma chamada à API que retorna os produtos contidos no carrinho do usuário. Se tentarmos alterar o 1
por outro valor (2, por exemplo) e reenviar a requisição, a aplicação não realiza a devida validação e somos capazes de visualizar o carrinho de outro usuário, obtendo sucesso no desafio.
Livre-se dos feedbacks de 5 estrelas dos clientes.
Nesse desafio, é preciso uma noção de como uma API costuma ser estruturada. Ao acessar a página Sobre Nós
, podemos observar uma requisição GET
ao endpoint /api/Feedbacks
que retorna a seguinte estrutura em JSON:
Observe que dentro os atributos retornados para cada feedback está o rating
, que seria quantas estrelas o usuário atribuiu. Podemos tentar alterar essa requisição informando um parâmetro ?rating=5
à URL, e agora serão resultados apenas os feedbacks com 5 estrelas. Dessa forma, já sabemos quais feedbacks teremos que remover. Agora, vamos navegar até a página que permite enviar um feedback, preencher ela e enviar. Observe que será feita uma requisição POST
ao endpoint /api/Feedbacks
com os seguintes dados no corpo da requisição:
Podemos manipular essa requisição alterando o método para GET
e adicionar um /1
na URL, ficando /api/Feedbacks/1
. Caso exista um feedback com o id 1, ele irá carregar esse feedback. Com isso, podemos tentar alterar o método para DELETE
e ver como a aplicação se comporta. Nesse caso, a aplicação responde com o status de sucesso, e se tentarmos listar os feedbacks novamente, o feedback com id 1 não aparece. Ou seja, a aplicação não realizou nenhuma validação e foi possível remover o feedback com base em seu id. Agora basta unirmos todas essas informações para resolver o desafio. Podemos listar todos os feedbacks com id 5 e removê-los.
É possível resolver esse desafio apenas acessando o painel de administrador e removendo os feedbacks. Entretanto, a exploração da API é um cenário mais realístico e aplicável.
Faça um comentário em nome de outro usuário.
Para esse desafio, podemos interceptar a requisição de envio de feedback e alterar o parâmetro UserId
no corpo da requisição. Colocando o id de outro usuário e enviando, a aplicação não realiza a devida validação e publica o comentário como se outro usuário tivesse publicado, resultando na resolução do desafio.