← retour aux outils back to tools

# certi

Outil d'énumération des services de certificats Active Directory. Interroge ADCS pour les templates de certificats, les permissions d'inscription, et identifie les chemins d'élévation de privilèges potentiels sans générer d'alertes. Active Directory Certificate Services enumeration tool. Queries ADCS for certificate templates, enrollment permissions, and identifies potential privilege escalation paths without generating alerts.

↗ https://github.com/eloypgz/certi

## Overview

Certi enumerates Active Directory Certificate Services (ADCS) to find certificate templates, CA configurations, and enrollment permissions. It’s a passive enumeration tool — does not request certificates or modify anything, making it useful for low-noise reconnaissance before exploitation with certipy-ad.

## Installation

    pip3 install certi
    # or
    git clone https://github.com/eloypgz/certi
    cd certi
    pip3 install .

## Basic Usage

Enumerate all ADCS templates

    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password

List vulnerable templates only

    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password -v

Get details on a specific template

    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password --template "VulnTemplate"

## Enumeration Commands

List all certificate templates

    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password

Show templates with enrollment permissions

    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password --enroll

Show CA information

    certi.py getca --dc-ip 10.10.10.1 DOMAIN/user:password

Show interesting templates (potential ESC paths)

    certi.py req --dc-ip 10.10.10.1 DOMAIN/user:password

## Comparing with certipy-ad

certi — passive enumeration only (no certificate requests) Good for: initial recon, low-noise assessment

    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password -v

certipy-ad — enumeration + exploitation Good for: full assessment + attack

    certipy find -u user@domain.local -p password -dc-ip 10.10.10.1 -vulnerable

## What Certi Finds

    # Template information:
    # - Template name
    # - Enrollment permissions (who can request)
    # - Certificate purpose (EKU)
    # - SAN (Subject Alternative Name) settings
    # - Manager approval required?
    # - Authorized signature count

    # ESC1 indicators:
    # - Any user can enroll
    # - Client Authentication EKU
    # - Enrollee can supply SAN

## Tips

- Run certi first for passive enumeration, then certipy for exploitation
- Any template with “Any User” enrollment + SAN flexibility = ESC1 candidate
- Certi’s `-v` flag highlights potentially vulnerable templates
- Cross-reference with BloodHound’s ADCS edges for attack path visualization
- Document all template findings for the security report

Help / Man page

    certi.py [command] [options] target

    target: DOMAIN/username:password

    Commands:
      list      List certificate templates
      getca     Get CA information
      req       Request certificate info

    Options:
      --dc-ip IP    Domain controller IP
      --template T  Specific template name
      -v            Verbose (highlight interesting)
      --enroll      Show enrollment permissions

## Vue d’ensemble

Certi énumère les services de certificats Active Directory (ADCS) pour trouver les templates de certificats, les configurations de CA et les permissions d’inscription. C’est un outil d’énumération passive : il ne demande aucun certificat et ne modifie rien, ce qui le rend utile pour une reconnaissance à faible bruit avant exploitation avec certipy-ad.

## Installation

    pip3 install certi
    # ou
    git clone https://github.com/eloypgz/certi
    cd certi
    pip3 install .

## Utilisation de base

    # Énumérer tous les templates ADCS
    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password

    # Lister uniquement les templates vulnérables
    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password -v

    # Récupérer les détails d'un template précis
    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password --template "VulnTemplate"

## Commandes d’énumération

    # Lister tous les templates de certificats
    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password

    # Afficher les templates avec permissions d'inscription
    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password --enroll

    # Afficher les informations de la CA
    certi.py getca --dc-ip 10.10.10.1 DOMAIN/user:password

    # Afficher les templates intéressants (chemins ESC potentiels)
    certi.py req --dc-ip 10.10.10.1 DOMAIN/user:password

## Comparaison avec certipy-ad

certi : énumération passive uniquement (aucune demande de certificat). Bon pour : recon initiale, évaluation à faible bruit.

    certi.py list --dc-ip 10.10.10.1 DOMAIN/user:password -v

certipy-ad : énumération + exploitation. Bon pour : évaluation complète + attaque.

    certipy find -u user@domain.local -p password -dc-ip 10.10.10.1 -vulnerable

## Ce que trouve Certi

    # Informations sur le template :
    # - Nom du template
    # - Permissions d'inscription (qui peut demander)
    # - Usage du certificat (EKU)
    # - Réglages du SAN (Subject Alternative Name)
    # - Approbation d'un manager requise ?
    # - Nombre de signatures autorisées

    # Indicateurs ESC1 :
    # - N'importe quel utilisateur peut s'inscrire
    # - EKU Client Authentication
    # - L'inscrit peut fournir le SAN

## Conseils

- Lancez d’abord certi pour l’énumération passive, puis certipy pour l’exploitation
- Tout template avec inscription “Any User” + flexibilité du SAN = candidat ESC1
- Le flag `-v` de Certi met en évidence les templates potentiellement vulnérables
- Recoupez avec les edges ADCS de BloodHound pour visualiser le chemin d’attaque
- Documentez toutes les découvertes de templates pour le rapport de sécurité

Aide / Page de manuel

    certi.py [command] [options] target

    target: DOMAIN/username:password

    Commands:
      list      List certificate templates
      getca     Get CA information
      req       Request certificate info

    Options:
      --dc-ip IP    Domain controller IP
      --template T  Specific template name
      -v            Verbose (highlight interesting)
      --enroll      Show enrollment permissions