iniqua

16mar/102

Google search: Zend version phpinfo()

government,politics news,politics news,politics

Hace unos días realizando una busqueda por la red, utilizando Google claro. Nos encontramos con unos resultados que me animaron a escribir un poco sobre como recorrer y analizar la información que Google nos puede llegar a mostrar.

Bajo estas mismas premisas desarrollamos las primeras versiones de plecost. Ahora veremos lo sencillo que es realizar este tratamiento ayudados de algunas librerias.

La búsqueda

Lo primero es realizar la búsqueda, algunos de los operadores de Google más interesantes son los siguientes:

allintext:, allintitle:, allinurl:, cache:, define:, filetype:, id:, info:, intext:, intitle:, inurl:related:, site:

En este caso utilizaremos filetype, inurl y intext para localizar los ficheros phpinfo() que son nuestros objetivos. En la siguiente captura vemos la salida del buscador:

Nos interesa cada uno de los archivos phpinfo que encontramos.

Recorrer los resultados con xgoogle

La librería xgoogle nos facilita recorrer los resultados de una busqueda en Google, con un funcionamiento realmente simple, realiza la búsqueda y almacena los resultados organizados en "páginas" como los devuelve Google. Mediante results_per_page le indicamos cuantos resultados queremos recuperar en cada página. Recuperamos el contenido de una página con get_results() y lo almacenamos en la variable results, la cual recorreremos recuperando la url, con url.encode(), de cada uno de los resultados.

Para recorrer el resto de páginas resultantes de la búsqueda, introducimos este proceso en un bucle.

  filter = "filetype:php inurl:'/phpinfo.php' intext:'Zend Engine'"
  gs = GoogleSearch(filter)
  gs.results_per_page = 100
  results = gs.get_results()
  for res in results:
     url = res.url.encode()
     print url

Analizar el contenido recuperado con BeautifulSoup

Recuperamos el contenido de cada una de las url's encontradas. Y mediante la librería BeautifulSoup (utilizada como base por xgoogle) trataremos el contenido que nos interesa.

En este caso realizaremos un recorrido por todas las etiquedas 'tr' gracias al método findAllNext(), que contienen información que nos puede interesar conocer. Para cada resultado que encontramos comprobamos si contiene dicha información, concretamente en nuestro pequeño ejemplo vamos a recuperar el contenido de la ocurrencia "register_globals".

    phpinfo = urllib2.urlopen(url)
    soupphpinfo = BeautifulSoup(phpinfo)
    tablezend = soupphpinfo.find('td')
    for tmp in tablezend.findAllNext('tr'):
       if str(tmp.contents).find("register_globals") != -1:
          print tmp

Opciones de PHP interesantes

Recuperaremos una serie de opciones de PHP interesantes desde el punto de vista de la seguridad como register_globals, enable_dl o display_errors.

Además recuperaremos la información mostrada por phpinfo() en referencia a Zend. Como "por hacer" queda recuperar la versión de PHP desplegada.

El script

La salida del script puede redireccionarse a un fichero, por ejemplo output.html, y abrirlo con un navegador. De esta manera no es necesario que procesemos la información recuperda.

#!/usr/bin/python

import urllib2
from BeautifulSoup import BeautifulSoup
from xgoogle.search import GoogleSearch, SearchError

try:
  search = "filetype:php inurl:'/phpinfo.php' intext:'Zend Engine'"
  gs = GoogleSearch(search)
  gs.results_per_page = 100
  print """
  <html><head>
  <style type="text/css">
  body, td, th, h1, h2 {font-family: sans-serif;}
  a:link {color: #000099; text-decoration: none; background-color: #ffffff;}
  a:hover {text-decoration: underline;}
  table {border-collapse: collapse;}
  .center table { margin-left: auto; margin-right: auto; text-align: left;}
  .center th { text-align: center !important; }
  td, th { border: 1px solid #000000; font-size: 75%; vertical-align: baseline;}
  img {float: right; border: 0px;}
  hr {width: 600px; background-color: #cccccc; border: 0px; height: 1px; color: #000000;}
  </style>
  <title>Google phpinfo Zend focused</title></head>"""

  while True:
    results = gs.get_results()
    if not results:
       break
    for res in results:
    url = res.url.encode()
    if url.find("/phpinfo.php") != -1:
       print "<h3>"+url+"</h3>"
       print "<table border='0' cellpadding='3' width='600'>"
       print "<tr class='h'><th>Directive</th><th>Local Value</th><th>Master Value</th></tr>"
    phpinfo = urllib2.urlopen(url)
    soupphpinfo = BeautifulSoup(phpinfo)
    tablezend = soupphpinfo.find('td')
    for tmp in tablezend.findAllNext('tr'):
       if str(tmp.contents).find("Zend") != -1 and str(tmp).find("Engine") != -1:
          print tmp
       if str(tmp.contents).find("register_globals") != -1:
          print tmp
       if str(tmp.contents).find("safe_mode") != -1:
          print tmp
       if str(tmp.contents).find("enable_dl") != -1:
          print tmp
       if str(tmp.contents).find("display_errors") != -1:
          print tmp
       if str(tmp.contents).find("session.cookie_secure") != -1:
          print tmp
       if str(tmp.contents).find("session.save_path") != -1:
          print tmp
       if str(tmp.contents).find("allow_url_fopen") != -1:
          print tmp
       if str(tmp.contents).find("magic_quotes_gpc") != -1:
          print tmp
    print "</table>"
except SearchError, e:
    print "Search failed: %s" % e

Referencias

www.googleguide.com - www.catonmat.net - www.crummy.com - www.zend.com

Código + dependencias

phpinfo_inquirer.tar

Publicado por ffranz

Comentarios (2) Trackbacks (1)
  1. Si realizas muchas consultas a Google te bloquean! y ya no vuelve a funcionar…tiene alguna solución? gracias!

  2. Hola Victor.
    Normalmente lo que utilizamos es la paciencia, si espacias las consultas puedes conseguir un ritmo constante de consultas.
    Por otro lado te recomiendo que utilices un fichero de “user-agents” para realizar las peticiones, hablamos de este tema en (http://www.iniqua.com/2010/02/02/user-agent-string/.
    Por último, y como solución más efectiva es utilizar redes como TOR.

    Siento no tener una solución mágica :) .
    Saludos.


Leave a comment

(required)

Get Adobe Flash playerPlugin by wpburn.com wordpress themes