Está en la página 1de 6

LABORATORIO BASH

SCRIPTING

LABORATORIO BASH SCRIPTING

2

1. Ambiente bash bsico

1.1. Descripcin general
Estas son el tipo de herramientas que normalmente usaremos. Debe familiarizarse con este tipo de
ambiente. Tiempo estimado para el desarrollo 90 minutos.

1.2. Scripting bash simple
Si para usted no es familiar trabajar con el Shell bash, sugiero que al intentar resolver estos ejercicios
tome como referencia de consulta el siguiente enlace http://www.tldp.org/LDP/abs/html/. Este
laboratorio requiere que usted est familiarizado con el sistema operativo Linux. El Shell bash
cualquier otro segn sea el caso, es un ambiente de scripting muy poderoso. En muchas ocasiones
necesitaremos automatizar una accin de administracin o desarrollar una tarea repetitiva que
consume mucho tiempo, es all donde es muy til el scripting bash. Intentemos trabajar con un
ejercicio paso a paso.

LABORATORIO BASH SCRIPTING

3

1.3. Ejercicio 1

Requerimientos del laboratorio:
Imgen de BackTrack 4
Vmware Workstation 6.5
Conexin Internet

Descripcin del ejercicio:
A usted se le ha asignado la tarea de recolectar los nombres de servidores del dominio
unicauca.edu.co como sea posible con la condicin de generar el mnimo trfico posible. Al visitar el
sitio note que su pgina principal contiene enlaces a servidores internos y externos. El ejercicio
requiere extraer todos los nombres de los servidores de la pgina web principal.

























IMPORTANTE!!! NO EXTIENDA ESTE EJERCICIO ESCANEANDO O DESARROLLANDO ALGUNA
OPERACIN ILEGAL EN EL SITIO WEB ESCOGIDO COMO PRUEBA. LIMTESE A LO SOLICITADO EN EL
EJERCICIO!

LABORATORIO BASH SCRIPTING

4

1.4. Posible solucin para el ejercicio 1
Iniciaremos por configurar la interfaz de red del BackTrack4 utilizando el comando dhclient.
root@bt:~# dhclient
There is already a pid file /var/run/dhclient.pid with pid 6989
killed old client process, removed PID file
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

Listening on LPF/eth0/00:0c:29:31:cd:18
Sending on LPF/eth0/00:0c:29:31:cd:18
Sending on Socket/fallback
DHCPREQUEST of 192.168.71.131 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.71.131 from 192.168.71.254
bound to 192.168.71.131 -- renewal in 768 seconds.

Ahora utilizaremos el comando wget para descargar la pgina web principal del dominio
unicauca.edu.co.
root@bt:~# wget http://www.unicauca.edu.co
--2009-12-04 23:18:53-- http://www.unicauca.edu.co/
Resolving www.unicauca.edu.co... 190.5.195.137
Connecting to www.unicauca.edu.co|190.5.195.137|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `index.html'

[ <=> ] 35,236 219K/s in 0.2s

2009-12-04 23:18:53 (219 KB/s) - `index.html' saved [35236]

Luego extraemos las lneas que contienen la cadena href=, indicando que esta lnea contiene un
enlace http.
root@bt:~# grep "href=" index.html
<link href="http://www.unicauca.edu.co/estilos/estilo1.css" rel="stylesheet" type="text/css">
<link href="http://www.unicauca.edu.co/estilos/estilo2.css" rel="stylesheet" type="text/css">
<link href="http://www.unicauca.edu.co/estilos/estilo4.css" rel="stylesheet" type="text/css">

. . . y ms

El resultado obtenido est muy desordenado, pero estamos cerca de la solucin. Si utilizamos una de
las lneas de salida anteriores y usamos como delimitador /, el tercer campo debe contener el
nombre de los servidores que necesitamos recolectar.
root@bt:~# grep "href=" index.html | cut -d"/" -f3
www.unicauca.edu.co
www.unicauca.edu.co
www.unicauca.edu.co
www.unicauca.edu.co"><img src="..
a -->
LABORATORIO BASH SCRIPTING

5

a> -->
<a href="contenidos.php?CatSub=2.0.9">Descargas<
investigacion.unicauca.edu.co" target="_blank">Investigaci&oacute;n<
www.unicauca.edu.co
. . . y ms

El resultado obtenido sigue siendo muy desordenado, pero nos acercamos a la solucin. Haremos una
depuracin ms profunda, nicamente extraeremos los dominios unicauca.edu.co, ordenaremos los
resultados.
root@bt:~# grep "href=" index.html | cut -d"/" -f3 | grep unicauca.edu.co|sort -u
eva.unicauca.edu.co
exalumnos.unicauca.edu.co
exalumnos.unicauca.edu.co" target=_blank><img src="imgsadicionales
faramit.unicauca.edu.co:8080
investigacion.unicauca.edu.co" target="_blank">Investigaci&oacute;n<
museo.unicauca.edu.co
ragnarok.unicauca.edu.co:8080
ragnarok.unicauca.edu.co:8443
spar.unicauca.edu.co
www.periodico.unicauca.edu.co" target=blank><img src="imgs
www.unicauca.edu.co
www.unicauca.edu.co"><img src="..

Con el siguiente comando queda an ms depurada la salida.
root@bt:~# grep "href=" index.html | cut -d"/" -f3 | grep "unicauca.edu.co" | cut -d" " -f1 |sort -u
eva.unicauca.edu.co
exalumnos.unicauca.edu.co
exalumnos.unicauca.edu.co"
faramit.unicauca.edu.co:8080
investigacion.unicauca.edu.co"
museo.unicauca.edu.co
ragnarok.unicauca.edu.co:8080
ragnarok.unicauca.edu.co:8443
spar.unicauca.edu.co
www.periodico.unicauca.edu.co"
www.unicauca.edu.co
www.unicauca.edu.co"><img

Note que este mtodo no es muy elegante que digamos, lo ideal es realizar el script en un lenguaje
como Python o Perl. Este ejercicio simplemente muestra el poder del ambiente bash. Pruebe el script
en Python list-urls.py.
root@bt:/pentest/enumeration/list-urls# python list-urls.py http://www.unicauca.edu.co

##########################################################
# #
# Extract URLS from a web page #
# muts@whitehat.co.il #
# #
##########################################################

LABORATORIO BASH SCRIPTING

6

http://www.unicauca.edu.co
contenidos.php?CatSub=33.7
contenidos.php?CatSub=2.0.9
http://biblio.unicauca.edu.co
http://www.unicauca.edu.co/admisiones/index.php
https://www.unicauca.edu.co/rc5
contenidos.php?cat=0.0
contenidos.php?cat=0.1
contenidos.php?cat=0.2
contenidos.php?cat=0.3
http://investigacion.unicauca.edu.co
http://bienestar.unicauca.edu.co
contenidos.php?cat=0.6
contenidos.php?cat=1.1
contenidos.php?cat=1.2
contenidos.php?cat=1.4
http://www.unicauca.edu.co/matriculasynotas/
. . . y ms

Pasemos al siguiente nivel colocando la lista de servidores en un archivo de texto.
root@bt:~# grep "href=" index.html | cut -d"/" -f3 | grep "unicauca.edu.co" |sort -u > unicauca-srv.txt

Podemos escribir un pequeo script que lea lnea a lnea el archivo unicauca-srv.txt y ejecute el
comando host por cada servidor para resolver el nombre y hallar la IP. Analice el siguiente script y
mejore su funcionamiento.
root@bt:~/prueba# more find.sh
#!/bin/bash
echo "Digite el dominio a buscar"
read dominio
echo "Buscando sobre el dominio: $dominio"
wget http://www.$dominio
grep "http:" index.html | cut -d"/" -f3 | grep $dominio |sort -u >> listado.$dominio.txt
for hostname in $(cat listado.$dominio.txt);do
host $hostname |grep "has address" |cut -d" " -f4 >> listado-ips.$dominio.txt
done
cat listado-ips.$dominio.txt |sort -u
rm index.htm*
cat listado-ips*|sort -u > ips.txt
rm listado.*