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:
- Se o pixel for branco, vamos substituí-lo por preto.
- 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:
- 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. - 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. - Extraia o texto da imagem usando uma função ()fix_captcha Que usa o código que apresentamos anteriormente.
- 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!}`