Archivo

Posts Tagged ‘web’

Post Dominguero: Haciéndonos un crawler básico

6 junio, 2011 4 comentarios

Inauguramos una nueva sección llamada “Post Dominguero”, donde recogeremos esas cosillas que puedes hacer una tarde de domingo sin partidos de liga, después de ver ganar a Nadal (otra vez) Rolland Garros…

Uno de los primeros pasos que se dan a la hora de meterle mano a una web es revisar el código de la página en busca de datos que nos permitan hacernos una idea de la composición del sitio, de la tecnología que utiliza, etc. Buscar direcciones de correo en el código, revisar los comentarios, buscar campos ocultos, la estructura de carpetas, etc, puede ser algo bastante aburrido y, sobre todo, tedioso si el sitio es un poco grande. Para ello existen los crawlers, que son programitas que se encargan de hacer este trabajo por nosotros y ahorrarnos un montón de tiempo. También son muy utilizados por los motores de búsqueda para indexar las webs y mostrarlas en los resultados de las búsquedas, pero lo que buscan estos últimos es muy diferente de lo que vamos a buscar nosotros.
El camino fácil es coger un crawler conocido como BlackWidow, Sam Spade o Teleport y dejarle que haga el trabajo sucio pero, como lo que nos mola es aprender cómo funcionan las cosas, vamos a hacernos uno sencillito, con un simple script para la consola. En este caso he elegido hacerlo para Linux, pero si se quiere hacer para Windows simplemente cambiaremos grep por findstr (o similares).
Lo primero que necesitamos es hacernos una copia local del sitio en nuestra máquina (por aquello de la velocidad y tal…). Podemos currarnos un programita que recorra todas las páginas de un sitio y las copie en el disco duro pero, es domingo, tengo resaca y conozco un programa que ya lo hace: WGET. Además hay versión tanto para Windows como para Linux, así que, p’alante!
Supogo que sabemos cómo funciona wget (y si no, nos leemos la ayuda, que es muy fácil, jeje), así que el comando que necesitaríamos para descargarnos una web sería el siguiente:
Este comando nos va a generar una carpeta con el nombre de la web y nos va a dejar dentro todos los ficheros de la misma respetando la estructura de carpetas (esto es importante, ya que así podremos hacernos una idea de cómo se estructura el sitio, qué tipo de aplicaciones alberga y qué tecnologías utiliza).
Una vez que ha acabado de copiar (puede tardar bastante si el sitio es un poco grande), necesitamos filtrar cada uno de los ficheros y buscar lo que queremos. ¿Qué usaremos para filtrar? a mí me mola grep para linux y findstr para windows, pero es una cuestión de gustos. Ahora viene lo importante: ¿Qué queremos buscar? Bueno, en este ejemplo sencillo, buscaremos lo más básico, que viene a ser:
  1. Comentarios: Os sorprendería ver lo que nos podemos encontrar comentado en cualquier código, desde credenciales de acceso, hasta referencias a ficheros de configuración, logs, etc, que nos pueden ayudar muchísimo a la hora de buscarle las cosquillas al asunto. Los comentarios en html empiezan con la misma cadena,  así que ya sabemos cómo sacarlos…
  2. Enlaces: Por supuesto, cualquier link que venga en el código. Podemos encontrar referencias a scripts, ficheros, carpetas, etc. Yo buscaré cadenas HREF (podemos buscar también por ACTION, pero estoy vago…).
  3. Direcciones de correo: Fundamental. Tanto para hacer ingeniería social como para su posible uso como usuario, ¿Cuántas webs conoces en las que el usuario es una dirección de correo? Pues eso, a buscar @…
  4. Campos ocultos: ¿Por qué se oculta un campo en una web? Porque seguro que es importante. Así que, al saco todo aquello que ponga type=hidden
  5. Meta Tags: Estas etiquetas que se añaden al código pueden contener direcciones, teléfonos, nombres, etc. Son una buena fuente de información para ataques de ingeniería social, así que, si pone meta…
  6. Scripts: Por supuesto, si hay algún script, lo quiero ver.
Podríamos seguir añadiendo cosas para buscar, pero para el ejemplo, creo que es más que suficiente.
¿Cómo sería el comando para aplicar una de estas búsquedas? Por ejemplo, para sacar los enlaces sería muy sencillo:

cat ./www.unawebcualquiera.com/index.html | grep -i -F ‘href’

