OWASPIL Quebrando o Captcha – Nightmare


Semelhante ao desafio anterior, desta vez o desenvolvedor do site reforçou sua segurança e implementou um mecanismo mais complicado para seu Captcha e ainda acrescentou um exercício matemático. Nosso objetivo no desafio é contornar ambos os mecanismos e ainda sobrecarregar seu formulário com código.

Temos que resolver 15 desafios de captcha em 30 segundos, só que desta vez é um desafio de continuação e o nível de dificuldade do desafio aumentou.

Resolvendo o desafio:

O desafio é assim:

Para resolver este desafio, incluímos o script do desafio anterior que pode decodificar a imagem e extrair o texto.

Para que o texto seja extraído, devemos primeiro processar o captcha, fizemos uma série de solicitações e salvamos todas as imagens captcha que baixamos do servidor.

Pode-se ver que todos eles contêm texto em uma cor e plano de fundo diferentes a cada solicitação e até mesmo barras pretas são adicionadas no topo do texto para dificultar para nós.

O refinamento do script é demonstrado principalmente na conversão das cores na imagem da seguinte forma:

  1. Se o pixel for branco, vamos substituí-lo por preto.
  2. Se o pixel contiver qualquer cor, vamos substituí-lo por branco.

É importante notar que o módulo pytesseract lê o texto de forma otimizada quando o texto é preto em um fundo branco, portanto, mudar apenas o fundo para preto e deixar o texto branco não nos ajudará. O código-chave para análise de imagem é assim:


Link para o código no meu Github

Explicação do script:
Depois de analisar a imagem notamos que às vezes o texto que retorna contém caracteres que não são letras e números e não aparecem de fato no captcha este é um problema no mecanismo de diagnóstico do pytesseract, então escrevemos um comando lambda que limpa o código de caracteres especiais e deixa apenas caracteres e números.

Outra otimização que realizamos foi cortar a imagem de acordo com a largura do texto, que é fixada em todas as imagens para permitir que o mecanismo de OCR do pytesseract diagnostique o texto de forma otimizada..

Uma vez que tenhamos conseguido analisar, a maneira de resolver o desafio é simples:

  1. Baixamos o exercício de matemática da página, enviando uma solicitação para o endereço:
    “ http://challenges.owaspil.ctf.today:8085/`
    O exercício é extraído por expressão regular.
  2. baixando o captcha da página enviando uma solicitação para a página no endereço:
    “ http://challenges.owaspil.ctf.today:8085/captcha.php`
    E baixamos a imagem.
  3. Extraia o texto da imagem usando uma função ()fix_captcha Que usa o código que apresentamos anteriormente.
  4. Envie a solicitação com todos os dados para o servidor e analise o resultado.
    Se o resultado contém os caracteres {} Conseguimos resolver o desafio.

O código completo é assim:

  
Executamos o código:

E assim recebemos a bandeira:
“ OWASP-IL{I_4M_Th3_0CR_N1nj4!}`

Outros artigos que você pode ter interesse: