
LDAP Swiss Army Knife
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
Maven requis.
mvn package verify
-> target/ldap-swak-0.0.5-SNAPSHOT-all.jar
Exécutez simplement le fichier JAR avec la sous-commande et les options appropriées :
> 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
Interceptez simplement les identifiants ou fournissez des données au client.
Options supplémentaires :
--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é)