fbpx

Criando Script em Python para quebrar senhas do Linux

Sabemos que existem vários scripts já prontos para quebrar senhas do Linux, porém melhor do que saber usar alguma ferramenta pronta, é saber como ela funciona e como criar seu script. Por este motivo iremos mostrar como criar um script em python para quebrar senhas do Linux através de uma wordlist.

Vale lembrar que em nossos treinamentos de cibersegurança você aprende ainda mais do zero ao avançado em nossa plataforma HackerSec Academy, conheça: https://hackersec.com/academy/

Primeiramente precisamos entender como funcionar as senhas no Linux, as senhas no Linux são armazenadas no arquivo /etc/shadow e este arquivo armazena a senha real no formato criptografado (mais parecido com o hash da senha) para a conta do usuário com propriedades adicionais relacionadas à senha do usuário. Basicamente, ele armazena informações seguras da conta do usuário. Todos os campos são separados por dois pontos (:). Ele contém uma entrada por linha para cada usuário listado no arquivo /etc/passwd, conforme exemplo abaixo.

[root@centos ~]# head -n1 /etc/shadow
root:$6$UXCFfDA3$xvrZI5Sn/52dwMAbkjC1wwxepW5AsICxtwpnfCoEErCO7.
8ZjOndhZjr82RFqtQOASFBJ4jyHwcnwKFD8JqKH/:17700:0:99999:7::

1º Campo: Usuário de acesso.
2º Campo: Senha do usuário criptografada.

A senha deve ter no mínimo 8 a 12 caracteres, incluindo caracteres especiais, dígitos, letras minúsculas e muito mais. Geralmente o formato da senha é definido como $id$salt$hash, O $id é o algoritmo usado no GNU/Linux da seguinte forma:

  • $1$ – MD5
  • $2a$ – Blowfish
  • $2y$ – Blowfish
  • $5$ – SHA-256
  • $6$ – SHA-512

Vamos apenas focar nos dois primeiros campos pois somente iremos usar eles para descobrirmos a senha do usuário.
Agora vamos para o que interessa, primeiro iremos executar os comandos no modo interativo e no final irei deixar o exemplo de um script para automatizar o processo.

  1. Execute o comando python no Linux:
    [root@centos ~]# python
    Python 2.7.5 (default, Aug 4 2017, 00:39:18)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
  2. Importe a biblioteca crypt:
    >>> import crypt
  3. Crie uma variável com id e o salt da senha contida no arquivo shadow:
    >>> salt = "$6$UXCFfDA3"
  4. Agora iremos executar a função crypt e analisar a saída do comando:
    >>> crypt.crypt("password", salt) '$6$UXCFfDA3$xvrZI5Sn/52dwMAbkjC1wwxepW5AsICxtwpnfCoEErCO7.
    8ZjOndhZjr82RFqtQOASFBJ4jyHwcnwKFD8JqKH/'

A função crypt recebe dois parâmetros, sendo eles, uma senha e o salt com o id. Neste caso estamos passando a senha sendo “password” e o salt com o id que pegamos no arquivo shadow “$6$UXCFfDA3”.

Podemos notar que a saída do comando crypt é exatamente igual a linha que temos no arquivo shadow para o usuário root:

[root@centos ~]# head -n1 /etc/shadow
root:$6$UXCFfDA3$xvrZI5Sn/52dwMAbkjC1wwxepW5AsICxtwpnfCoEErCO7.
8ZjOndhZjr82RFqtQOASFBJ4jyHwcnwKFD8JqKH/:17700:0:99999:7:::
>>> crypt.crypt("password", salt)
'$6$UXCFfDA3$xvrZI5Sn/52dwMAbkjC1wwxepW5AsICxtwpnfCoEErCO7.
8ZjOndhZjr82RFqtQOASFBJ4jyHwcnwKFD8JqKH/'

Comparando as duas saídas, podemos identificar que a senha do usuário root neste caso é password.

Agora conforme prometido, segue o script automático ao qual você irá passar o arquivo shadow e uma wordlist como parâmetro e ele fará todo o resto!

[root@centos ~]# cat HSLinuxPWD.py

Use o código: https://github.com/TiagoANeves/TDTLinuxPWD

Executando o script:

[root@centos ~]# python HSLinuxPWD.py -s /etc/shadow -w wordlist.txt
Iniciando o programa...
Bruteforcing a senha do usuario root
Testando a senha 123456
Testando a senha 12345
Testando a senha 123456789
Testando a senha password
Senha encontrada! Password