Nos sacaría por pantalla todas las líneas que contuvieran la cadena indicada. Lo que tendríamos que hacer es ir cambiando el patrón de búsqueda según el tipo, y sacarlo todo a un fichero de texto. Para ello, me he hecho un script en bash al que le paso dos parámetros: la carpeta con la web descargada y el fichero con los resultados.
#!/bin/bash
#para cada fichero de la carpeta de entrada, lo parseamos…
for i in $(find $1/)
do
echo “Parseando ” $i
if [ -f $i ];
then
echo “[” $i “]” >> $2
#Buscamos comentarios “<–“
echo “Comments” >> $2
echo “” >> $2
cat $i | grep -i -F ‘<– ‘ >> $2
echo “—————————————————————–” >> $2
#Buscamos correos “@”
echo “Emails” >> $2
echo “” >> $2
cat $i | grep -i -F ‘@’ >> $2
echo “—————————————————————–” >> $2
#Buscamos campos ocultos “hidden”
echo “Hidden Fields” >> $2
echo “” >> $2
cat $i | grep -i -F ‘type=hidden’ >> $2
echo “—————————————————————–” >> $2
#Buscamos Links “href”
echo “Links” >> $2
echo “” >> crawl
cat $i | grep -i -F ‘href=’ >> $2
echo “—————————————————————–” >> $2
#Buscamos Meta “Meta”
echo “Meta Tags” >> $2
echo “” >> $2
cat $i | grep -i -F ‘meta’ >> $2
echo “—————————————————————–” >> $2
echo “” >> $2
echo “—————————————————————–” >> $2
#Buscamos scripts “script”
echo “SCRIPTS” >> $2
echo “” >> $2
cat $i | grep -i -F ‘script’ >> $2
echo “—————————————————————–” >> $2
echo “” >> $2
echo “********************************************************” >> $2
echo “********************************************************” >> $2
echo “” >> $2
fi
done
echo “FIN!”
En este ejemplo, el fichero de resultado podría salir algo tosco si la web en cuestión no sigue una indentación correcta, pero como ejemplo nos sirve más que de sobra. Una forma de mejorar esto sería mediante el uso de expresiones regulares. Como no me quiero meter con ello en este post, simplemente os dejo un ejemplo de cómo se filtrarían las direcciones de correo mediante el uso de expresiones regulares:

grep -o -e “[A-Za-z0-9\._-]*@[A-Za-z0-9\._-]*\.[a-zA-Z]\{2,4\}” $i >> $2

En este ejemplo le estamos diciendo que sólo nos saque la cadena que coincida con el patrón que le indicamos (parámetro -o) y le indicamos el susodicho patrón (-e): una cadena de caracteres entre los que se pueden encontrar letras de la A a la Z (mayúsculas y minúsculas), números del 0 al 9 y los caracteres “.”, “_”,”-“, seguidos del carácter “@”, y después otra cadena con el mismo patrón, seguida de un “.” y otra cadena que sólo contenga letras mayúsculas o minúsculas, de un mínimo de dos caracteres y un máximo de cuatro… Un poco farragoso de leer, ¿no?, pero sin duda más amigable a la hora de presentar los resultados…
Como ya he dicho antes, si lo queremos hacer para Windows, simplemente cambiaríamos el cat por el type (comando para ver el contenido de un fichero en Windows), y el grep por findstr o similares.
Espero que os resulte útil.
CIAO!
P.D.: Sí, sí, ya sé que con grep, si ponemos el parámetro -r, nos recorre recursivamente un directorio y aplica el filtro a todos los ficheros, pero me molaba más así…
En el script de ejemplo, en la parte del filtrado de comentarios, a la cadena para buscar el comentario le falta !. Está así porque el editor de blogger se piensa que estoy metiendo un comentario y corta el post a partir de ahí…
Anuncios
Categorías:Informática Etiquetas: , , , , ,

Webs Que No Deberías Visitar

18 septiembre, 2007 2 comentarios

Desde La Web del Programador nos alertan de unas cuántas URLs que deberíamos evitar a toda costa, sobre todo si navegamos con Internet Explorer. La verdad es que algunas cantan desde lejos…Este es el listado:

