miércoles, julio 18, 2007

Ya he vuelto

Hace escasos minutos acabo de llegar de Badajoz, ya estoy en mi casa, o como dice shinchandmc, en mi base. Perdonarme por no haber posteado nada desde el jueves, pero es que no he podido, tengo algunas cosas que contaros que espero poder postear lo mas pronto posible.

Desde que me fui estuve preocupado por llegar a tiempo para recoger el paquete que me mandaban desde Canadá, el que pedí en ebay, el que contiene el circuito necesario para reparar mi fonera. Porque lo pedí el día 3 y el vendedor me dijo que tardaría de 10 a 15 en llegarme, así que a lo mejor venían a entregármelo y yo no estaba aquí, lo primero que hice al soltar las maletas fue bajar al buzón para ver si había algún aviso de entrega de alguna agencia de transporte, cojo todas lo que había (un buen montón de papeles y sobres) y veo un sobre marrón que venía por Air Mail, desde Canadá!! y pone en una pegatina: electronic samples, era mi "paquete", lo abro y efectivamente era el circuito necesario. Una fotito:



Luego lo probaré y postearé como me ha ido. Y bueno nada mas, solo decir que espero que el blog y mi vida retomen su ritmo normal.

jueves, julio 12, 2007

Ingenieria inversa para la web 2.0 (II)

Esta es la segunda parte de mi reciente post Ingeniería inversa para la web 2.0, y es debido a que shinchandmc me dijo en un comentario que mi script fallaba, me dejo una url con la que mi script no funcionaba bien, y llevaba razón, nada mas ver la url lo supe. Mi respuesta la podéis leer en los comments de ese post, pero de todas formas voy a explicar un poco mas despacio porque falla, que falla y como lo he arreglado.

Mirar estas dos urls, la primera es la que puso sinchandmc y la segunda la que yo use en mi ejemplo y la que use durante la elaboración del script:

http://mp3tube.net/musics/Black-eyed-peace-Pump-it/45/
http://www.mp3tube.net/es/musics/Camaron-Como-el-agua/4844/

Mi script lo que fallaba en mi script es la parte donde obtiene el nombre de la canción, mirar esta línea:

NOMBRE=$(echo $1 | cut -f6 -d"/")

Lo que hace es dividir la url (el argumento 1, $1) según los símbolos "/", y se queda con la sexta parte, tomemos mi ejemplo:

http:, , www.mp3tube.net, es, musics, Camaron-Como-el-agua, 4844

Si contamos, "Camaron-Como-el-agua" es el número seis, y es con el que se queda el comando cut y lo que se almacena en la variable $NOMBRE. Sin embargo, tomemos ahora la url de shinchandmc:

http:, , mp3tube.net, musics, Black-eyed-peace-Pump-it, 45

Si contamos, el trozo número seis es "45" y no el nombre de la canción, esto es debido a que en la primera url había un trozo más, el "es" y en esta no lo hay, por lo que al haberme basado en la url que si incluye ese dato el script no funcionará bien con los que no tengan dicho dato.

Antes de ponerme a pensar una solución debía comprobar cuantos tipos de url hay en esa web, porque yo quiero que mi script sea universal, no que solo valga para algunas versiones de la web. Nada mas entrar en la web le di a una canción de la lista last music para comprobar como era la url, esta url no tenía ni "es" ni nada parecido. Luego probé eligiendo la versión en español de la web, ahora todas las canciones llevaban el "es" y por último probé la versión brasileña, en esta ocasión lo que se incluía era "br". La versión en inglés, la internacional, no incluye nada de ese estilo. Quedaba hacer una comprobación mas si yo tomo una url con el "es" o con "br" y se lo quito qué pasaría, lo hice y siguió funcionando bien, podía oir la canción tranquilamente, lo mismo pasa a la inversa, si yo tomo una url "internacional" sigue funcionando si le añado "br" o "es". Podéis comprobarlo entrar en estas tres páginas:

http://www.mp3tube.net/musics/Camaron-Como-el-agua/4844/
http://www.mp3tube.net/es/musics/Camaron-Como-el-agua/4844/
http://www.mp3tube.net/br/musics/Camaron-Como-el-agua/4844/

