ret libc, como elimino los ceros?

  • 8 Respuestas
  • 478 Vistas

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

Desconectado proxy_lainux

  • *
  • Underc0der
  • Mensajes: 126
  • Actividad:
    13.33%
  • Reputación 0
  • belial grimoire
    • Ver Perfil

ret libc, como elimino los ceros?

  • en: Febrero 20, 2020, 07:59:23 pm
Hola

Estaba haciendo un ejercicio sobre como hacer un exploit con return libc, pero me surgio un problema con una address, al hacer el clásico overflow, puedo conseguir un sigtrap sin problemas, pero en un tutorial que revise, menciona que hay que sacar system y la address de /bin/sh, de eso no hay problema pero resulta que la address de system contiene '00', y se reemplaza con el hex de la siguiente instruccion y me crea un error de segmentación.

system 0xf7b2c700

cuando lo coloco en python... (para esto utilizo el import struct ("I", address), solo lo coloco así para simplificar)

buff = "A"*81
buff += 0xf7b2c700
buff += "A"*4
buff += 0xf7f54f48

buff = "A"*81
buff += 0xf7b2c700
buff += 0xf7f54f48

y cuando reviso en gdb que está pasando, me aparece 0xf7b2c741 o 0xf7b2c748... lo que creo o me imagino que pasa, es que cambia la address por esos ceros de la address de system y por eso no se ejecuta ,así que me gustaría saber... ¿de qué manera podría dejar esos ceros intactos usando python - 0xf7b2c700?

saludos

Desconectado Erroneo0

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    13.33%
  • Reputación 0
  • Skype: no
    • Ver Perfil

Re:ret libc, como elimino los ceros?

  • en: Febrero 20, 2020, 09:14:37 pm
Prueba coesto buff += "\0xf7\0xb2\0xc7\0x00", aunque vas a tener problemas por que python termina las strings igual que C.
Por otro lado ¿ no deberias poner el address en little endian?.

Desconectado proxy_lainux

  • *
  • Underc0der
  • Mensajes: 126
  • Actividad:
    13.33%
  • Reputación 0
  • belial grimoire
    • Ver Perfil

Re:ret libc, como elimino los ceros?

  • en: Febrero 20, 2020, 09:43:21 pm
Hola

gracias, pero ese no es el problema.... para lo que mencionas utilizo el struct de python

me refiero a que a esa address que contiene cero '\x00', creo me lo toma como un null y no puedo conseguir la shell, ya que otros ejemplos tienen algo así "0xf7b2c760"... y eso más la libc de /bin /sh, hace que te de una shell

0xf7f54f48 + 0xf7b2c760 = shell

pero yo obtuve un cero que creo lo reconoce como un null, entonces queda algo así

0xf7f54f48 + 0xf7b2c700
0xf7f54f + 0xf7b2c748 ---> entonces queda la address que mal, no se si lo noten, pero el null es reemplazado por el numero continuo e incluso en gdb me sale esto

/bin/bash: aviso: sustitución de orden: se ignora byte nulo en la entrada

 



Desconectado Erroneo0

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    13.33%
  • Reputación 0
  • Skype: no
    • Ver Perfil

Re:ret libc, como elimino los ceros?

  • en: Febrero 20, 2020, 10:09:35 pm
    Del codigo que posteaste no veo donde usas el struct. No se que es pero encotre esto https://docs.python.org/2/library/struct.html y https://rico-schmidt.name/pymotw-3/struct/.
    En efecto python termina las string con un byte nulo "\x00".
buff = "A"*81
buff += 0xf7b2c700
buff += "A"*4
buff += 0xf7f54f48

buff = "A"*81
buff += 0xf7b2c700
buff += 0xf7f54f48

y cuando reviso en gdb que está pasando, me aparece 0xf7b2c741 o 0xf7b2c748... lo que creo o me imagino que pasa, es que cambia la address por esos ceros de la address de system y por eso no se ejecuta ,así que me gustaría saber... ¿de qué manera podría dejar esos ceros intactos usando python - 0xf7b2c700?

Respecto a 0xf7b2c741 o 0xf7b2c748 me parece que esta concatenando las A al final del addres... donde esta el 00.

El como dejar esos ceros intactos... depende del programa, no se si puedes escribir 2 veces en la pila, sumar, o alguna operacion divertida.
¿que version de python usas?

Desconectado proxy_lainux

  • *
  • Underc0der
  • Mensajes: 126
  • Actividad:
    13.33%
  • Reputación 0
  • belial grimoire
    • Ver Perfil

Re:ret libc, como elimino los ceros?

  • en: Febrero 20, 2020, 10:24:04 pm
uso python 2.7

Código: Python
  1. #!/usr/bin/python
  2.  
  3. import struct
  4.  
  5. buff = "A"*81
  6. buff += struct.pack("I", 0xf7b2c700) <-- system
  7. buff += struct.pack("I", 0xf7f54f48) <--- /bin/sh
  8.  
  9. print buff

guardo el resultado en un archivo temporal... python file.py > tmp

y en gdb hago las pruebas... r $(cat  tmp)

