XSS Armazenado Via Upload de Foto

3 years ago 417
BOOK THIS SPACE FOR AD
ARTICLE AD

Gabriel Lima

Foto por XLABS

Nessa ultima semana (15/05) eu estava estudando por artigos e reports da hackerone, até que me deparei com uma falha de XSS armazenado por uma imagem, achei muito legal a ideia e quis reproduzir em meus clientes e em uma plataforma de bug bounty, por incrível que pareça isso funcionou em ambas! Então hoje irei mostrar detalhadamente essa falha para que você possa aprender mais e testar em seu bug bounty.

O XSS armazenado, também conhecido como XSS persistente, é o mais prejudicial entre os tipos de XSS. Esta falha ocorre quando um script malicioso é injetado em um parâmetro que esteja sendo armazenado em algum banco de dados ou arquivo.

Obs: Pretendo trazer um artigo completo falando sobre os 3 tipos de XSS em breve.

Exiftool é uma ferramenta utilizada para analisar os metadados de uma imagem, com ela podemos ver, remover e adicionar certas informações e é assim que vamos adicionar uma payload na imagem.

Instalando Exiftool

Debian e Ubuntu.

sudo apt install exiftool

Para outras versões recomendo que acesse o site oficial, então você terá mais opções de instalação.

A imagem vai depender de onde você quer colocar (background, profile e etc), nos meus testes fiz em fotos de perfil usando essa aqui:

Imagem demonstrativa

Eu recomendo essa imagem pois ela encaixa muito bem para o padrão de imagens de foto de perfil.

Com a nossa imagem baixada, com o exiftool baixado agora podemos seguir em frente utilizando este comando:

exiftool -Comment="\"><script>alert(prompt('XSS Stored Gabriel Lima'))</script>" Nome_da_foto.png

Nesse comando estamos usando o exiftool para colocar a payload no comment da foto.
Obs: Você não é obrigado a usar só esta payload, você pode testar varias outras!

Caso tudo de certo a resposta será esta:

Imagem atualizada com a payload

Rodando o exiftool na imagem temos as informações do metadados assim:

Imagem mostrando a payload nos metadados

Se na parte comment estiver a payload significa que está tudo pronto.

Agora que temos nossa imagem pronta vamos explorar a falha, primeiramente o que temos que fazer é encontrar um lugar que disponibiliza o upload de foto, geralmente localizamos na aba “Perfil”, mas claramente isso depende muito de aplicação para aplicação.

Aviso: Por questão de ética estarei privando dados do site que eu efetuei o report, não tenho a intenção de denegrir a empresa, estou apenas ensinado uma técnica para ajudar a comunidade de bug bounty e pessoas que querem aprender algo novo!

Campo de Upload

Agora que localizamos o campo para fazer upload de foto, temos que ligar o nosso burpsuite para interceptar a conexão no meio do upload e então temos que localizar o Content-Type.

Content-Type image/png

O que faremos agora é alterar o tipo de conteudo, iremos modificar para text/html, faremos isso para que ele interprete a nossa foto como um código e dessa forma ativamos o XSS.

Content-Type: text/html

Content-Type alterado para text/html

Vamos deixar a conexão continuar clicando em Forward no burpsuite!

Foto com o XSS upada

Agora vamos conferir se a foto esta realmente com o XSS funcionando, para ver isso basta clicar com o botão direito na imagem, inspecionar o elemento e então teremos o caminho da foto.

Caminho da imagem

Clique com o botão direito no caminho e abra em uma nova guia e então recarregue a página.

XSS Feito com sucesso!

Então conseguimos pessoal, a partir daqui basta fazer um report e torcer pro dinheiro cair na conta!

Com a análise de outros reports e com base no meu, diria que se encontra entre uma falha de média criticidade, pois é necessário que o usuário abra a imagem em uma outra guia para funcionar.

Obs: Lembrando que isso vai de empresa para empresa, pode ser que um empresa classifique isto como uma falha média ou alta e assim vai.

Essa foi uma falha muito legal na minha opinião e não é algo que as pessoas pensam em fazer de primeira ou nem fazem!

Espero que este artigo tenha agregado em seu conhecimento e que vocês consigam achar uma falha dessa em sua jornada, caso queiram me apoiar basta me seguir no meu Instagram: @gabriel_lima232

Read Entire Article