Archive for May 2013

Virales / Youtube / Menores




Desde que el gigante Google tomo el poder de Youtube (2007), un sitio donde los usuarios pueden subir y compartir videos, es que el uso de esta plataforma ha crecido exponencialmente y ha tomado una importancia en las tendencias actuales.


Youtube a sido el responsable en varias ocasiones, donde un simple vídeo de un usuario común pueda lograr millones de visitas y volverse toda una personalidad en Internet.
Es así como dicho poder de globalización de un simple video puede ser un arma de doble filo al fijarnos en el contenido que esta siendo difundido.


Video Viral: Nos referimos a video viral a una grabación que ha sido ampliamente difundida por toda la red, mediante diferentes vias: 

  • Correos electrónicos
  • Redes sociales 
  • Blogs
  • Mensajería Instantánea
  • Replicación Sitios Web
Si bien en un comienzo los vídeos virales destacaron por su contenido humorístico, provenientes de vídeos aficionados o de programas televisivos. Posteriormente se fueron viralizando otro tipo de videos con un contenido distinto.



“El uso masificado de smartphones con conexión directa a Internet a sido una herramienta para la creación de vídeos posteriormente viralizados”













#~  Viralizando contenido inadecuado ..?



Es de conocimiento general la rapidez con que se difunde un nuevo vídeo viral en las redes sociales, donde todos comienzan a hablar de ellos y los que no, comienzan a preguntar y buscar el contenido muchas veces eliminado pero re-subido en otros portales, se vuelven Trending Topic en Twitter y finalmente todos terminan viendo el vídeo por la curiosidad.



El problema para los menores radica cuando estos vídeos son inapropiados,actos de bullying o de contenido sexual; principalmente por dos grandes motivos:

  1. Los vídeos llegan a sus manos, debido a la gran difusión en redes sociales .
  2. Los menores suelen ser las Victimas de estos videos
Es bueno aclarar que no solo los virales con contenido sexual son dañinos para los menores, un ejemplo claro es la gran cantidad de vídeos que han sido subidos a la red con el fin de ridiculizar y burlarse de un compañero de curso, o mientras le pegan y ejercen bullying con el fin de que todos lo vean.



Pero, ¿qué es un Vídeo viral de contenido Sexual – Chile?


Podrán recordar vídeos que se viralizaron en distintos años como:

  • “Wena Naty” 2007 -> Escolar Menor de Edad – Contenido Sexual
  • “La Pela Tomates” – 2009


Entre los más recordados, en fin esto no es algo nuevo la verdad vídeos FILTRADOS a la red de esta índole  vienen de antes del uso de las redes sociales actuales. Incluso en la época del BOOM del MSN, incluso del IRC donde la única forma de difusion era que alguien te mandara el archivo vía email o MSN, con el tiempo que esto demoraba.








¿Como nos cuidamos para no ser Victimas ?

Aquí les dejamos una serie de consejos para no ser víctimas de vídeos indeseados multiplicándose en la red, debemos resaltar que lo mas importante para prevenir estas situaciones es el auto-respeto y el respeto por los demás.

  • Nunca realices vídeos con desnudos o situaciones donde se comprometa tu integridad o la de otra persona.
  • No mantengas en tu celular vídeos comprometedores,se te podría perder o podrían robártelo y el vídeo estaría expuesto.
  • Jamás confíes en alguien que te pide que te grabes, aunque sea tu amigo, novio, pololo.. etc. La mayoria de los videos filtrados provienen de una fuente cercana que jamás imaginaste que podria ser posible.
  • NUNCA, debemos colocar nuestra Webcam con extraños.
  • FINALMENTE, respeta: no participes de estas acciones.



No todos los virales son dañinos..!

Existen muy buenos virales, sobre: acciones heroicas, videos de humor, cortos publicitarios e incluso de arte.






Dudas?, contáctanos.





















Leer artículo original: Virales / Youtube / Menores

Ver en pantalla grande los videos de youtube mientras en el otro monitor trabajamos.

Tengo un computador con 2 monitores. Mientras trabajo en uno, en el otro veo videotutoriales.
El problema es que al colocar la opción fullscreen en el video y al hacer click en el otro monitor se sale del modo fullscreen.

La solución es la siguiente:
Si tenemos el video en la url: http://www.youtube.com/watch?v=4iv0gx0DG6A
debemos modificarlo por: http://www.youtube.com/v/4iv0gx0DG6A

Si ahora apretamos F11 podremos verlo en fullscreen y trabajar sin problemas en el otro monitor.
PD. El video que usé de ejemplo es para crear una red fantasma usando scapy. No se lo pierdan.

Leer artículo original: Ver en pantalla grande los videos de youtube mientras en el otro monitor trabajamos.

Claves por Default en el 2013?




Claves por default no es algo nuevo, la verdad es una de las formas más básicas de inseguridad en todos los tiempos. Entra entrada está motivada por la presencia de estas malas prácticas aun en el 2013 y donde sus consecuencias están subestimadas.


Podemos encontrar este problemas en distintas situaciones como:

  • Modems / Routers
  • WiFi ISP
  • Passwords asociados a Jailbreak en IOS ( Alpine )
  • Cuentas personales en Intranet / colegios y Universidades.
  • Claves de acceso físico
  • y más.


Password en la Universidad .. ?

*~ Conversando por ahí me di cuenta que algo que sucedía en algunas universidades es algo totalmente común para algunos. Algo preocupante porque mientras mas común es para la gente, mas se pueden aprovechar de estás fallas por lo que habrían mas víctimas.
Al entrar a la universidad generalmente se nos asigna una cuenta generalmente del tipo : 

PrimerySegundoNombre.Apellido@Universidad.Dominio

Si el RUT es: 12.345.678-9  / claveDefault: 5678
              12.345.678-9  / claveDefault: 6789

Usos del Password..?
Los passwords en la universidad estan diseñados para:
  • ingresar al Intranet desde la web
  • acceder a tu información
  • ver horarios
  • estados de pago
  • Tomar asignaturas y sus horarios.
  • Imprimir en el Lab de Computación a tu Saldo Mensual. $$
  • Ingresar al uso de pcs en el Lab de Computación.
  • Acceso a tu cuenta de correo educacional




Malas Prácticas..?

Es curioso darse cuenta que la mayoría de los alumnos no cambian su clave por default, muchos nisiquiera imaginan las cosas que se podrían lograr accediendo. ( no extrapolan el peligro ).

Mas curioso aún, a finales de cada año ciertas universidades realizan un Reseteo de las claves, por lo que cada año comienzas con tu misma clave por default. / y en el olvido queda tu clave actualizada que hayas cambiado previamente.




Fin~#






Leer artículo original: Claves por Default en el 2013?

Forense automatizado a un whatsapp

Buenas a todos, ya hace un tiempo que no escribo algún que otro articulo y hoy aburrido hablando con unos amigos por whatsapp me quedo la duda de si whatsapp guardaba los logs de todo lo que hicíera y efectivamente whatsapp lo hacia.

Viendo la de cositas que se estaban guardando :
      – Conversaciones de tlfn a tlfn
      – Chats activos
      – Fotos de los perfiles que mire
      – Imágenes, audios, videos que me pasarón o que pase

      (Por ejemplo).

Pues me apetecio hacerle un forense y al tiempo que lo hago os haré una demo del forense a un whatsapp y vereís todos los datos que podemos sacar de utilidad.

Recrearemos un entorno en el que dispongo de acceso físico a un terminal.
El whatsapp es una buena forma de extraer información sobre el día día de la persona, se podría aplicar algo como “Dime con quien andas y te diré quien eres” pero convertido al método geek.



Empezamos con la DEMO :

Bueno, los ficheros de whatsapp se guardan por defecto en /storage/sdcard0/WhatsApp/ , y yo me enviaré los ficheros con Airdroid, una estupenda app para compartir archivos PC – Smartphone vía wifi.

Para pasar a estar conectados en “Modo de conexión remota” como ahí podeís ver solo hay que acceder a web.android.com y te logueas con tu cuenta.



Y tan solo te queda acceder al directorio y descargar los arhivos de los que extraeremos los metadatos.

Una vez descargados los ficheros voy a proceder a comentaros que podemos encontrar en cada uno de los directorios y cómo podríamos extraerles el jugo.

Tenemos “Databases“, “Media” y “Profile Pictures“, he hecho un script para que extraiga los metadatos de los db.crypt, tambien extrae los ficheros de la carpeta media(imágenes, audios, videos) y tambien extrae las imágenes encontradas en Profile Pictures.

