lunes, 3 de diciembre de 2012

Técnicas de consulta dinámica GET en Google

Las consultas dinámicas en los buscadores son consideradas una de las herramientas más versátiles para la recuperación de información. Se considera que una consulta es dinámica cuando el sistema que hace posible la transmisión de las cadenas de consulta por medio del método GET o POST, permite su correcto procesamiento para su resolución en una base de conocimiento o colección. En este sentido, se pueden realizar consultas empleando el método POST propio de los formularios de consulta, o bien por medio de la construcción de una dirección URL que posea la información de la consulta. Ambos métodos son extensivos en la mayoría de buscadores de la web, especialmente en Google, que posibilita una amplia lista de opciones de recuperación utilizando para ello sus variables.

Qué es el método GET y POST
Los métodos GET y POST forman parte del sistema de peticiones y comunicaciones del protocolo HTTP utilizado extensivamente en la web. El método de petición POST, permite el envío de datos a un servidor web mediante una cabecera y cuerpo de mensaje para su posterior almacenamiento y tratamiento. Esto significa un bloque de datos enviado con la solicitud o petición en el cuerpo del mensaje, especificando el tipo de contenido y datos. Su uso más conocido se encuentra en cualquier formulario de la web dentro de los cuáles se indica el método de transmisión de datos, la página web de destino encargada del procesamiento de la información y los campos de texto, campos seleccionables y áreas de texto que contendrán los datos. De esta forma es posible enviar datos recuperables a través de los nombres dados a dichos campos de texto. Véase en la tabla1 un ejemplo de formulario con campos definidos.


<form action='pagina-web-destino.php' method='post'>
<input type='text' name='data1' value=''/>
<input type='text' name='data2' value=''/>
<input type='text' name='data3' value=''/>
<input type='text' name='data4' value=''/>
<input type='text' name='data5' value=''/>
<input type='submit' name='send' value='Enviar datos'/>
</form>

Tabla1. Ejemplo de formulario web que emplea el método POST

En cambio el método HTTP GET se emplea para efectuar peticiones de información o recuperación de información en un servidor web objetivo. Esto es una petición que se efectúa por medio de la URL de una página de consulta, que está habilitada para recopilar los términos de una búsqueda o bien sus parámetros (contexto en el que se explica el presente artículo). Además, las peticiones GET están diseñadas para no cubrir otros cometidos como podría ser el envío de datos seguros para su almacenamiento, tal como funcionaría con el método POST. De hecho el método GET es público, carece de cifrado y no se considera un método seguro para el envío de datos. Por este motivo su correcto diseño e interacción en los servicios de búsqueda y recuperación de información resulta esencial para evitar problemas de alteración o modificación de los datos del servidor. De hecho, cuando un usuario consulta con su navegador web cualquier página web como por ejemplo http://www.google.es/ está efectuando una consulta o petición a un servidor remoto, véase tabla2. Dicha petición permite al servidor HTTP de Google interpretar la consulta que se está realizando por método GET, concretamente la aplicación de consulta del navegador (source=search_app), que no existen más peticiones (Connection:close), que el idioma, codificación y tipo de datos del navegador del cliente son los especificados, no permitiendo el control de versiones del cache.

Petición de cabecera HTTP

GET /webhp?source=search_app HTTP/1.1
Host: www.google.es
Connection: close
Accept-Encoding: gzip
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-ES,es;q=0.8
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7
Cache-Control: no-cache

Tabla2. Ejemplo de petición de cabecera HTTP

Ante la petición del cliente, existe una respuesta de cabecera HTTP, véase tabla3. En ella se muestra el estado de recepción de la petición, normalmente el mensaje suele ser 200 OK que significa una correcta recepción de los datos de la petición. Por otro lado la fecha y hora de la respuesta, identificación de que la respuesta no expira (-1), datos de sesión (Cookies), plataforma de privacidad de las consultas (P3P), identificación del servidor (GWS Google Web Server), frame de carga y cierre de conexión. Junto con la cabecera se remite el cuerpo del mensaje de respuesta enviado en formato HTML como página web.

Respuesta de cabecera HTTP
Status
HTTP/1.1 200 OK
Date
Mon, 03 Dec 2012 07:19:55 GMT
Expires
-1
Cache-Control
private, max-age=0
Content-Type
text/html; charset=ISO-8859-1
Set-Cookie
PREF=ID=a2379f825779c3c2:FF=0:TM=1354519195:LM=1354519195:S=3xPq3l_pqAmIbJWo; expires=Wed, 03-Dec-2014 07:19:55 GMT; path=/; domain=.google.es
Set-Cookie
NID=66=ZC7AMosQZKkONqSiAvUIdkVNisns4FgofwpJJaalT3KvKcJoHTkWr1wnStTSLw80-X9cjHahtjNz7lqj5kH2bET1JaOjjkEjMV_Dyts_AyX8smZnmbijRhul1o8K-sKB; expires=Tue, 04-Jun-2013 07:19:55 GMT; path=/; domain=.google.es; HttpOnly
P3P
CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."  
Server
gws
X-XSS-Protection
1; mode=block 
X-Frame-Options
SAMEORIGIN
Connection
close
Tabla3. Ejemplo de respuesta de cabecera HTTP


Las variables
Si bien, el envío de datos por medio del método GET y POST de HTTP, posibilita la recuperación, consulta y almacenamiento de la información en la web, también es cierto, que para poder manejar dicha información, ésta debe ser correctamente identificada. Esto es determinar cual es el nombre de las variables que contendrán los datos o informaciones que se transmiten. De hecho una variable es un método de almacenamiento de cadenas de caracteres, que se utiliza para recuperar la información enviada por los distintos métodos de HTTP, véase tabla4.


Variable GET
Variable POST
PHP
$_GET[nombre-variable]
$_POST[nombre-variable]
ASP
Request.QueryString("nombre-variable")
RUBY
CGIMethods.parse_query_paremeters (@request.query_string)
CGIMethods.parse_query_parameters (@request.raw_post)
Tabla4. Métodos de recuperación de variables

Por ejemplo, de acuerdo al formulario de la tabla1, las variables POST que la pagina-de-destino.php recuperaría serían: $_POST[data1], $_POST[data2], $_POST[data3], $_POST[data4], $_POST[data5]. La notación de las variables corresponde al lenguaje de programación PHP y se observa cómo el nombre de los campos del formulario, identifica el nombre de la variable transmitida por método POST. Con el método GET sucede lo mismo, sólo que el envío de datos se produce a través de la URL.


Consultas básicas en Google mediante URL

Consulta básica dinámica en Google
Variable de consulta básica de Google ( q )
https://www.google.com/search?q=consulta
Variable de idioma ( hl )
https://www.google.com/search?hl=idioma&q=consulta
Conversiones ASCII a hexadecimal. Véase: http://www.mikezilla.com/exp0012.html
( Espacio en blanco ) = ( %20 )
Tabla5. Consulta dinámica básica en Google


Consultas avanzadas en Google mediante URL

Consulta avanzada dinámica en Google
Variable
Valor/es
Descripción
q
Consulta
Cadena de consulta completa del usuario
start
Número superior a 0
Muestra un determinado número de resultados desde 0
num
1-100
Muestra determinado número de resultados por página
filter
0-1
Filtrar resultados duplicados. Si se usa 0 mostrará resultados únicos. 
restrict
Código de restricción
Código de restricción de resultados por país. Por ejemplo: countryES, countryFR, countryDE, countryUK, countryUS
hl
Código de idioma
Idioma en el que Google muestra la información de los resultados. Por ejemplo: es, en, de, fr, it
lr
Código de idioma
Recupera páginas web escritas en el código de idioma especificado. Por ejemplo: lang_es, lang_en, lang_fr, lang_de, lang_de, lang_it
ie
UTF-8
Codificación del input de la consulta en Google
oe
UTF-8
Codificación del output de resultados de Google
as_epq
Consulta
Frase de consulta exacta, evita tener que emplear las comillas dobles en la variable ( q )
as_ft
i - e
El valor ( i ) permite incluir en la búsqueda el tipo de archivo determinado. El valor ( e ) permite excluir de la búsqueda el tipo de archive determinado
as_filetype
Extensión de archive
Define el tipo de archivo por su extensión que se aplicará en la búsqueda
as_qdr
m - y
Determina el periodo de tiempo dentro del cual se recuperarán los contenidos. Por ejemplo: m1, m2, m3 (corresponde al último mes, últimos 2 meses y últimos tres meses), y2, y3 (corresponde a los últimos dos y 3 años)
as_nlo
Número inferior
Busca resultados con números comprendidos entre as_nlo y as_nhi
as_nhi
Número superior
as_oq
consulta
Recupera páginas que contengan alguna de las palabras indicadas
as_occt
any, title, body, url, links
Recupera páginas que contengan alguna de las palabras indicadas en un punto específico. Por ejemplo el valor (any) indica en cualquier punto de la página web, (title) especifica en el título, (body) corresponde al cuerpo de la página web, (url) en la dirección de la propia página y (links) en alguno de los enlaces propios de la página web.
as_dt
i - e
El valor ( i ) permite incluir búsquedas del dominio especificado. El valor ( e ) permite excluirlas
as_sitesearch
Consulta
Permite incluir o excluir de la consulta un dominio o sitio web que se especifique.
safe
active
off
Permite realizar búsquedas seguras
as_rq
URL
Permite realizar búsquedas de páginas similares a la URL especificada
as_lq
URL
Recupera páginas vinculadas a la URL especificada
Tabla6. Consulta dinámica avanzada en Google

Referencias

Apache Software Foundation. 2008. Class GetMethod [Especificaciones oficiales del método GET]. Disponible en: http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/methods/GetMethod.html

LONG, J. 2005. Hacking con Google. Anaya Multimedia.

LONG, J. 2008. Google Hacking 2. Mitp

LONG, J. 2012. Google Hacking for Penetration Testers. OReilly

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.