Entonces, la solución es de lo mas obvia, hay que identificar de alguna manera las url y ver cuales llevan "es" o "br" y cuales no, después mediante cut se usará -f6 para las primeras y -f5 para las segundas. La forma de hacerlo que a mi se me ha ocurrido es coger con cut el trozo número 4, el que corresponde a "es" y "br", pero en las url que no llevan ese parámetro sería "musics" en lugar de "es" o "br". Esta es la teoría, el pseudocódigo. Ahora vamos a programarlo de verdad.

Primero creamos una variable, en la que se almacenará el valor del trozo número 4, es decir o "es" o "br" o "musics", será la variable $TYPE:

TYPE=$(echo $1 | cut -f4 -d"/")

A continuación un simple if nos solucionará el problema:

Si $TYPE es igual a "es" -> cut va con -f6
Si $TYPE es igual a "br" -> cut va con -f6
Si $TYPE es igual a otra cosa -> cut va con -f5

if [ $TYPE = "es" ] ; then
 NOMBRE=$(echo $1 | cut -f6 -d"/")

elif [ $TYPE = "br" ] ; then

 NOMBRE=$(echo $1 | cut -f6 -d"/")

else

 NOMBRE=$(echo $1 | cut -f5 -d"/")
fi

Y por último, con la variable nombre elegida de forma correcta se cambia el nombre del archivo descargado:

mv $CANCION.tube $NOMBRE.mp3

Y para acabar sale un mensaje diciendo que el archivo $NOMBRE.mp3 ha sido guardado:

echo "El archivo $NOMBRE.mp3 ha sido guardado"

Esa es la solución que he programado, sin embargo se me ocurrieron otras dos mal útiles y elegantes, os pongo pseudocódigo porque no se programarlo así que no puedo poner otra cosa:

Otra forma de haberlo hecho hubiera sido poner solo un if/else y no un if/elif/else, así:

-Si $TYPE es igual a "es" o a "br" -> cut va con -f6
-Si $TYPE es igual a otra cosa -> cut va con -f5

El problema es que no sabía como poner ese parámetro lógico "o", así que esta no he podido hacerla.

Y la última solución, y para mi la mejor, sería usando comodines:

-Si $TYPE es igual a dos caracteres cualesquiera -> cut va con -f6
-Si $TYPE es igual a otra cosa -> cut va con -f5

Pero claro el problema es que tampoco se como ponerle el comodín necesario, ésta solución es la mejor por una razón básicamente: vale para siempre, si para las url "internacionales" sirve y también vale para las url de cualquier nuevo país que se añada a la lista, por ejemplo si ahora sacan una versión en francés ese parámetro sería "fr", mi script actualmente no funcionaría bien con eso, solo entiende de "es" y de "br". Sin embargo esta última solución es compatible con cualquiera porque solo comprueba que $TYPE es igual a dos caracteres, los que sean, y como todos los países se pueden representar con 2 letras pues ya estaría todo solucionado.

Si averiguo como solucionar ese pequeño problema lo haré y todos contentos :D

Para acabar comunicar una cosa, el nuevo script se puede descargar de aquí:

http://neobiusnet.googlepages.com/mp3tube.sh

Y cada vez que haya alguna actualización se podrá descargar desde ahí, porque las nuevas versiones siempre las voy a subir como mp3tube.sh, las antiguas tendrán un número adecuado, la primera versión todavía puede descargarse desde aquí:

http://neobiusnet.googlepages.com/mp3tube0.1.sh

Aunque no os lo recomiendo porque no funciona bien.

Nuevo libro: "Hacking ético"

Pues si, desde que lo vi cuando estuve por aquí en febrero me llamo mucho la atención, y estuve a punto de comprármelo de no ser por el "detallito" de que una punta de la tapa trasera estaba destrozada, luego iba a lanzarme a comprarlo por internet, pero finalmente vi otro en Cádiz, "Software Libre: Herramientas de Seguridad" y opté por este segundo libro. Ayer ya vi el libro y lo hojeé un poco, luego en casa mire en la web de la editorial el índice un poco mas despacio, y hoy no he aguantado más, he desembolsado 31.60€ y lo he comprado, es un libro muy interesante, empieza hablando de ética, luego un poco de leyes (yankis supongo) y divulgación correcta y ética de vulnerabilidades. La segunda parte ya empieza con lo técnico, habla de test de penetración, técnicas del hacker de hoy y automatización de test de penetración. Después toca hablar de exploits, desde cosas básicas, conocimientos de programación, depuración de código... exploits básicos para linux, avanzados, código para el shell de linux, y exploits básicos para windows. Para acabar, el libro trata el análisis de vulnerabilidades, ingeniería inversa, como crear un exploit para una vulnerabilidad localizada y como parchear una vulnerabilidad. Mas detalles en el índice. En fin un libro muy completo y muy interesante, al menos en apariencia :D

Bueno no puedo acabar este post sin poneros la foto de rigor, que aunque podáis ver el libro en muchos sitios, ya sabéis que me gusta poneros las fotos en el blog :)


PD: El fallo del script ya estoy intentando subsanarlo, cuando este listo (espero que pronto) lo posteo ;-)

De viaje a Badajoz

Ayer me vine a Badajoz, tras un viaje de cuatro horitas llegué aquí a las doce de la mañana. Lo primero que hice fue sacar el portátil y mi equipo wifi: la tarjeta integrada del portátil (atheros), un adaptador usb zydas, un adaptador usb ralink con posibilidad de conectarle una antena externa y dos antenas, una de 8dbi y otra creo que de 4.5dbi, además de la fontenna.

Con todo este arsenal arranque wifislax con intención de averiguar la clave wep de alguna de las redes wifi que hay por aquí, hay bastantes y la mayoría son de imagenio (tipo WLAN_XX) así que el asunto era bastante fácil, solo necesitaba algunos paquetes, y luego generar a partir del bssid y del essid de la red una lista de 65536 posibles claves y mediante aircrack-ng ver cual de ellas es la clave, además conviene apuntar la mac de algún equipo conectado a la red, ya que, al menos, con todas las redes imagenio con las que me he cruzado, tienen filtrado MAC. Bueno el caso es que en poco tiempo tenía dos cables y dos macs aparentemente útiles, así que reinicio y desde ubuntu cambio mi mac mediante el paquete macchanger:

macchanger ath0 -m XX:XX:XX:XX:XX:XX

Pero no conectaba, así que entonces pensé en probar la conexión de yoigo y luego seguir intentándolo con el wifi. Yoigo directamente no fui capaz de que me funcionara, después seguí con el wifi, pero recordé que la vez anterior que estuve por aquí configuré la tarjeta de red adecuadamente para que funcionara bien con la red WLAN_33 e hice un backup del fichero /etc/network/interfaces, que es el que tiene la configuración de los adaptadores de red. Lo próximo que hice es obvio no? restaure esa copia de seguridad del interfaces, después reinicié (realmente no es necesario, pero yo lo hice) y... no funcionó! Pensé que habrían cambiado la clave wifi o algo, así que volví a intentarlo las otras redes, pero no tenían dhcp, o al menos yo no tenía ip, quizás fuera problema de mi configuración, no me asignaban ip, probé con alguna pero no iba. Después intenté averiguar alguna ip mediante kismet, pero no había ningún cliente conectado, así que una vez mas, tampoco pude. Finalmente intenté conectarme desde ubuntu usando el usb zydas, así que preparé el archivo interfaces con la configuración adecuada (essid, mac, clave) y por fin funcionó, se conectó a la red WLAN_33 sin mayores problemas, ya tenía internet!!

Bueno chicos, creo que hoy voy a ser un poco malo y voy a apuntar mis antenas a la comisaria, que desde una ventana tengo visión directa hacia ella (y está relativamente cerca), vamos a ver que pasa...

Otra cosa, he vuelto a ver un libro curioso, "Hacking ético", la verdad es que me interesa mucho y estoy pensando muy seriamente si comprármelo o no. Ya os seguiré contando cosillas...

martes, julio 10, 2007

Ingenieria inversa para la web 2.0

Ayer, buscando en google una canción en mp3, llegué a una curiosa página, mp3tube.net, que es web estilo estilo youtube pero para alojar mp3s, tiene un reproductor flash para reproducir las canciones y no permite descargar las canciones, pero claro yo aunque quizás hubiera sido mejor descargar la canción mediante p2p ya que me había encontrado con esto no quería dejarlo así, quería averiguar donde estaban guardados los mp3s para poder descargarmelo.

Lo primero que hice fue echarle un vistazo al código fuente, quizás estuviera la url del mp3 en él y me ahorraría tener que descompilar el reproductor flash y buscar en su código ActionScript. Busqué pero no encontré nada útil, excepto un detalle importante, el "id" del archivo, cada archivo tiene uno diferente, así que deduje que me sería útil para descargar las canciones una vez averiguara donde estaban alojadas. Esto fue lo único interesante que vi en el código fuente:

http://www.mp3tube.net/play.swf?id=772691db234dc0b62844eac87f3d21d5

Se ve perfectamente el id, y el nombre del reproductor flash. Luego intenté una tontería, pero a lo mejor funcionaba, puse mp3tube.net/id_del_archivo.mp3 pero no funciono, error 404, tras probar varias posibilidades mas pare probar, no sirvió ninguna de mis intuiciones. Próximo paso? descargar el reproductor flash, descompilarlo y ver que hace. Así que nada wget mp3tube.net/play.swf, apt-cache search swf decompiler, apt-get install flasm, flasm, flasm -d play.swf. Explico: descargo el archivo, busco un descompilador de archivos swf, instalo el que he encontrado (flasm), lo ejecuto sin argumentos para ver la sintaxis, y luego lo ejecuto con -d (descompilar) como parámetro y play.swf (archivo swf) como argumento. Tras mirar un poco veo que hay llama a otro archivo, a fmp3.swf, así que lo descargo igualmente y miro un poco el código de este archivo, no veo nada útil, así que me voy de nuevo al primero y repasándolo veo una cosa cuanto menos curiosa:

'mp3', 'http://matrix.mp3tube.net/tube/', 'id', '.tube'

Lo que me hace pensar que los archivos mp3 se pueden sacar de matrix.mp3tube.net/tube/id_del_archivo.tube, así que hago la prueba poniendo como id el de la canción que puse antes como ejemplo, Como el agua, de Camarón, y descargo mediante wget (si ya que se puede con firefox, pero a mi me gusta el terminal):

wget http://matrix.mp3tube.net/tube/772691db234dc0b62844eac87f3d21d5.tube

Vaya, son 3.5 MB tiene toda la pinta de ser una canción en mp3, cuando termino de descargarlo para ver que es ejecuto:

file 772691db234dc0b62844eac87f3d21d5.tube

Y efectivamente es un fichero mp3, así que intento reproducirlo:

mplayer 772691db234dc0b62844eac87f3d21d5.tube

Suena!! ya sabemos donde están los archivos, pero trabajo acabado?

No... es mucho trabajo hacer todo eso a mano, así que, se me ocurre que puedo hacer un script que haga el solo todo el trabajo, y de paso practico un poco shell scripting.

Blogger deforma un poco (en realidad mucho) es script, así que lo he colgado, podeis verlo aquí: http://neobiusnet.googlepages.com/mp3tube.sh

Voy a comentaros un poco el script, se que algunos lo entenderéis perfectamente, pero a alguien le interesará saber como funciona, así que lo explico un poco:

La primera línea: #!/bin/bash simplemente indica que es un script bash.

Después hay una comprobación mediante un if, si no se le ha puesto ningún argumento muestra en la pantalla mediante varios echo, para que sirve el script y como se usa, lo he puesto en inglés para que lo pueda usar mas gente aunque realmente dudo de la calidad de la pagina mp3tube.net, y de si tiene mucha audiencia o no, pero bueno, lo he puesto en inglés de todas formas.

En caso de que si se le haya pasado la url como argumento comienza descargando la pagina html (linea 17), y lo guarda como index.html.

La línea 18 asigna a la variable CANCION, el id de la canción, imprimiendo el archivo index.html, mediante grep se selecciona una línea y luego mediante cut se corta el id.

En condiciones normales cuando se descarga el archivo tiene un nombre absurdo, [id].tube, es imposible saber que canción es, así que para solucionar esto la línea 19 se encarga de tomar el nombre de la propia url:

http://www.mp3tube.net/es/musics/Camaron-Como-el-agua/4844/

En este caso sería Camaron-Como-el-agua.mp3. La forma de hacerlo es dividiendo con cut la url en partes usando como límites las "/" de la url, con -f6 se selecciona la parte que queremos, este es el dato que se asigna a $NOMBRE.

Por último se descarga el archivo, le cambia el nombre a $NOMBRE.mp3 y termina diciendo "El archivo $NOMBRE.mp3 ha sido guardado".

Una cosa que se me había olvidado, gracias a Castigador por su ayuda con el script, ya que tuve unos problemillas con cut.

domingo, julio 08, 2007

Nuevas ideas para entretenerme

Mi principal proyecto para este verano era preparar la fonera para atacar la red del centro tic, pero claro esto se ha visto truncado desde que la deje bricked y no conseguí arreglarla, solo queda esperar a que me envíen el circuito que compre en ebay. En vista de la situación tengo que hacer algo mientras tanto, puedo seguir algunos de mis proyectos de los llamados "históricos", realmente me acabo de inventar el nombre, pero son los que llevo apuntados en la agenda desde hace mucho tiempo, tipo aprender php, seguir con C, practicar análisis forense, leer "The Art of Deception" de Kevin Mitnick... o bien algún proyecto nuevo.

Me ha dado por los wargames, a raíz de que en uno de los blogs que leo Diariolinux.com, hablaba sobre el hackit de la euskal del año pasado, así que me lo he descargado con intención de intentar hacer todos los niveles. Esto me ha traído a la cabeza uno de los históricos, el análisis forense, por ahí tengo las imágenes de varios retos (los tres del reto de Rediris, y creo que alguno de honeynet) así que me ha parecido interesante retomarlo e intentar analizar yo mismo las imágenes a ver que averiguaría y si me atasco ayudarme con los informes, porque no está de mas recordar que los retos ya acabaron y se publicaron los mejores informes de los participantes. Todavía no estoy muy seguro de la segunda opción pero lo del hackit, creo que voy a empezar ahora mismo :)

Problemas con el router

Orange hace tiempo me regaló un router, lo que no me decían es que era defectuoso...

En principio el router es el mismo que el que yo ya tenía, pero creo que tenía alguna actualización de firmware, así que aprovechando que tenía que cambiar la configuración del adsl, decidí cambiar el router y poner el nuevo, a pesar de que el antiguo, en aproximadamente un año que tendrá, no me había dado ni un solo problema.

Este nuevo router a los pocos días de instalarlo me di cuenta de una cosa que no me gustaba nada, el router tiene 4 tomas ethernet, y un led verde que parpadea cuando hay actividad en alguna de ellas, en mi router antiguo esto lo hacía perfectamente, por ejemplo, si el servidor estaba descargando el ultimo disco del Capullo de Jerez, parpadeaba el led correspondiente, y esto me servía para saber de un vistazo si había actividad en la red y por parte de quien. Bueno pues el router nuevo no lo hace así, si hay actividad en cualquiera de los puertos ethernet, parpadean todos los diodos, no solo el que debería hacerlo.

Ese es un primer problema, en realidad es algo un poco insignificante, porque tampoco estoy todo el día mirando el router para ver que pasa en la red, de hecho habitualmente el router y yo estamos en habitaciones distintas, pero por ejemplo cuando estoy en esa habitación y no estoy usando ningun ordenador, pero tengo el server encendido con mldonkey, de un solo vistazo veo si esta funcionando. El caso es que no he considerado esto como razón para cambiar el router.

Pero ya la gota que colma el vaso es que el router cuando se transmiten grandes cantidades de datos por él, simplemente se autoreinicia, se corta la conexión a internet, el wifi, y la propia red local, hasta que el router rearranque. Si tal y como suena, cuando estaba transmitiendo la imagen de la partición de 30 GB, aproximadamente cuando levaba 1500 MB se corto, luego el router una vez reiniciado se iba reiniciando cada si se seguían transmitiendo "tantos" datos, no es capaz de aguantar un trafico de 2 GB, antes se corta y se reinicia, y esto me ha pasado en mas de una ocasión. La primera vez fue con la imagen de 30 GB, luego pasando al portátil unos 4 GB de películas para pasarlas a un dvd, se me corto bastantes veces. Y la última vez me paso anoche, cuando pasaba al portátil los episodios de Cazadores de mitos que me descargué en descarga directa desde Yendit.com (hay peliculas, series... pasaros y echar un vistazo), se corto muchas veces, por supuesto durante este proceso no se puede navegar por internet porque el router no para de reiniciarse, con mucha frecuencia. Por cierto, esto ocurre tanto por wifi como por ethernet.

El primer problema mira, puedo soportarlo, pero el segundo no me hace ninguna gracia, así que voy a cambiar el router y a hacer una prueba, hacer si aguanta un trafico de 15 GB, si no se corta lo dejo así y ya está, si no llamaré a orange a que me manden otro, porque este router nuevo es de junio, y si no funciona bien esta garantía.

PD: Supongo que ya os habréis enterado de la existencia de una nueva fonera, la fonera+, la podéis ver en el blog de Varsavsky, de todas formas es un poco cara (45€), vamos a esperar a los primeros análisis en la red y a ver que tal se porta, si se puede flashear...