Databases : Aqui podremos encontrarnos una serie de ficheros con extensión “db.crypt“, Whatsapp cifra los archivos SQLite con AES pero siempre usa la misma key “346a23652a46392b4d73257c67317e352e3372482177652c” y de este modo podré decodificarlos.

Media : Aqui nos encontramos con una seríe de archivos (imágenes, audios, videos y wallpapers).

Profile Pictures : Aqui nos encontraremos con todas las imágenes de perfil(de usuario) que hemos mirado desde nuestro whatsapp.




NOTA IMPORTANTE : Para extraer la información de todos estos archivos que hemos obtenido he codeado un script que automatiza todo el proceso (a excepción del proceso de obtención de los ficheros , puesto que se supone que tenemos acceso físico al terminal.)











Ahora os mostraré un esquema en forma de arbol para comprender un poco como funciona el script que he preparado:


· WhatsApp Metadata Extractor :
       – main_manage.py (main de consola en forma de cliente)
       – DB_Extractor.py (extrae los metadatos de la BD)
       – metaimg_extractor.py (extrae los metadatos de los .jpg encontrados)

He dividido el proyecto en 3 scripts, main_manage es el encargado de interactuar con el cliente (el que debemos ejecutar), DB_Extractor es el encargado de realizar las consultas con la BD para extraer toda la información(la que nos interesa) y metaimg_extractor es el encargado de buscar en “Media” y en “Profile Pictures” en busca de metadatos en los archivos .jpg (La mayoria vienen con ellos eliminados por defecto pero no me digas por qué algunas imágenes no se filtran y son subidas sin filtrarse).

Sin más os dejo los codes :

main_manage.py :

# -*- coding: utf-8 *-*
import DB_Extractor, metaimg_extractor

class WhatsApp_Extractor():

    def __init__(self):
        self.__opt()

    def __opt(self):
        #Uncomment the OPTION that you want to use

        #self.__opt1()  #-> DB METADATA EXTRACTOR
        #self.__opt2()  #-> IMG METADATA EXTRACTOR
        #self.__opt3()  #-> BOTH, OPT1 AND OPT2

    def __opt1(self):
        print "DB METADATA"
        print "------------"
        DB_Extractor.DB_Extractor()
        print "------------"

    def __opt2(self):
        print "IMG META"
        print "------------"
        metaimg_extractor.IMG_Meta()
        print "------------"

    def __opt3(self):
        print "DB METADATA"
        print "------------"
        DB_Extractor.DB_Extractor()
        print "------------"
        print "\nIMG META"
        print "------------"
        metaimg_extractor.IMG_Meta()
        print "------------"

WhatsApp_Extractor()

DB_Extractor.py :

# -*- coding: utf-8 *-*
#Script to extract the metadata from the WhatsApp crypted DB

import sqlite3
from Crypto.Cipher import AES