http://203.109.16.67/zboard/.charges.br
http://208.241.177.80
http://210.70.60.118/~dp
http://64.156.31.99/060219/ca/games2
http://66.7.206.45/.net
http://81.29.241.190/user2/bond0211
http://81.29.241.234/user1/neon0112
http://83.17.250.238/webalizer/.dsd
http://acceso.masminutos.com
http://appleworld.com.tw/ap/news
http://business4day.com/toolsp
http://cc.wzxqy.com/wm
http://concurso.natgeo.tv/festa/fotos
http://content-loader.com/load
http://dormi.co.kr/bbs/skin/.cartao
http://extremeaccess.info/ware
http://fotosprovaspras.tripod.com
http://gclass.it/orkut
http://goeps.com
http://hk.geocities.com/xz_0j
http://ijasmim.no.sapo.pt
http://korterm.kaist.ac.kr/hangeul2001
http://msnpatch.com.sapo.pt
http://myenglishjob.com/board2/cartao
http://n-ceo.org/zboard/data/&#8230;
http://naesoo.or.kr/nboard
http://newsandimage.com/bbs
http://ouboards.com/images
http://parco.com.tw
http://perso.wanadoo.es/h0ly19
http://perso.wanadoo.es/paulo1254
http://perso.wanadoo.es/promocopa
http://perso.wanadoo.es/tdfgr
http://proinfo.andong-c.ac.kr/srt
http://rav.tq10.com
http://rzfm.com
http://sex.trkiz.com
http://struts.linuxstudy.pe.kr/rcounter
http://subaru.com.mt
http://thewayradio.com/gameonline
http://tisall.info/ad/us00
http://tisall.info/n/us02
http://tisall.info/n/us24
http://tisall.info/nl/us00
http://traff.justcount.net/updinst/updinst.php
http://user.free2.77169.net/beijingren
http://user.free2.77169.net/mgt99
http://virtualcard6.tripod.com/_vti_bin
http://virtualcards2.tripod.com/_vti_bin
http://wwb.ieplugin.com/adcampaigns
http://www.aehatena-jp.com/games
http://www.amex21.com/shop/lib
http://www.asor-aikido.org/Ligue
http://www.blogplaync.com
http://www.carpicentro.com.pe/movies
http://www.cicoc.com
http://www.conecojp.net/online
http://www.d-jamesinfo.com/blog
http://www.data-jpn.com/css/_vti_vss/count/xp
http://www.datong.gov.cn
http://www.evilcoderzbr.xpg.com.br
http://www.filenanny.com/files/46b9afd8556cc5185
http://www.filenanny.com/files/46d6cc720794b6410
http://www.filenanny.com/files/46dddda2174616725
http://www.freedivulg.xpg.com.br
http://www.freewebtown.com/angelsandangels
http://www.game-oekakibbs.com/bbs
http://www.games-nifty.com/links
http://www.gclass.it/cartao
http://www.gclass.it/orkut
http://www.gratisweb.com/amor.meu
http://www.gratisweb.com/celo2007/livro
http://www.gratisweb.com/cora2006
http://www.gratisweb.com/formulario012
http://www.gratisweb.com/imagusrt
http://www.gratisweb.com/mediakl
http://www.gratisweb.com/namorandonet
http://www.gratisweb.com/novembro2005
http://www.gratisweb.com/provimento
http://www.gratisweb.com/rfortes/ecomer
http://www.gratisweb.com/tracka84
http://www.ha-boerse.net/crap
http://www.iautoking.com/bbs/adm
http://www.jprmthome.com
http://www.ktown.ne.kr/town/kboard/data/sub5_2
http://www.lfxmsc.gov.cn
http://www.lineinfo-jp.com/imgz
http://www.lineinfo-jp.com/luoGav
http://www.livedoor1.com/blogk2
http://www.maplestorfy.com/guselok
http://www.mbspro6uic.com/mbsplink
http://www.move2sea.com
http://www.n-ceo.org/zboard/data/a
http://www.n-ceo.org/zboard/data/net
http://www.pmcthai.com
http://www.preferiti-windows.com/engine
http://www.qoogler.com
http://www.ragnarokonline1.com
http://www.redebrasvip.org
http://www.ro-bot.net/10657
http://www.saudades13-09-06.pop3.ru
http://www.sks18.net
http://www.slrusers.com/bbs/icon
http://www.stte.com.cn/aspnet/web_Adm/nao-apagar/1
http://www.twyaooplay.com
http://www.wcsc.tv
http://www.yousendit.com
http://www.zendurl.com/sour1
http://www.zjkjw.gov.cn
http://www17.tok2.com/home/ornithopter/.log
http://yeskid.net/bbs/icon/private_name
http://zhacks0.tripod.com/sitebuildercontent/sitebuilderfiles
http://zllin.info/e/us058
http://zllin.info/e/us36

Ya las podéis añadir a vuestra Black List…

A %d blogueros les gusta esto: