Archive

Archive for August, 2009

Nueva Vulnerabilidad en Joomla 1.5.xx

August 22nd, 2009 No comments

Hola a todos, gracias a un reverser amigo, Profesor_X, que ha descubierto este 0day, hoy estamos publicándolo, antes que nadie.

Les dejo la información, que aparentemente es muy vital para poder obtener datos relevantes de un sitio construido con Joomla.

Los dos tipos de vulnerabilidades encontradas fueron:

  • Full Path Disclosure
  • Session Malformed Poisoning

Para poder ver como funciona el bug, podemos mirar el video aquí.

Pueden ver el Poc desde aquí (renombrar a .RAR).

convert this post to pdf.

Crackeando un componente para Delphi

August 11th, 2009 No comments

Hola a todos, estoy nuevamente para mostrarles lo sencillo que puede ser crackear un componente para el entorno de desarrollo Delphi.

Las otras noches, nos juntamos en la casa de un amigo a comer unos canelones, después de comer, charlar y reirnos un rato, sacamos nuestras notebooks… fue ahí cuando me dije, ¿porque no crackear estas compos que hacen muy lindas interfaces a nuestras aplicaciones delphi?

No diré el nombre de estas componentes, ya que obviamente son pagas, sino no sería necesario crackearlas , no? xD

Pero sí daré una pista, empiezan con estas dos letras VGS y las que le siguen, sin espacios son 4 letras, muy conocida palabra en el “ambiente” en el que nos solemos mover. :) a alguien le gusta la demoscene? xD

Bien, no doy mas pistas, si no lo han agarrado dedíquense a otra cosa… xD

La protección es muy, pero muy sencilla, pero molesta, como todas. :)

Una pequeña NAG Screen, cuando se instala el componente en Delphi, aparecerá, si arrancamos el entorno, aparecerá, porque Delphi carga todas sus librerías al comienzo… si compilamos un proyecto de ejemplo que viene en el paquete, saldrá el NAG de nuevo, y obviamente si corremos el EXE generado aparte, también… en algún lugar más? xD

Lo que haremos serán dos parcheos simples y no aparecerán nunca más en ningún lado, solo con parchear un fichero. Hay que ir a la fuente, delphi compila y reconvierte todo a varios formatos para que todo en “su mundo” salga bien.

Podemos rompernos la cabeza parcheando 3 o 4 archivos, o 1 solo simplemente. :)

De que se trata todo esto

Bueno, como ya expliqué es un simple NAG molesto, las demás funcionalidades parecen completas, así que les mostraré el mensajito:

nagd1

Bien, como les dije, este cartelito, todas las veces que les comenté aparece, ahora vamos a sacarnóslo de encima :)

Si miramos la carpeta de los componentes estos, veremos que tenemos la carpeta packages, dentro hay archivos con estas extensiones dpk, dcu, res, bpl y dcp.

Los DPK son Delphi Package, los DCU son Delphi Compiled Unit, los BPL son Borland Package Library y los DCP son Delphi Component Package.

Cuando abrimos un DPK, compilamos e intalamos, éste contiene las DCU compiladas, y la DPK utilizada se guardara en la carpeta de proyectos de Borland.

Con esto quiero decir, que si crackeamos lo que genera un DPK que es un BPL, no lo crackearemos del todo… ;)

Miremos primero lo más facil.

Donde atacar

Si compilamos un ejemplo y lo abrimos con el IDA, buscaremos una parte del string del NAG, por ej, “trial”.

Encontraremos la parte de código como la siguiente:

CODE:004F4704                 mov     eax, offset _str_This_applicatio.Text
CODE:004F4709                 call    unknown_libname_164 ; BDS 2005-2006 and Delphi6-7 Visual Component Library
CODE:004F4704                 mov     eax, offset _str_This_applicatio.Text
CODE:004F4709                 call    unknown_libname_164 ; BDS 2005-2006 and Delphi6-7 Visual Component Library
Podemos parchear este CALL pero no es recomendable..
CODE:0050BED0                 mov     eax, offset _str_Resources.Text

CODE:0050BED5                 call    sub_4F7E78

CODE:0050BEDA                 call    nullsub_13

Ok, entonces, podemos parchear el segundo CALL. :)

Si miramos el código en hexa, será el siguiente: E8 C1 87 FE FF deberíamos NOPearlo, y listo, lo tenemos arreglado. :)

Pero!, siempre hay un pero, no nos conviene parchear cada EXE que compilamos, o si? :) sería muy tedioso, deberíamos correr el parche por cada ejemplo o aplicación que utilice estas librerías, entonces deberíamos parchear la fuente, donde se genera la cuestión, no creen?…

Buscando la fuente

Ok, busquemos lo mismo en el BPL que si lo abrimos es un PE armado por Delphi. En cambio no podremos hacerlo con un DPC.

Encontramos esto:

CODE:004560C1                 call    @Vg_scene@RegisterVGObjects$qqrx17System@AnsiStringpxpx17System@TMetaClassxi ; Vg_scene::RegisterVGObjects(System::AnsiString,System::TMetaClass **,int)

CODE:004560C6                 call    @Vg_version@ShowVersion2$qqrv ; Vg_version::ShowVersion2(void)

Con esto lograremos que Delphi 7 no sea interrumpido por la molesta NAG, pero al compilar los ejemplos, y al ejecutarlos saldrá nuestro NAG… :)

Entonces, donde está la magia de esto? nos queda una de las extensiones que expliqué antes: DCU.

Las DCU NO son PE’s así que tendremos que ver como los “atacamos”, la mejor idea creo que es con DEDE. :)

Mirando en la carpeta fuera de packages, vemos tooodos los DCU,  así que encontraremos uno de ellos que es vg_version.dcu

Podemos abrir el DEDE y hacer lo siguiente:

dede

Como vemos, abrimos DEDE, y en el menú dumpers, podemos elegir la opcion Dumpeador de DCU. Si hacemos click en esa opción se abrirá la siguiente pantalla, donde elegimos el archivo vg_version.dcu y hacemos click en procesar.

Obtendremos lo siguiente:

dcudumper

Obtendremos el código de nuestra DCU, entonces ahí veremos lo siguiente:

procedure ShowVersion2;

const

  AboutText = 

    000: ÿÿÿÿP...This app|FF FF FF FF 50 01 00 00 54 68 69 73 20 61 70 70|

    010: lication uses a |6C 69 63 61 74 69 6F 6E 20 75 73 65 73 20 61 20|

    020: trial version of|74 72 69 61 6C 20 76 65 72 73 69 6F 6E 20 6F 66|

    030:  VGScene.....Ple|20 56 47 53 63 65 6E 65 2E 0D 0A 0D 0A 50 6C 65|

    040: ase contact the |61 73 65 20 63 6F 6E 74 61 63 74 20 74 68 65 20|

    050: provider of the |70 72 6F 76 69 64 65 72 20 6F 66 20 74 68 65 20|

    060: application for |61 70 70 6C 69 63 61 74 69 6F 6E 20 66 6F 72 20|

    070: a registered ver|61 20 72 65 67 69 73 74 65 72 65 64 20 76 65 72|

    080: sion.....%s..Cop|73 69 6F 6E 2E 0D 0A 0D 0A 25 73 0D 0A 43 6F 70|

    090: yright (C) 1998-|79 72 69 67 68 74 20 28 43 29 20 31 39 39 38 2D|

    0A0: 2009 by Eugene K|32 30 30 39 20 62 79 20 45 75 67 65 6E 65 20 4B|

    0B0: ryukov....For co|72 79 75 6B 6F 76 0D 0A 0D 0A 46 6F 72 20 63 6F|

    0C0: nditions of dist|6E 64 69 74 69 6F 6E 73 20 6F 66 20 64 69 73 74|

    0D0: ribution and use|72 69 62 75 74 69 6F 6E 20 61 6E 64 20 75 73 65|

    0E0: , see LICENSE.TX|2C 20 73 65 65 20 4C 49 43 45 4E 53 45 2E 54 58|

    0F0: T.....Visit our |54 2E 0D 0A 0D 0A 56 69 73 69 74 20 6F 75 72 20|

    100: web site for the|77 65 62 20 73 69 74 65 20 66 6F 72 20 74 68 65|

    110:  latest versions|20 6C 61 74 65 73 74 20 76 65 72 73 69 6F 6E 73|

    120:  of VGScene:....|20 6F 66 20 56 47 53 63 65 6E 65 3A 0D 0A 0D 0A|

    130: http://www.ksdev|68 74 74 70 3A 2F 2F 77 77 77 2E 6B 73 64 65 76|

    140: .com/..support@k|2E 63 6F 6D 2F 0D 0A 73 75 70 70 6F 72 74 40 6B|

    150: sdev.com.       |73 64 65 76 2E 63 6F 6D 00|;

var

Aquí vemos que está el mensaje de nuestra NAG, tenemos nuestro objetivo en la mira. :)

Como veremos, tenemos 2 procedimientos ShowVersion y ShowVersion2.

Lo que haremos será sencillo, en vez de parchear DENTRO, parchearemos solamente y PUSH EBP:

begin

   00000000 : 55                            PUSH EBP

   00000001 : 8B EC                         MOV EBP,ESP

   00000003 : 83 C4 F4                      ADD ESP,-12

   00000006 : 53                            PUSH EBX

   00000007 : 56                            PUSH ESI

   00000008 : 33 C0                         XOR EAX,EAX

   0000000A : 89 45 FC                      MOV DWORD PTR [EBP-4],EAX

   0000000D : 33 C0                         XOR EAX,EAX

   0000000F : 55                            PUSH EBP

   00000010 : 68(95 00 00 00                PUSH ShowVersion2{0x26}+149

Justamente el PUSH EBP, podemos cambiarlo por un RETN, entonces no entrará directamente a nuestra función, es decir, entrará y luego se irá y no habrá pasado nada. :)

Entonces tendremos que cambiar el 55 que es el código de operación del PUSH EBP, por un RETN que es un C3.

Parcheando

La pregunta que tendremos inmediatamente, es ¿cómo podemos interceptar ese PUSH EBP, en realidad los dos por las dudas…?

Lo mejor, es buscar el patrón de bytes, así nos aseguraremos que estamos en el lugar indicado.. ;)

El patrón que utilicé yo para buscar en ShowVersion2 es: 55 8B EC 83 C4 F4, será el mismo en ShowVersion, ya que es la “cabecera” de la función, y siempre es igual, idéntica.

Así que cambiaremos el 55 por un C3, y san se acabó la maldita NAG. ;)

Conclusión

No hay mucho más que decir, son buenos componentes, si los utilizarán con fines lucrativos, cómprenlos, pero la forma en que está protegido esto, es… deplorable. :P

Luego podremos recompilar nuestro DPK y reemplazar los nuevos por los viejos, la NAG no aparecerá nunca más ni en Delphi, ni en ningún lado.

Espero que les haya gustado.

Nos vemos en la próxima.

convert this post to pdf.

De proxy en proxy y navego porque me toca

August 5th, 2009 1 comment
Título: De proxy en proxy y navego porque me toca
Autor: DDiego (ddiegoATdisidents.org)
Temática: Redes
Plataforma: Linux/Windows
Fecha: 14/06/2009
Licencia: Este documento es propiedad de Disidents, su distribución/modificación siempre esta limitada a la autorización explicita del autor o de la organización. En general siempre que no se modifique el contenido ni se elimine esta cabecera la distribución esta autorizada, salvo que Disidents o el autor indiquen lo contrario.
Introducción.
En el siguiente documento veremos como saltarnos un proxy que habremos configurado primero, haciendo tunneling dinámico.  También veremos como intentar evitarlo desde el punto del vista del administrador.
Configurando nuestro proxy “squid”.
Voy a explicar como configurar de forma básica, este servidor proxy lo usaremos para hacer  pruebas. El sistema donde estara hospedado el proxy en este caso sera un vector linux http://vectorlinux.com/ , os podeis bajar el proxy de http://www.squid-cache.org squid, podeís seguir el documento de instalación que viene incluido en el paquete, una vez instalado pasamos directamente  a la configuración.

culto

Autor: DDiego (ddiegoATdisidents.org)

Temática: Redes

Plataforma: Linux/Windows

Fecha: 14/06/2009

Licencia: Este documento es propiedad de Disidents, su distribución/modificación siempre esta limitada a la autorización explicita del autor o de la organización. En general siempre que no se modifique el contenido ni se elimine esta cabecera la distribución esta autorizada, salvo que Disidents o el autor indiquen lo contrario.

Introducción.

En el siguiente documento veremos como saltarnos un proxy que habremos configurado primero, haciendo tunneling dinámico.  También veremos como intentar evitarlo desde el punto del vista del administrador.

Configurando nuestro proxy “squid”.

Voy a explicar como configurar de forma básica, este servidor proxy lo usaremos para hacer  pruebas. El sistema donde estara hospedado el proxy en este caso sera un vector linux http://vectorlinux.com/ , os podeis bajar el proxy de http://www.squid-cache.org squid, podeís seguir el documento de instalación que viene incluido en el paquete, una vez instalado pasamos directamente  a la configuración.

Editamos / usr / local / squid / etc / squid.conf

y modificamos o creamos las siguientes lineas

http_port 8080

cache_mem 8 MB

cache_dir ufs /var/spool/squid 100 16 256 #tamaño que deseamos uqe tenga la cache

# “ufs” is the old well-known Squid storage format that has #always been there.

# 100 megas el numero de megas reservado para la cache

# 16 es el numero de subdirectorios de primer nivel que seran #creados bajo el dentro del directorio squid, 16 por #defecto

# 256 es el numero de subdirectorios de segundo nivel que #seran creados dentro de los subdirectorios de primer #nivel

# por defecto 256

access_log /usr/local/squid/var/logs/access.log squid # Podriamos meterlos dentro de /var/log/squid # eso a gusto de cada uno

cache_log /usr/local/squid/var/logs/cache.log

cache_store_log /usr/local/squid/var/logs/store.log

#creamos acls

acl mi_lan src 192.168.16.0/24 #Permitimos solo el acceso a nuestra red:

#Si pusieramos direcciones de equipos la mascara es 32 no 24.

#restriccion de acceso a páginas y contenido

acl webprohibidas url_regex disidents google

#Insertamos nuestras reglas

http_access allow mi_lan !webprohibidas # tambien podriamos poner un http_access deny # webprohibidas

http_access allow localhost

http_access deny all

Comprueba que esten creados los directorios cache y log, con permisos para poder escribir.

# / usr / local / squid / sbin / squid -z

2009/04/27 03:12:25| Creating Swap Directories

2009/04/27 03:12:25|  / usr / local / squid / var / cache exists

2009/04/27 03:12:25|  / usr / local / squid / var / cache / 00 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 00

2009/04/27 03:12:25|  / usr / local / squid / var / cache / 01 exists

2009/04/27 03:12:25| Making directories in  / usr / local / squid / var / cache / 01

2009/04/27 03:12:25| / usr / local / squid / var / cache / 02 exists

2009/04/27 03:12:25| Making directories in  / usr / local / squid / var / cache / 02

2009/04/27 03:12:25| / usr / local / squid / var / cache / 03 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 03

2009/04/27 03:12:25| / usr / local / squid / var / cache / 04 exists

2009/04/27 03:12:2| Making directories in / usr / local / squid / var / cache / 04

2009/04/27 03:12:25| / usr / local / squid / var / cache / 05 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 05

2009/04/27 03:12:25| / usr / local / squid / var / cache / 06 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 06

2009/04/27 03:12:25| / usr / local / squid / var / cache / 07 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 07

2009/04/27 03:12:25| / usr / local / squid / var / cache / 08 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 08

2009/04/27 03:12:25| / usr / local / squid / var / cache / 09 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 09

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0A exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0A

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0B exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0B

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0C exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0C

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0D exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0D

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0E exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0E

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0F exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0F

Si queremos, autenticación necesitamos el modulo ncsa_auth, pero compruebo que no esta instalado, entonces vamos a las fuentes:

cd squid-3.0.STABLE14 / helpers / basic_auth / / CSA

# make

# make install

# ls

Makefile Makefile.in crypt_md5.h ncsa_auth* ncsa_auth.c

Makefile.am crypt_md5.c crypt_md5.o ncsa_auth.8 ncsa_auth.o

squidproxy: / / tmp / squid-3.0.STABLE14 / helpers / basic_auth / NCSA

LE14 / helpers / basic_auth / NCSA

# cp ncsa_auth / usr / sbin /

# ln -s / usr / local / squid / libexec / ncsa_auth / usr / sbin / ncsa_auth

ln: creating symbolic link ` / usr / sbin / ncsa_auth’: File exists

Creando usuarios: htpasswd viene con apache

# htpasswd -c  / usr / local / squid / etc / passwords ddiego

New password:

Re-type new password:

Adding password for user ddiego

Ahora podemos ir a squid.conf y buscar auth_param_basic o ncsa

quedaria así:

auth_param basic program / usr / local / squid / libexec / ncsa_auth  / usr / local / squid / etc / passwords

agregamos la siguiente acl:

acl mispass proxy_auth REQUIRED

y tambien debemos modificar la regla:

http_access allow mi_lan mispass !web_prohibidas

si queremos evitar bajar mp3 avi mpeg

acl nodescargas url path_regex \.mp3 \.avi \.mpeg

Restringir horarios

acl diahora time SMTWHFA 9:00-15:01

un día en concreto

acl martes time T 8:00-10:00

entonces la regla quedaria tal que asi y ademas prohibiriamos los martes:

http_access allow mi_lan mispass !web_prohibidas !martes

Podemos iniciar squid proxy:

/usr / local / squid / sbin / squid

Comprobamos que esta escuchando:

# netstat -an | grep 8080

tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN

Parte cliente.

Bueno, ya tenemos configurado el proxy, ahora solo hay que configurarlo en el navegador del cliente, vemos que puede navegar sin problema pero también vemos que al intentar acceder a algunas paginas nos sale un error parecido al siguiente:

dd1

Esto se debe a la acl que hemos puesto anteriormente en el squid:

acl webprohibidas url_regex disidents google

En el access_log de squid veremos lo siguiente:

1240825278.034 1 192.168.1.51 TCP_DENIED / 403 2119 GET http: / / www.disidents.org /  ddiego NONE / – text / html

Para saltarnos esto necesitaremos un servidor sshd en algun sitio, por ejemplo en nuestra casa, luego nos bajaremos el putty http://www.putty.org/ y lo configuraremos de la siguiente manera.

En hostname ponemos la ip o nombre de nuestro equipo sshd el puerto “22 por defecto” o el que tengamos y le pondremos un nombre, aun no le deis a aceptar ya que hay que configurar más cosas:

dd2

Ahora iremos a la seccion Proxy, es donde pondremos el servidor proxy que tenemos en nuestro navegador y el puerto, en concreto pondre el que he montado en el paso anterior:

dd3

Si el proxy requiere autenticacion, introducimos los datos en Username y Password

Ahora podemos habilitar compresión, este paso es opcional

dd4

Ahora tenemos que configurar el tunnel dinamico, pondremos en Source port 8080 y en Destination Dynamic, y luego presionamos el boton Add

dd5

Quedaria tal que así:

dd6

Ahora volveriamos a Session y presionariamos Save para guardarlo para otro momento, posteriormente presionamos Open y se nos abre una consola negra pidiendo usuario y contraseña, dejaremos esa ventana negra abierta.

dd7

Ahora vamos a nuestro navegador, a configurar nuestro proxy socks, ya sabeis Herramientas > Opciones de Internet > Conexiones > Configuración LAN > y capturaza, en este caso hay que dejar todo vacio salvo Socks, poniendo nuestra dirección local y puerto 8080

dd8

Ahora si nos dejara entrar en la página que deseamos.

dd9

En el log / usr / local / squid / var / logs / access.log del servidor veremos:

1240856427.215 251184 192.168.1.51 TCP_MISS / 200 379659 CONNECT micasa.ddiego.dsd:22 – DIRECT / micasa.ddiego.dsd -


Como evitar este tipo de conexiones, pues con más acls.

micasa.ddiego.dsd

acl adiossh port 22

http_access allow mi_lan !web_prohibidas !adiossh

Y esto vemos en el servidor.

1240859444.101 3 192.168.1.51 TCP_DENIED / 403 1746 CONNECT micasa.ddiego.dsd:22 – NONE / – text / html

Eso es todo amigos!!!, saludos..

DDiego (ddiegoATdisidents.org)

convert this post to pdf.