Teste de API
Atualizado
Atualizado
Para solucionar esse laboratório, encontre a documentação da API e remova o
carlos
. Você pode autenticar-se utilizando as credenciaiswiener:peter
.
Esse laboratório é bem simples, e basta apenas um pouco de noção sobre API e navegar pela aplicação.
Conforme orientado na descrição, podemos abrir o laboratório e fazer login acessando "My account" e informando as credenciais wiener:peter
.
Após a autenticação, a aplicação apresenta um formulário em que é possível alterar o e-mail. Nesse caso, eu estava interceptando o tráfego com o Burp Suite e realizei uma troca de e-mail. Com isso, foi possível observar uma requisição com método PATCH ao endpoint /api/user/wiener
passando um JSON com o parâmetro e-mail e o valor que informei no formulário.
Enviei essa requisição para o Burp Repeater, removi o corpo da requisição (nesse caso, os dados JSON), alterei o método para DELETE e substituí o wiener
por carlos
. Ao enviar a requisição modificada, a aplicação não realiza nenhum controle e permite a exclusão do usuário carlos
, concluindo a resolução desse laboratório.
Para solucionar esse laboratório, explore um endpoint de API escondido para comprar uma Lightweight l33t Leather Jacket. Você pode se autenticar usando as credenciais
wiener:peter
.
Como no desafio anterior, podemos fazer login e navegar pela aplicação. Ao adicionar um produto no carrinho, é possível observar no histórico do Burp uma requisição ao endpoint /api/products/1/price
, que retorna um JSON com o valor do produto. É normal que na construção de endpoints de API elas utilizem os métodos HTTP para identificar qual ação deve ser realizada. Se enviarmos essa requisição para o Burp Repeater, podemos alterá-la e observar o comportamento da aplicação. Ao mudar o método para PATCH, adicionar um JSON ao corpo da requisição com um objeto "price" recebendo o valor 0, da seguinte forma:
adicionar o cabeçalho Content-Type: application/json
e enviar, percebe-se que a aplicação apresenta uma resposta bem-sucedida indicando que o valor do produto agora é zero. Por fim, para resolver o desafio, basta adicionar uma Lightweight l33t Leather Jacket ao carrinho e prosseguir com a compra. Feito isso, o laboratório será marcado como resolvido.
Para solucionar o laboratório, encontre e explore a vulnerabilidade de atribuição em massa para comprar uma Lightweight l33t Leather Jacket. Você pode se autenticar utilizando as credenciais
wiener:peter
.
Nesse laboratório, pode-se autenticar, navegar pela aplicação e adicionar o item pedido na descrição ao carrinho. Após isso, é possível verificar no histórico de requisições do Burp uma requisição GET
ao endpoint /api/checkout
que retorna um objeto JSON com diversas informações, tal como representado logo abaixo:
Observe o objeto chosen_discount
que possui um atributo percentage
. Ao mudar o método da requisição ao endpoint /api/checkout
para POST
e enviar um objeto alterando o atributo percentage
do objeto chose_discount
para 100, obtém-se 100% de desconto no produto, permitindo que ele seja comprado. Com isso, o laboratório é resolvido.
Para solucionar o laboratório, faça autentique-se como
administrator
e remova o usuáriocarlos
.
Nesse laboratório, é possível explorar a funcionalidade de recuperação de senha. Com um proxy interceptando as requisições, pode-se navegar para My account
no menu e clicar em Forgot password?
. Preencha e envie o formulário, observando as requisições que estão sendo salvas. Dentre as requisições, é possível encontrar o arquivo /static/js/forgotPassword.js
que possui um código em JavaScript para realizar o processo de recuperação de senha. Se modificarmos a requisição POST feita anteriormente no formulário de recuperação de senha, podemos ver que ela recebe dois parâmetros, sendo eles um token CSRF e o outro o nome de usuário que informamos. Se inserirmos um %23
(que no caso é um cerquilha URL-encoded) no final do corpo da requisição, a aplicação acusa um erro informando que o parâmetro field
não foi informado. Isso significa que quando o cliente enviou a requisição ao servidor, o %23
truncou a requisição e um atributo field
que era adicionado ao final do corpo da requisição não foi interpretado pelo servidor, visto que qualquer dado inserido a partir do %23
deixou de ser interpretado. Com isso, podemos continuar a exploração adicionando o parâmetro field
manualmente. Para isso, pode-se utilizar um %26
, que é um &
URL-encoded e passar logo a seguir o parâmetro field
, ficando da seguinte forma:
Ao enviar a requisição dessa forma, a aplicação retorna uma resposta com o status 400
e um erro informando que o valor informado ao parâmetro field
não é válido. Se analisarmos o arquivo JavaScript citado anteriormente, percebe-se que para recuperação de senha é necessário enviar uma requisição GET
informando o parâmetro reset_token
. Ou seja, reset_token
é um atributo processado pela aplicação e pode ser um valor válido para o parâmetro field
. Definido o reset_token
no field
e enviando a requisição, o servidor responde com o token para redefinição de senha do usuário administrador. Agora, basta realizar uma requisição GET
para /forgot-password?reset-token=
TOKEN_OBTIDO
e informar uma nova senha para o usuário administrator
. Com isso, é possível fazer login na plataforma e acessar o painel do administrador, possibilitando a remoção do usuário carlos
e obtendo sucesso no desafio.