De esa manera lo hago, y como mencioné, puedo hacer el sigtrap sin problemas haciendolo de forma normal, pero de esta forma con libc, creo que el null es lo que me está perjudicando

Conectado animanegra

  • *
  • Colaborador
  • *
  • Mensajes: 226
  • Actividad:
    53.33%
  • Reputación 8
    • Ver Perfil

Re:ret libc, como elimino los ceros?

  • en: Febrero 21, 2020, 06:37:17 am
Los ceros no los puedes poner. Y algun caracter mas que rompa cademas.(si tienes ina funcion de tipo sprintf o sscanf).  Si tienes una direccion que termina en cero ponle 0x01 y saltas a la direccion siguiente de la funcion. A nivel de maquina joderas la pila pero la funcion se ejecutara. Si los ceros estan en los bytes altos. No los pongas y reza para que los bytes que hay despues de tu buffer sean ceros. Si estan en posiciones intermedias es mas jodido. Puedes tambien buscar saltos a otros sitios sin ceros que tengan como instruccion un salto a la direccion que quieres o porciones de codigo que cambien el byte que deseas en el ensamblador y despues saltar a la funcion.


Lo siento, no contesto dudas por MP, si tienes dudas las planteas en el foro para que se aproveche toda la comunidad.

42

Desconectado proxy_lainux

  • *
  • Underc0der
  • Mensajes: 126
  • Actividad:
    13.33%
  • Reputación 0
  • belial grimoire
    • Ver Perfil

Re:ret libc, como elimino los ceros?

  • en: Febrero 22, 2020, 12:13:18 am
hola

los ceros no los pongo, así se establece ya... cuando hago un print en system

Código: [Seleccionar]
print system
$3 = {<text variable, no debug info>} 0xf7b2c700<system>
Código: [Seleccionar]
Esto es de /bin/sh <--> 0xf7f54f48
y cuando los coloco, esos ceros cambian... en otras palabras la address de system no busca 0xf7b2c700, sino que busca 0xf7b2c748 <---- aqui donde me imagino que es el error, porque debería ir a 0xf7b2c700, pero cambian esos ceros por el 48 de la direccion de /bin/sh (0xf7f54f48 <---)...

voy a dejar un video de youtube donde esta mejor explicado


yo seguí un ejemplo de exploitdb, pero igual es la misma idea

Conectado animanegra

  • *
  • Colaborador
  • *
  • Mensajes: 226
  • Actividad:
    53.33%
  • Reputación 8
    • Ver Perfil

Re:ret libc, como elimino los ceros?

  • en: Febrero 22, 2020, 02:32:01 am
Ceros malos:
0x7f466500

Estan al principio de la direccion. En el buffer metes AAAAAAAAAAAAA y la direccion al reves 00 50 66 f4 07

Ceros asumibles:
0x00004567

Estan al final de la direccikn. Bit mas significativo. Metes la direccion al reves que queda 67 45 y ahi en lugar de poner ceros no pones nada. Si la memoria esta seteada. Cuando lees ese entero a partir del 45 el numero sera 0x00004567 porque las bytes que siguen a los que has puesto a posta en el buffer no se han tocado. Y como estanseteados estan a cero por defecto.

Puede ser que estes metiendo la direccion al reves?? Para la memoria meterla al reves eseterla en el orden de lectura humano.


Lo siento, no contesto dudas por MP, si tienes dudas las planteas en el foro para que se aproveche toda la comunidad.

42

Desconectado Erroneo0

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    13.33%
  • Reputación 0
  • Skype: no
    • Ver Perfil

Re:ret libc, como elimino los ceros?

  • en: Febrero 22, 2020, 06:58:40 pm
Gracias por la version de python.
La entrada que se hace al programa es 'AAAAAAAAAA\x00\xc7\xb2\xf7'. Pero no podes poner esos ceros en la cadena por mas que esa sea la direccion de la funcion system() ,deberias buscar otra direccion de memoria para saltar con el 'ret' y poder ejecutar "/bin/sh".

 

Como subir un proyecto de angular dos a angular?

Iniciado por Dani54

Respuestas: 1
Vistas: 1999
Último mensaje Diciembre 21, 2018, 06:09:49 pm
por noxonsoftwares
¿Como fundear un "exe"? dejarle sin avs

Iniciado por iquitoshack

Respuestas: 5
Vistas: 5405
Último mensaje Junio 07, 2012, 02:52:34 pm
por Sanko
[SOLUCIONADO] como usar en end = " ". En Python

Iniciado por oswil

Respuestas: 2
Vistas: 841
Último mensaje Octubre 06, 2019, 08:53:11 pm
por oswil
Usar memoria externa como memoria interna.

Iniciado por CthulhuRise97

Respuestas: 4
Vistas: 5093
Último mensaje Abril 30, 2018, 05:35:43 pm
por NERV0
Cómo poder generar más "me gusta" en una web

Iniciado por the-george1006

Respuestas: 4
Vistas: 352
Último mensaje Marzo 09, 2020, 07:56:22 am
por animanegra