Mi Spider favorito (o hacking con wget)

Wget es una herramienta conocida por todos, pero su potencial es generalmente subestimado.
Aunque quizas tengas en tu mente algo como:

 wget http://www.foo.com/varfoo.iso

Pero en realidad wget tiene mucho mas para dar.
Repasemos algunos usos y utilidades interesantes para nuestro pentesting

– Link Status
Para checkear los headers y estado de cada link del sitio:

wget -o results.txt --spider -nd -S -r -l inf www.example.com

– Busqueda de archivos
Podemos buscar archivos, para luego extraer meta data por ejemplo:

wget -r -l inf -nd -nc --ignore-case -A *.pdf www.example.com

o bien

wget -r -l inf -nd -nc --ignore-case -A jpg,gif,png www.example.com

– Guardar cookies para su estudio:

wget -r -l inf -nd -nc --save-cookies cookies.txt www.example.com

– Mirror de un sitio

wget -r -l inf -E -k -p -N http://www.example.com

– Análisis de cache:
Podemos pedirle a wget que pida al servidor http deshabilitar el cache con –no-cache. Esto simplemente hace que el servidor http nos entregue los archivos directamente, no los cacheados.

Por otro lado, a estas utilidades le sumamos las siguientes utilidades:

Especificar un ‘Referer’:
Esto le dirá al servidor http ‘desde donde accedimos al link’

--referer=http://www.google.com/search

Esta opción, en conjunto con otras, pueden ayudar a evitar que un IDS o un PDS detecten que se esta analizando el sitio.

Especificar un ‘User-Agent’:

Si no especificamos un ‘User-Agent’, wget utilizará Wget/version lo que puede ser un disparador de alarmas. Algo como esto puede ser menos sospechoso:

--user-agent='Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0'

En el siguiente link, hay una enorme lista de User Agents

Especificar un header:

La opción –header nos permite

Especificar los tiempos:
Otro disparador de alarma pueden ser los tiempos en que descargamos un sitio, para eso wget tiene las siguientes variables:

--wait=seconds # Especifica la cantidad de segundos entre download y download
--random-wait # Multiplica el valor de --wait por un número al azar entre 0.5 y 1.5 (Muy útil!!!)
--wait-retry=seconds # Especifica cuantos segundos esperará antes de reintentar descargar un link que ha dado error inicialmente

Una buena combinación de estos tiempos ayudará a pasar inadvertido.

Usar un archivo de input

Con -i podemos especificar un archivo donde tengamos un lista de URLs. Asimismo utilizando –force-html, el archivo de input será leído como un html. Si los links dentro del html son relativos podemos utilizar –base=url con el fin de especificar la url utilizada como base.
Por otro lado, si utilizamos ‘-i -‘ wget tomará la lista de URLs desde el standard input, lo que lo hace combinable con otros comandos utilizando un pipe.
Por ejemplo:

lynx -dump "http://www.example.com" | grep -eo "http:.*" | wget -xi -

Conclusiones

Como vemos, wget tiene opciones muy interesantes por ser una herramienta que no esta pensada originalmente para hacer pentesting. Quizas podríamos esperar  la posibilidad de especificar múltiples valores en –user-agent y –referer, pero no es nada que no se arregle un par de lineas en bash. En conclusión, has tenido wget todo este tiempo en tu consola subutilizandolo, quizás sea hora de que te des una vuelta sobre su man.

~have fun

Leave a Reply