logo

O “Easter egg” do PHP tem lá suas utilidades…

logo

O PHP traz consigo algo bem curioso. O motivo da existência deve ser o mesmo dos demais “Easter Eggs” que encontramos em softwares (inclusive das gigantes desenvolvedoras) por aí: uma mera brincadeira. Mas no cenário dos WebApps tudo pode ser visto de forma diferente…

Para muitos, isto aqui não é novidade alguma. Mas posso jurar que eu desconhecia até então.

Apesar de antigo, este “recurso” (?!?) funciona em qualquer instalação do PHP com configurações padrões e pode ser usado em qualquer script que passe pelo interpretador PHP. Trata-se de uma série de imagens que são retornadas com querys específicas.

Adicione ao fim da URL de qualquer script .php “?=PHPE9568F36-D428-11d2-A769-00AA001ACF42.. e como consequencia, você verá uma das imagens abaixo:

php-coloredphp-rabbitphp-dude1php-terrier-dogphp-dog1

Deixando o lado bizarro\curioso de lado, a existencia disso pode ter um lado interessante para fins de segurança:

  1. As imagens variam de acordo com a versão do php. Podemos usa-las como fingerprint.
  2. Como no exemplo que dei neste vídeo, podemos usa-las na criação de um CSRF para verificar se um servidor web na rede local de uma vítima suporta PHP.
  3. É um jeito bem divertido de saber se a página que você está acessando está passando por um interpretador PHP :P

Para a primeira situação que citei, aqui vão informações uteis:

  • A imagem do coelho. Versões testadas*: 4.3.1; 5.0.0; 5.0.3
  • A imagem do estranho rapaz: Versões testadas*: 4.0.1pl2; 4.1.2; 4.2.2. Segundo outras fontes, ele aparece em versões entre 4.0 e 4.2.3
  • A imagem do cachorro marrom: Versões testadas*: PHP4u Version 3.0, Based on PHP-4.3.2; 4.3.2; 4.3.3; 4.3.8; 4.3.9; 4.3.10
  • A imagem do cachorro preto: 4.3.11; 4.4.0; 4.4.1; 4.4.2; 4.4.3; 4.4.4; 5.0.5; 5.1.0; 5.1.2
  • A imagem do logotipo do PHP distorcido: 5.1.4; 5.2.0; 5.2.6**; 5.2.9RC3***

* Testado por 0php.com; ** Versão rodando no FalandoDeSegurança; *** Versão rodando no site oficial do php (php.net) segundo headers.

Já para a segunda situação, aqui vai um exemplo de alert que nos diz se um certo site roda ou não PHP.

<img src=”http://www.link-do-alvo.com/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 onerror=”alert(‘PHP não detectado’);” onload=”alert(‘PHP encontrado!’);“>

Outras querys válidas, que desta vez não são Easter Eggs, mas sim de uso interno do PHP para compor a página gerada pela função phpinfo():

  • ?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 – Exibe o logotipo do PHP.
  • ?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 – Exibe o logotipo da Zend Engine.
  • ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 – Exibe os créditos de desenvolvimento do PHP.

Para desativar o Easter Egg, o seguinte valor deve ser especificado na php.ini:

expose_php = off

Por hoje é só. Se fizer o teste em outras versões do PHP, deixe aí no comentário qual imagem apareceu e sua respectiva versão. E, bem… como disse, isto não é novidade. Apenas quis reforçar o fato de podermos usa-lo para fingerprint e em CSRFs. Se você já conhecia esta, por favor, perdoe-me :)

Até a próxima!

Fonte: 0php.com

4 Responses to “O “Easter egg” do PHP tem lá suas utilidades…”

  1. levi says:

    Oi, e possivel desativar o phpinfo(); diretamente nas entradas do php.ini?
    Poderia sugerir outras funcoes que possam oferecer alguma brecha de seguranca?
    :)

  2. Fala, Levi! Obrigado pela visita e pelo comentário. Tenho aqui em um de meus rascunhos uma série de funções que são usadas nos PHP Backdoors (também conhecidos como php shells ou php cmd)… Confesso não conhecer todas, mas a documentação de cada uma delas pode ser encontradas no http://www.php.net . Entre elas, estão funcoes que executam comandos no S.O, exibem informações do proc ou do usuário, entre muitos outros que podem ser usados para estes fins. Aqui vão eles:

    disable_functions = “system,passthru,exec,popen,proc_close,proc_get_st atus,proc_nice,proc_open,proc_terminate,shell_exec ,highlight_file,escapeshellcmd,define_syslog_varia bles,posix_uname,posix_getpwuid,apache_child_termi nate,posix_kill,posix_mkfifo,posix_setpgid,posix_s etsid,posix_setuid,escapeshellarg,posix_uname,ftp_ exec,ftp_connect,ftp_login,ftp_get,ftp_put,ftp_nb_ fput,ftp_raw,ftp_rawlist,ini_alter,ini_restore,inj ect_code,syslog,openlog,define_syslog_variables,ap ache_setenv,mysql_pconnect,eval,phpAds_XmlRpc,phpA ds_remoteInfo,phpAds_xmlrpcEncode,phpAds_xmlrpcDec ode,xmlrpc_entity_decode,fp,fput”

    Como já tenho este comando aqui anotado comigo por muito tempo, não me recordo a fonte\o autor das recomendações.

    É claro, leia cada um e veja se você não os usa em seus scripts. Caso use, remova da lista.

    Respondendo a sua pergunta do phpinfo(), basta adiciona-lo no fim deste comando que postei. No php.ini, o disable_functions serve exatamente para isso (especificar funções que devem ficar desativadas).

    Também recomendo configurar para que o PHP não exiba mensagens de erro na tela.

    Abraços.

  3. levi says:

    E esses comandos, sao validos para o php.ini independente do sistema operacional em uso?
    Obrigado por esse topico, que nos mostrou coisas interessantes.

  4. Sim Levi, independe do S.O.
    Eu que agradeço por sua visita e comentário. Volte sempre!

Leave a Reply

Powered by WP Hashcash

logo
logo
Sistema por: Wordpress | Tema: Elegant Themes