class DB_Extractor():

    def __init__(self):
        self._manage_do()

    def _manage_do(self):
        try:
            self.__DB_Breaker('msgstore.db.crypt')
            self.__DB_conn()
            self.__SQL_Consulter()
            #Log exporter
        except:
            print "Error starting the script"

    def __DB_Breaker(self, DBPath):
        self.DBPath = DBPath
        #breaking the hash
        f = open(self.DBPath, 'rb')
        key = "346a23652a46392b4d73257c67317e352e3372482177652c"
        #triying to break the hash
        try:
            key = key.decode('hex')
            cipher = AES.new(key, 1)
            decoded = cipher.decrypt(f.read())
            #Saving into a new db file
            try:
                decoded_DB = open('metadb.db', 'wb')
                decoded_DB.write(decoded)
                decoded_DB.close()
                print "metadb.db has been created in the same directory"
            except:
                print "An error has ocurred creating the decoded DB"
        except:
            print "Error decoding the hash"


    def __DB_conn(self):
        #triying to connect with the sqlite database
        try:
            self.conn = sqlite3.connect('metadb.db')
            self.consult = self.conn.cursor()
        except:
            print "An error has ocurred connecting with the SQLite DB"


    def __SQL_Consulter(self):
        #Divided in :
            # Messages
            # Chat_list

        def __Messages():
            #SQLConsult
            try:
                self.consult.execute("SELECT key_remote_jid, key_from_me, \
                remote_resource, status, datetime(timestamp), data, media_url, media_mime_type, \
                media_size, latitude, longitude FROM messages;")

            except:
                print "An error has ocurred doing the SQL Consult"

            def __Shower():
                #Message details
                #nota : parsear status, comprobar si yo envio o recivo

                for data in self.consult:
                    try:
                        print "\nMessages Details:"
                        print "----------------------"

                        if str(data[2]):
                            if str(data[1]) == '1':
                                print "From: me"
                                print "To: %s(group), integrant: %s"%(str(data[0]), str(data[2]))
                            else:
                                print "From: %s(group), integrant: %s"%(str(data[0]), str(data[2]))
                                print "To: me"
                        else:
                            if str(data[1]) == '1':
                                print "From: me"
                                print "To: " + str(data[0])
                            else:
                                print "From: " + str(data[0])
                                print "To: me"

                        print "Status: " + str(data[3])
                        print "Timestamp: " + str(data[4])
                        print "Message: " + str(data[5])
                        print "Media content: %s, type: %s, size: %s"%(str(data[6]), str(data[7]), str(data[8]))
                        print "Location(Lat: %s, Long: %s)"%(str(data[9]), str(data[10]))
                        print "----------------------"

                    except:
                        continue
                        print "ERROR showing message details"

            __Shower()


        def __Chat_list():
            #SQLConsult
            try:
                self.consult.execute("SELECT id, \
                key_remote_jid FROM chat_list;")

            except:
                print "An error has ocurred doing the SQL Consult"

            def __Shower():
                #Chat list details
                for data in self.consult:
                    try:
                        print "\nChat_list"
                        print "ID: " + str(data[0])
                        print "Number: " + str(data[1])
                        print "----------------------"
                    except:
                        continue
                        print "ERROR showing chat list details"

            __Shower()

        #Initializing
        __Messages()
        __Chat_list()

metaimg_extractor.py :

# -*- coding: utf-8 *-*
import os, exif

class IMG_Meta():

    def __init__(self):
        try:
            self.__Media_extractor()
            print "------------------------------------------------------\n"
            self.__Profile_extractor()
        except:
            print "An error has ocurred starting the script"
    def __Media_extractor(self):
        try:
            images = os.listdir('Media/WhatsApp Images/')
        except:
            print "An error has ocurred listing the files into the directory"

        def __Shower():
            for i in images:
                print "-------------"
                print i
                obj = exif.extract_EXIF('Media/WhatsApp Images/%s' % i)
                print "-------------"

        __Shower()

    def __Profile_extractor(self):
        try:
            images = os.listdir('Profile Pictures/')
        except:
            print "An error has ocurred listing the files into the directory"

        def __Shower():
            for i in images:
                print "-------------"
                print i
                obj = exif.extract_EXIF('Profile Pictures/%s' % i)
                print "-------------"

        __Shower()

Unas imágenes trabajando :

DB_Extractor :

IMG extractor :

El archivo “Exif” que importamos en el metaimg_extractor podemos encontrarlo en el proyecto de grampus en bitbucket

PD : El Forense podría llegar a hacerse en mayor profundidad, en este caso solo tratamos los datos que podrían ser más relevantes como conversaciones, envio de archivos y el análisis de los metadatos de las imágenes.

En fin, esto es todo, el script os automatizará todo el trabajo “duro”

Saludos !! , Sanko.

Leer artículo original: Forense automatizado a un whatsapp

Tutorial de PHP Object Injection

Buenas, este es mi primer articulo desde que me uní al Team hace algunos meses.

Para lo que no me conocen, mi nick es Yoyahack – ~Yoya~. Desde hace algunos años me dedico a la programación  iniciándome por Perl, luego dedicándome a PHP cerca de 2 años y de momento como programador Java. En el próximo mes comienzo a trabajar como programador de Java EE (Java Enterprise Edition). También me gusta la seguridad nivel web, como a @TheXC3LL jejeje 😛

¿Que es PHP Object Injection?

PHP Object Injection, es una vulnerabilidad que consiste en insertar un objeto serializado, que luego al convertir este en su estado original (utilizando unserialize()), se ejecuta el objeto serializado que le pasamos a la aplicacion
Pero para que se de la vulnerabilidad, debe cumplir con estos requisitos.
  • Que la clase a la que pertenece el objeto, este incluida, de lo contrario daría un error, porque se estaria instanciando una clase que no existe.
  • Que la clase que instancia el objeto, contenga un método que se lancen automáticamente al hacer la instancia de la clase. Métodos como el constructor, destructor, etc… Y que dentro esos métodos  se encuentre el código vulnerable.
  • Que los Atributos de la clase que se instancia, sean utilizadas en los métodos que se ejecutan automáticamente (llamados Metodos Magicos).

¿Porque se produce la vulnerabilidad?

La vulnerabilidad se produce, porque no se ha limpiado el valor que se le pasara a la función unserialize(). Cuando me refiero a limpiar, es verificar (o limpiar) que el valor este limpio de código que pueda alterar el funcionamiento.

Información adicional:

  • La serializacion de  un objeto, consiste convertir un objeto a una cadena de texto (String), esta cadena contiene una representación de la clase y sus propiedades.
  • Métodos Mágicos, son métodos que se lanzan automáticamente, como el constructor.
  • Un Objeto, es una instancia de una clase
  • Los Atributos de un objeto o variables miembros, son variables  que pertenecen a la clase y por lo tanto se pueden usar en toda la clase.

Algo a tener muy en cuenta, como pasa en toda vulnerabilidad. Para explotar una vulnerabilidad, es necesario que el sistema reciba y utilice información mandada por el usuario. Ya sea via GET, POST, utilizando una COOKIE, utilizando el User Agent, etc…

Llevando todo a la practica

Bueno, aquí un ejemplo de un código vulnerable:
  1. <?php
  2. class EjemploDePHPObjectInyection {
  3.         public $comando=null;
  4.         public function __destruct() {
  5.                 system($this->comando);
  6.         }
  7. }
  8. $ejemplo = unserialize($_GET[‘cod’]);
  9. ?>

    En este caso, el código cumple con todo los requerimientos. La clase que se va a instanciar esta incluida en el archivo, la clase contiene un método que se lanza automáticamente, y contiene un atributo que se utiliza en el método que se lanza automáticamente.

    Para explotar la clase, lo que haremos mandar vía GET un objeto de la clase EjemploDePHPObjectInyection   
    serializado pero le seteamos un valor al atributo comando, que en mi caso seria un uname -a. En este caso utilizaremos el parámetro cod.

    Petición GET:  http://127.0.0.1/pruebas/objectInjection.php?cod=O:27:”EjemploDePHPObjectInyection”:1:{s:7:”comando”;s:8:”uname -a”;}

    Salida:

    Linux 127.0.0.1 Fedora 3.8.11-200.fc18.x86_64 #1 SMP Wed May 1 19:44:27 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 

    Y listo, ya puedo ejecutar comando del sistema jejeje.

    Dependiendo el contexto donde se de esta vulnerabilidad, puede dar cabida otras vulnerabilidades como SQL Inyeccion, Inyección de código PHP,  PHP command execution, etc…

    Hace menos de un mes, publicaron que Joomla era vulnerable a PHP Object Injection. Pueden probar explotarla, yo lo hize, me costo un poco ya que tuve que leerme algunos archivos php de joomla, es un poco complicado pero es una buena experiencia.

    Link

    Saludos!

    Leer artículo original: Tutorial de PHP Object Injection

    Cambios en el blog

    ¡Saludos!

      Como habreis notado hemos hecho algunas modificaciones en el blog. La más obvia de todas es que hemos cambiado la plantilla. Nos hemos decantado por una más sencilla y clara, para que sea más ligera de leer. El negro y azul pasaron a la historia… aunque guardo un back up por si nos da la nostalgia en algún momento ;).

       También hemos añadido un widget para que os sea más fácil compartir los pots en las redes sociales. Esto último también se lo habíamos añadido a la anterior plantilla, pero al parecer los botones quedaban bloqueados por add ons como AddBlock y NoScript. Hemos elegido unos botones “discretos” que vayan más acorde con el diseño actual del blog. Esperemos que los de @HackHispano estén contentos, y dejen de mandarles DM bombas por twitter a @Aetsu .

      Hay más cosas que tenemos que hacer, como lo de subir de una maldita vez todo a GitHub, o terminar los posts que tengo abiertos y que prometí  publicar. No os preocupeis, que llegará a hacerse 😉

    Byt3z

    PD: muy probablemente esté por Madrid a principios de Junio, después de examenes. Tenía pensado montar un TapasCON (cerveza) peor chiste de la historia asi que estad atentos al blog y a Twitter para ver en qué queda la cosa.

    Leer artículo original: Cambios en el blog