Ae! Demoro mais voltei, agora escrevendo um pouco sobre análise de vulnerabilidades em aplicações web, de acordo com o título e sendo eu um chatão que gosta de colocar tudo nos míiiiiiiiiiiiiiinimos detalhes, deveria começar desmembrando o mestaploit e logo o ratproxy, mas UFA! Não vou precisar :)
Wagner, fez uma excelente abordagem de como o ratproxy funciona há um tempo atraz, Luiz Vieira fez uma abordagem inicial sobre o metasploit, portanto para o bom entendimento deste post recomendo a leitura de ambos ou se você já tem o conhecimento dos dois softwares citados prepare-se pois, HD Moore e seus comparsas deram mais um passo rumo a dominação do mundo.
Vou falar do recente lançado WMAP, a idéia principal é de um “Web Application Scanner” dentro do Metasploit para automação, busca de falhas e a exploração das mesmas, mantendo uma abordagem simples, prática e diferente de outras ferramentas como w3af, acunetix entre outras…
A topologia fica assim:
[CLIENT] ----- [ATTACK PROXY] ----- [TARGET]
| ^
[METASPLOIT DB] |
| |
[MSF 3 - WMAP SCANNER] |
[MSF 3 - WMAP MODULES] -----+
Recomendo utilizar sempre a última versão do Metaploit a partir do SVN, para que possa contribuir para o projeto encontrando bugs, corrigindo, ajudando a testar e etc…
- Mas Ulisses eu não sou programador!
E quem disse que precisa ser programador pra arrumar “scripts” em Ruby?! Dúvida? aqui a prova! ;P
Deixa de lerolero e vamos pra pancada, a primeira pergunta que surge é:
- OK, bacana e na prática?
Baixe o Metasploit, escolha um diretório ninja onde guarda suas ferramentas e:
svn co http://metasploit.com/svn/framework3/trunk/ framework3
Agora o querido ratproxy:
wget http://ratproxy.googlecode.com/files/ratproxy-1.51.tar.gz
tar xvzf http://ratproxy.googlecode.com/files/ratproxy-1.51.tar.gz
É preciso aplicar um patch no ratproxy para que ele possa armazenar seus resultados em um database criado com sqlite3 (sim, sim, para compilar você vai precisar dos arquivos de desenvolvimento do sqlite3). Ah! Logo vão entender o porque do sqlite3…
Copie o patch:
cp /diretórioninjadeferramentas/framework3/external/ratproxy/ratproxy_wmap.diff .
Aplique o patch:
patch -d /diretórioninjadeferramentas/framework3/external/ratproxy < ratproxy_wmap.diff
Bora compilar:
cd ratproxy
make
Beleza tudo pronto, metasploit versao svn instalado, ratproxy com patch aplicado. Antes de ir pra brincadeira, vamos entender o seguinte, você irá utilizar o ratproxy como proxy (:-o) e ele vai guardar os logs em um arquivo no formato sqlite, o metasploit vai ler este arquivo e a partir disso vai lançar os seguintes ataques (os nomes são dedutíveis):
WMAPScanServer, WMAPScanDir, WMAPScanFile
WMAPScanUniqueQuery, WMAPScanQuery, WMAPScanBody
WMAPScanHeaders, WMAPScanGeneric
A descrição detalhada você consegue utilizando o help do metasploit.
Coloque o ratproxy para funcionar da seguinte maneira:
$ ./ratproxy -v /Users/ucastro/.msf3/ -b wmaptest.db -a
ratproxy version 1.51-beta by <lcamtuf@google.com>
[*] Proxy configured successfully. Have fun, and please do not be evil.
[+] Accepting connections on port 8080/tcp (local only)...
Ele ficará ouvindo na port 8080, configure seu browser e navegue um pouco pelo site que quer auditar (eita palavra bunita).
Agora entre no metastploit, e execute os seguinte comandos:
$ ./msfconsole
msf > load db_sqlite3
msf > load db_wmap
[*] =[ WMAP v0.2 - ET LoWNOISE
[*] Successfully loaded plugin: db_wmap
Conecte no banco de dados que “populou” com o ratproxy enquanto navegava.
msf > db_connect /Users/castro/.msf3/wmaptest.db
[*] Successfully connected to the database
[*] File: /Users/castro/.msf3/wmaptest.db
Atualize a lista de acordo com o bd:
msf > wmap_targets -r
[*] Reloading targets...
[*] Added. 192.168.1.1 80 0
[*] Added. 192.168.2.10 80 0
[*] Added. 192.168.5.11 80 0
[*] Added. 192.168.1.3 80 0
Liste o IP dos sites que navegou:
msf > wmap_targets -p
[*] Id. Host Port SSL
[*] 1. 192.168.1.1 80
[*] 2. 192.168.2.10 80
[*] 3. 192.168.5.11 80
[*] 4. 192.168.1.3 80
[*] Done.
Selecione o alvo a ser auditado: :)
msf > wmap_targets -s 2
msf > wmap_targets -p
[*] Id. Host Port SSL
[*] 1. 192.168.1.1 80
[*] => 2. 192.168.2.10 80
[*] 3. 192.168.5.11 80
[*] 4. 192.168.1.3 80
[*] Done.
Podemos ver com o comando abaixo a estrutura capturada:
msf > wmap_website
[*] Website structure
[*] 192.168.2.10:80 SSL:0
ROOT_TREE
+------ index.asp
| images
| +------ logo.gif
+------ login.asp
| menu
| +------ menu.asp
| +------ logout.asp
| +------ help.asp
[*] Done.
Liste os módulos:
msf > wmap_run -t
[*] Loaded auxiliary/scanner/http/wmap_vhost_scanner ...
[*] Loaded auxiliary/scanner/http/frontpage_login ...
[*] Loaded auxiliary/scanner/http/version ...
...
[*] Loaded auxiliary/scanner/http/wmap_blind_sql_query ...
[*] Analysis completed in 3.1337145306448364 seconds.
[*] Done.
Para definir um novo valor para alguma varíavel de configuração utilize o comando (setg), definindo um único VHOST:
msf > setg VHOST www.targetco.com
VHOST => www.targetco.com
Ou um único domínio:
msf > setg DOMAIN targetco.com
DOMAIN => targetco.com
A extensão utilizada pelo site:
msf > setg EXT .asp
EXT => .asp
Para iniciar os testes:
msf > wmap_run -e
[*] Launching auxiliary/scanner/http/wmap_vhost_scanner WMAP_SERVER against
www.target.com:80
[*] Sending request with random domain rGvsV.targetco.com
[*] NOT Found admin.targetco.com
[*] NOT Found services.targetco.com
[*] Vhost found webmail.targetco.com
[*] NOT Found console.targetco.com
[*] NOT Found apps.targetco.com
[*] NOT Found mail.targetco.com
[*] NOT Found intranet.targetco.com
[*] NOT Found intra.targetco.com
[*] NOT Found corporate.targetco.com
[*] Launching auxiliary/scanner/http/frontpage WMAP_SERVER against
www.targetco.com:80
[*] http://xxx.xxx.xxx.xxx:80 is running Apache
[*] FrontPage not found on http://192.168.2.10:80 [302 Object Moved]
...
...
[*] Done.
E ainda é possível gerar relatórios! :)
Ë bom ficar de olho pois o WMAP está bem no início, e logo se seguir os passos e o rítmo que o metasploit vem conseguindo, principalmente na área de “bypass” em anti-vírus (assunto pra outro dia!) essa nova “feature” PROMETE! :)
Enjoy! ;)
Referências:
- WMAP
