
栈溢出,有3个功能,1是登录,3是magic_copy,2是退出 ,
程序初始化了一个cookie,登录会比较cookie,退出也会比较。栈溢出,肯定得获取到cookie的值才行

登录使用strncmp,这个函数遇到0字节就会停止比较。如果是\x00和任意字符串比较都是true
这里可以逐字节爆破出cookie的值 ,login里面的buf栈地址和magic_copy的栈地址是同一个,strcpy栈溢出,strcpy遇到0才停止拷贝,在login函数把buf填到一定大小,可以泄露libc。
cookie,很容易理解把,strncmp有问题,可以爆破,
接下来是怎么泄露libc和溢出ret的地址,这2个其实是一个原理,

copy_data函数的参数是栈上地址v6,想办法把v6溢出

src[128]这个栈里面有残留的libc,位置刚好是cookie的位置,把cookie前面填满任意非0的数据,strcpy拷贝将libc覆盖了cookie,然后回到第一步爆破的操作就能获取libc了。溢出ret是一样的,
溢出ret的时候把cookie填回去就行。
打onegadget,刚好libc有一个是符合的。

1864


被折叠的 条评论
为什么被折叠?



