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
Ferramentas/GitHubGitHub/sensepost/assless-chaps
Quebra de SenhasAuditoria de Wi-FiAnálise de HashCriptografiaTestes de Penetração
GitHubsensepost/assless-chaps

assless-chaps

Quebre desafios/respostas MSCHAPv2 rapidamente usando um banco de dados de hashes NT

Ver Repositório
14119há 27 diasRevisado 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

assless-chaps

Quebre desafios/respostas MSCHAPv2/NTLMv1 rapidamente usando um banco de dados de hashes NT

Introdução

Assless CHAPs é uma maneira eficiente de recuperar o hash NT usado em uma troca MSCHAPv2/NTLMv1 se você tiver o desafio e a resposta (por exemplo, de um ataque WiFi EAP WPE).

Requer um banco de dados de hashes NT, instruções sobre como criá-los a partir de listas existentes ou usando hashcat com wordlists e regras estão disponíveis abaixo. Incluí um banco de dados de exemplo do SecLists. Você precisará descomprimir com bunzip.

Técnica

Uma troca MSCHAPv2 não exige que a senha em texto claro seja "quebrada"; em vez disso, precisamos apenas do NThash usado.

MSCHAPv2 divide o NThash em três partes e usa cada parte como chaves diferentes para criptografar DES o mesmo desafio (derivado dos desafios do par e do autenticador). O NTHash é dividido em duas chaves de 7 bytes e uma chave de 2 bytes. Isso significa que a última chave é preenchida com NULLs para formar uma chave do comprimento necessário. Isso pode ser rapidamente forçado por brute force devido à eficiência da operação DES e a um espaço de chaves de 65.535. Uma vez que temos esses dois bytes, podemos procurar todos os NThashes em nosso banco de dados que terminam nesses dois bytes. Isso fornece um conjunto muito menor de hashes possíveis para verificar.

Esta é uma forma de compromisso entre espaço e tempo, semelhante a uma tabela rainbow. Também é uma forma de hash shucking.

Apresentação

Isso foi apresentado pela primeira vez no Defcon 29's RF Hacking Village. Os slides estão incluídos neste repositório.

Velocidade

Aqui está a comparação para três amostras de desafio/resposta e três wordlists diferentes: uma pequena privada, rockyou e a lista Have I Been Pwned. Os testes foram feitos no meu Macbook Pro 2016. O Hashcat está usando este kernel de hash shucking e as duas GPUs integradas, e um kernel puro em vez de otimizado (pois este último ainda não existe). Hash3 não está nas listas para simular o pior caso de desempenho. Não estou incluindo o tempo que o hashcat leva para construir o cache do dicionário na primeira execução.

Hash1

Small hashlist:

root@kitploit:~
hashcat 0.50s user 0.27s system 55% cpu 1.405 total (8597.8 kH/s)
assless 0.05s user 0.00s system 294% cpu 0.018 total

Rockyou hashlist:

root@kitploit:~
hashcat 2.67s user 0.51s system 93% cpu 3.413 total
assless 0.05s user 0.01s system 281% cpu 0.021 total

HIBP hashlist:

root@kitploit:~
hashcat 59.97s user 11.72s system 136% cpu 52.603 total (5620.6 kH/s)
assless 0.05s user 0.00s system 292% cpu 0.018 total

Hash 2

Small hashlist:

root@kitploit:~
hashcat 0.51s user 0.27s system 55% cpu 1.409 total (8704.7 kH/s)
assless 0.03s user 0.00s system 248% cpu 0.012 total

Rockyou hashlist:

root@kitploit:~
hashcat 2.20s user 0.46s system 110% cpu 2.409 total (5798.4 kH/s)
assless 0.03s user 0.00s system 231% cpu 0.015 total

HIBP hashlist:

root@kitploit:~
hashcat 65.37s user 12.74s system 135% cpu 57.712 total (5768.7 kH/s)
assless 0.03s user 0.00s system 249% cpu 0.013 total

Hash 3

Hash 3 doesn't exist in any of the hashlists to simulate a worst case lookup performance.

Small hashlist:

root@kitploit:~
hashcat 0.67s user 0.34s system 66% cpu 1.526 total (7550.1 kH/s)
assless 0.02s user 0.00s system 211% cpu 0.012 total

Rockyou hashlist:

root@kitploit:~
hashcat 2.71s user 0.52s system 94% cpu 3.415 total (5685.4 kH/s)
assless 0.02s user 0.01s system 181% cpu 0.014 total

HIBP hashlist:

root@kitploit:~
hashcat 125.19s user 27.62s system 139% cpu 1:49.75 total (5634.9 kH/s)
assless 0.06s user 0.03s system 115% cpu 0.075 total

Instalação

A versão em Rust requer SQLite 3.6.8 ou mais recente.

A versão em Python requer python3, sqlite3 e pycryptodome.

O utilitário de criação do banco de dados requer python3 e a CLI do sqlite3.

Compilação

Isso se aplica apenas à versão em Rust. Você precisará do cargo.

Com o cargo instalado, basta mudar para o diretório assless-chaps-rs e compilar com: cargo build --release

O binário resultante estará no diretório target/release/.

Uso

O Assless requer o desafio, a resposta e o banco de dados de NThashes. Opcionalmente, a versão em Python pode usar o arquivo de consulta de dois bytes otimizado incluído. O uso mais simples é assim:

./assless-chaps <Challenge> <Response> <hashes.db>

Por exemplo:

./assless-chaps 5d79b2a85966d347 556fdda5f67d2b746ca3315fd8b93adcab5c792790a92e87 rockyou.db

A saída deve parecer com:

root@kitploit:~
[-] Two byte lookup file not provided, will brute force instead.
[+] Found in 22636 tries: 586c
[-] Found 222 hashes ending in 586c
[+] Found hash: 8846f7eaee8fb1
[-] Found after 186 hashes.
[+] Found hash: 17ad06bdd830b7
[+] Full hash: 8846f7eaee8fb117ad06bdd830b7586c

O hash completo final 8846f7eaee8fb117ad06bdd830b7586c é o hash NT para password.

Consulta de dois bytes - Apenas Python

Passei algum tempo construindo uma lista de todos os 65.535 valores possíveis de dois bytes, ordenados pelos mais prevalentes em um grande corpus de senhas. Este arquivo está incluído como twobytes. Você pode simplesmente passá-lo como o quarto argumento para o assless.

Isso geralmente economiza algumas rodadas de DES, mas não faz uma grande diferença de velocidade. Pode fazer se você estiver processando muitos hashes.

python3 assless-chaps.py 5d79b2a85966d347 556fdda5f67d2b746ca3315fd8b93adcab5c792790a92e87 rockyou.db twobytes

root@kitploit:~
[+] Found in 65533 tries: 586c
[-] Found 222 hashes ending in 586c
[+] Found hash: 8846f7eaee8fb1
[-] Found after 186 hashes.
[+] Found hash: 17ad06bdd830b7
[+] Full hash: 8846f7eaee8fb117ad06bdd830b7586c

Criando seu próprio dicionário de hashes

O arquivo mksqlitedb.py ajudará a transformar um arquivo CSV de hashes no banco de dados.

python3 mksqlitedb.py <database name> <csv file>

O arquivo CSV requer três colunas:

  • Os últimos dois bytes do hash (os últimos quatro caracteres ASCII)
  • Os primeiros 7 bytes (os primeiros 14 caracteres ASCII)
  • Os segundos 7 bytes (os caracteres ASCII 15 a 29)

Por exemplo, o hash 8846f7eaee8fb117ad06bdd830b7586c se tornará:

586c,8846f7eaee8fb1,17ad06bdd830b7

Um exemplo de transformação regexp para isso seria: echo 8846f7eaee8fb117ad06bdd830b7586c | sed "s/^\(.\{14\}\)\(.\{14\}\)\(.\{4\}\)$/\3,\1,\2/"

Você pode usar uma lista existente de hashes (como as listas Have I Been Pwned) ou gerar a sua própria usando hashcat e suas combinações favoritas de wordlist/regras.

Usando Have I Been Pwned

As listas de senhas HIBP já são baixáveis como hashes NT, basta remover a contagem do arquivo e convertê-las para o formato CSV para serem importadas para o banco de dados.

Isso pode ser feito usando o utilitário Unix padrão sed da seguinte forma:

sed "s/^\(.\{14\}\)\(.\{14\}\)\(.\{4\}\):.*/\3,\1,\2/" pwned-passwords-ntlm-ordered-by-hash.txt > hibp.csv

Após o que pode ser importado usando mksqlitedb.py hibp.db hibp.csv.

Convertendo uma wordlist em uma hashlist

Para converter uma wordlist simples em uma hashlist de nthashes, você pode usar nthasher, que processa grandes wordlists rapidamente. Os hashes resultantes precisarão ser transformados no formato CSV necessário, conforme descrito acima.

Um nthasher muito mais lento, que gera os hashes diretamente no formato CSV necessário, está incluído neste repositório e é executado simplesmente com:

python3 nthash-from-clear.py <wordlist> > hashlist.csv

Se você quiser expandir a wordlist com regras, veja a próxima seção sobre o uso do hashcat.

Usando hashcat para criar um arquivo CSV de hashes a partir de wordlists e regras

Você precisará fazer uma pequena alteração no código do módulo OpenCL do modo 1000 para fazê-lo gerar todos os hashes, em vez de apenas aqueles que correspondem ao seu candidato de quebra. Por padrão, ele gerará o hash no formato CSV correto necessário.

  • Mude para o diretório OpenCL do seu hashcat: cd hashcat/OpenCL
  • Aplique o patch: patch < m01000_a0-pure.cl.patch
  • Prepare um arquivo com um hash NT impossível de quebrar, como echo 11111111111111111111111111111111 > impossible_hash
  • Quebre normalmente, mas desative seu potfile e redirecione a saída para um arquivo: hashcat -m1000 impossible_hash rockyou.txt -r best64.rule --potfile-disable --quiet > rockyou.csv
  • Crie seu banco de dados de hashes: python3 mksqlitedb.py rockyou.db rockyou.csv

Uma nota sobre espaço em disco e tamanhos de arquivo

O banco de dados SQLite é tipicamente 61% maior que o arquivo CSV usado para criá-lo. Também pode levar algum tempo para criar o banco de dados, dependendo do tamanho dos arquivos. Prepare os requisitos do seu sistema de arquivos adequadamente.

Aqui está um exemplo usando o dicionário rockyou:

  • Dicionário rockyou base: 129M
  • rockyou.csv gerado pelo hashcat: 462M
  • Banco de dados SQLite resultante rockyou.db: 746M
  • Compressão máxima BZip2 rockyou.db.bz2: 339M

Você poderia economizar espaço convertendo e inserindo cada hash dinamicamente, pulando a necessidade do arquivo CSV intermediário.

NTLMv1 SSP

NTLMv1 funcionará exatamente da mesma forma, a menos que esteja usando SSP. Você saberá se o SSP está em uso se obtiver uma resposta LM que termina em vários zeros. Você pode usar o ntlm-ssp.py incluído para produzir o desafio do servidor que o assless precisará.

Execute assim: python3 ntlm-ssp.py <lm response> <challenge>

Por exemplo, se usarmos o exemplo de desafio/resposta NTLMv1-SSP dos hashes de exemplo do hashcat: u4-netntlm::kNS:338d08f8e26de93300000000000000000000000000000000:9526fb8c23a90751cdd619b6cea564742e1e4bf33006ba41:cb8086049ec4736c

Você passaria o LM e o desafio assim:

python3 ntlm-ssp.py 338d08f8e26de93300000000000000000000000000000000 cb8086049ec4736c

E obteria a seguinte resposta:

The server challenge is: 724edf24aea0d68b

Que pode então ser quebrado com assless-chaps normalmente:

./assless-chaps 724edf24aea0d68b 9526fb8c23a90751cdd619b6cea564742e1e4bf33006ba41 hashes.db

Baixar ferramenta