Solución Server Vuln de harry_the_blogger

Iniciado por .:UND3R:., 19 Enero 2015, 17:31 PM

0 Miembros y 1 Visitante están viendo este tema.

dRak0

#10
Cita de: harry_the_blogger en 23 Enero 2015, 06:15 AM
Gracias a todos por sus respuestas. Pero sigo teniendo problemas. No entiendo que estoy haciendo mal.

Comprobé las direcciones de las funciones ocultas, y coinciden con las de mi máquina. No debería haber problema.

Ahora una pregunta: Esa variable $eip = pack('V', 0x7c87f30e) puedo sustituirla por la funcion oculta directamente??? ¿Como puedo obtener yo la direccion de un ROP??

Es que estoy teniendo problemas con los exploits sencillos, y entender eso de ROPs me está costando porque no tengo experiencia previa. ¿Será que puedo explotarlo sin usar ROPs??? Creo que mi sistema tiene DEP desactivado por defecto. No habría problema, verdad??? Intenté eliminar los ROPs, pero falló igual.

Podrías explicarme brevemente como encontrar eso de ROPs??? Solo por encima, yo profundizo con internet a partir de lo que me digan.

Ah, y porque para rellenar se necesitan 64 bytes, si en mi codigo es de 60??? Estaba afectando el alignment???

Gracias por su ayuda a todos. Perdon por la preguntadera. Esto de explotar es díficil, al menos en principio. Y de paso el bachillerato no me deja tiempo para practicar. XD

Que tal?
Explica que es lo que entendes que esta pasando al ejecutar el codigo de under.

¿Exploits sencillos?
Todo es sencillo cuando se sabe hacerlo.

Lo de los ROPs(Return oriented programming) , es una forma de bypassear un tipo de seguridad que consiste en que no se pueda ejecutar nada en el stack(DEP).
Te doy un ejemplo en GNU/Linux , no soy de explotar mucho en windows soy bastante nuevo en el tema , otra forma de bypassear DEP es usando otra tecnica llamada ret2libc , que basicamente es lo mismo , retornar a una libreria donde se pueda ejecutar codigo.
Si no tiene proteccion  podes sobreescribir directamente eip , y si no podes(porque esta limitado el tamaño del buffer)con tener tan solo 1 byte para sobreescribir ebp  , podes realizar off-by-one , si tenes los 4 bytes , modificar todo ebp , y otras tecnicas mas.


Quiero ayudarte(Si puedo)pero empezemos por el principio, para ver que es lo que no te cierra , donde esta tu falla , tu bug.Asi lo parcheamos.

harry_the_blogger

#11
Hola, disculpen por demorarme tanto en responder. Estoy dedicando tiempo para entender bien el código, para que no digan que uno no se esfuerza. XD.

Bueno, ahora bien. Yo antes pensaba que sólo era cuestión de insertar la direccion después de los bytes basura, pero ya veo que no. XD, O al menos no en mi máquina.

No entiendo algunas partes sobre la direccion de las funciones ocultas:


  • Por que restas un valor a la direccion??? Sólo por evitar los nulos???
  • De donde sacas ese valor que le restas??? Tengo yo que reemplazarlo y de donde lo calculo?? En mí máquina el exploit sin modificar no trabaja. E incluso prescindiendo de los ROPs tampoco lo hace
  • Como haces para que el valor restado sea revertido y pueda ejecutar las funciones??? Con los ROPs???

Ah, y una última pregunta: ¿Como hiciste para saber que el tamaño del buffer es de 64, si en mi codigo es de 60??? ¿¿¿Quiere decir que si afecta el alignment?? O es que esos bytes son de ebp???

Gracias de antemano, y disculpen por las preguntas.

Eso de ROPs me está mareando. No sé si ese será el problema. Por lo demás, como dije antes, las direcciones de las funciones ocultas coinciden con mi máquina. Estaré apoyandome con otros tutes de internet para ir profundizando.

En cuanto a PERL, ya me leí la documentacion, y entiendo mejor que hace en sí el exploit. Para que no piensen que tengo problemas con la sintaxis del lenguaje.

Bueno, a seguir echando cabeza.

Vista mi blog es enriquemesa.blogspot.com

.:UND3R:.

#12
Eso valores para restas es una especie de truco me explico, ya que strcpy termina de copiar hasta que que se encuentre un byte nulo, las direcciones que contengan byte nulos cortarán la cadena del exploit, puedes hace la prueba haciendo un desbordamiento que en vez de A (\x41) utiliza 0 y verás que no podrás explotar el fallo debido a la forma en que funciona strcpy, ahora en cuanto a lo de sumar y restar es algo que se me ocurrió para solucionar lo de los bytes nulos, te dejo la idea de como debería ser pero no se puede por los bytes nulos:

POP EAX
0x0040105E

Como vez la cadena se cortaría inmediatamente y todo lo que venga a continuación 0x00 no se copiará en el stack por lo cual tienes que inventar una forma de tener ese valor en un registro sin que hayan bytes nulos, aquí algunos ejemplos:

POP EAX
0x1151216F    ; 0x0040105E + 0x11111111

Pondrás la dirección 0x1151216F inservible para el exploit en el registro, pero ya cumpliste el objetivo de aludir los bytes nulos, ahora quedaría transformar ese valor inservible para el exploit para que tenga la dirección que necesitamos llamar es decir restar 0x11111111 a EAX (operación inversa):

SUB EAX,0x11111111

lo cual dará como resultado 0x0040105E la dirección que necesitamos ya en el los registros de propósitos general de 32 bit sin cortar el exploit.

¿Se entiende?

Si no entiendes, puedo seguir explicando, no hay problemas

EDIT:
- Para calcular el valor es una operación inversa, solo busqué un ADD r32,CONST en ollydbg y encontré una constante de 8 bytes ya que si fuese menos habría bytes nulos, entonces tomé el valor que quiero calcular y le resté la constante.

- Para saber la cantidad de bytes que provocan el desborde simplemente usas un generate pattern no sé como se dirá en español pero metasploit dispone de uno:

CitarMetasploit (version 3.0+) has a tool for both:
1) to generate the string pattern (tools/pattern_create.rb)
2) to find the offset of the required pattern (tools/pattern_offset.rb)

Pero también está en perl, muy sencillo mira:
https://securitythoughts.wordpress.com/2010/03/18/tool-unique-pattern-generator-for-exploit-development/

También está la opción comando PC length dentro del plugins mona (python) para inmunity debugger

Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

harry_the_blogger

Gracias UND3R. Estoy entendiendo eso de que lo usas para evitar los nulos, pero tengo una duda:

¿Como puedes alterar el valor de la direccion, usando una instruccion que trabaja sobre un registro aún no llenado?

No sé si estaré mal, pero veo que cuando se desborda, salta a una instruccion en un módulo (que aparentemente no coincide con mi máquina) para recuperar el valor deseado. No entiendo como eso funciona, si el valor no está precargado en ese registro con el que trabaja la instruccion.

Disculpa por las molestias. Gracias por el generate pattern en Perl, eso de descargar metasploit completo solo por esos dos scripts es algo sin sentido. Me estoy leyendo un sitio de secuirty sift para profundizar.
Vista mi blog es enriquemesa.blogspot.com

.:UND3R:.

Cita de: harry_the_blogger en 29 Enero 2015, 23:39 PM
Gracias UND3R. Estoy entendiendo eso de que lo usas para evitar los nulos, pero tengo una duda:

¿Como puedes alterar el valor de la direccion, usando una instruccion que trabaja sobre un registro aún no llenado?

No sé si estaré mal, pero veo que cuando se desborda, salta a una instruccion en un módulo (que aparentemente no coincide con mi máquina) para recuperar el valor deseado. No entiendo como eso funciona, si el valor no está precargado en ese registro con el que trabaja la instruccion.

Disculpa por las molestias. Gracias por el generate pattern en Perl, eso de descargar metasploit completo solo por esos dos scripts es algo sin sentido. Me estoy leyendo un sitio de secuirty sift para profundizar.


Los registros si se llenan, con la instrucción POP r32 se extrae de la pila una valor DWORD que en este caso es la constante a sumar o a restar al registro (dependiendo de la operación aritmética que hagas).

Para que te funcione es sencillo, debes poner un BP en la 1era cadena de ROP e ir depurando paso a paso y verás como funciona

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)