debugging – GDB encuentra resultados extraños en la cadena

Pregunta:

Estoy jugando con gdb y suceden cosas extrañas. Quería encontrar alguna dirección en la memoria donde se encuentra la cadena "/ bin / sh", y gdb dice que la encontró. Pero cuando examino la memoria allí, la cadena es totalmente diferente.

¿Puede ayudarme a averiguar qué significa este comportamiento y cómo puedo encontrar realmente la dirección de la cadena?

(gdb) find 0xb7ecffb0,+999999, "/bin/sh"
0xb7fba23f
1 pattern found.
(gdb) x/s 0xb7fba23f
0xb7fba23f:  "KIND in __gen_tempname\""

Respuesta:

GDB no pudo encontrar cadenas reales la mayor parte del tiempo. Pero puede encontrar el desplazamiento de la cadena del archivo de objeto local y ajustarlo con información de carga dinámica.

Desde el info proc map :

Mapped address spaces:

Start Addr   End Addr       Size     Offset objfile
 0x8048000  0x8049000     0x1000          0        /opt/protostar/bin/stack6
 0x8049000  0x804a000     0x1000          0        /opt/protostar/bin/stack6
 0x804a000  0x806b000    0x21000          0           [heap]
0xb7e96000 0xb7e97000     0x1000          0        
0xb7e97000 0xb7fd5000   0x13e000          0         /lib/libc-2.11.2.so
0xb7fd5000 0xb7fd6000     0x1000   0x13e000         /lib/libc-2.11.2.so
0xb7fd6000 0xb7fd8000     0x2000   0x13e000         /lib/libc-2.11.2.so
0xb7fd8000 0xb7fd9000     0x1000   0x140000         /lib/libc-2.11.2.so
                                      ...   

Y desde el archivo /lib/libc-2.11.2.so :

user@protostar:/opt/protostar/bin$ xxd -u /lib/libc-2.11.2.so |grep -B 1 bin/sh
011f3b0: 6600 696E 6974 7900 6E61 6E00 2D63 002F  f.inity.nan.-c./
011f3c0: 6269 6E2F 7368 0065 7869 7420 3000 6361  bin/sh.exit 0.ca

Utilice esta información para encontrar la dirección estática de la cadena /bin/sh en el espacio de direcciones virtuales:

(gdb) x/s 0xb7e97000+0x011f3bf
0xb7fb63bf:  "/bin/sh"

Sé que esta no es una respuesta a su primera pregunta sobre por qué GDB find muestra este comportamiento al buscar cadenas. No pude encontrar nada sobre eso. Usé el entorno binario de desafío Protostar Stack6 y el entorno exploit-exercise-protostar-2.iso, por lo que las direcciones deben ser las mismas. También hay una cadena /bin/csh en el mismo archivo de objeto compartido. Puede intentar encontrar esa dirección con este método.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım