通过溢出canary的00字节,泄露出一些东西,然后第二次就直接溢出获得shell了,有system,有bin/sh,,有canary
远端的环境是咋样的,就还是有点奇怪,说一下问题: 远程能通,本地的话是会报错,调试了发现是system函数的问题,直接将返回地址设置为system就会出问题。 解决方法: 将payload的system的地址替换为 call system的地址。例如hint函数里的call _system (0x40080C) 然后本地也能通。 但是为什么直接system会出问题还不清楚
可能是你那个版本的system函数里面有检测栈对齐的代码,导致栈空间变化从而导致程序运行出错,你可以返回两次ret指令在返回到system,看看会不会报错
@main1o 不行奥,但是能打通就好(手动滑稽)
这个什么原因啊,试了一下也是,改成call _system的地址就打得通,jmp _system的就不可以,老哥你解决了没
学习Canary绕过很好的题目
学到了,学到了。多谢。
问问师傅们,这题wp里面的rid是什么呀,我在ida里面找不到这个玩意儿,萌新求助。。。。
rdi是一个寄存器,x64中经常使用rdi优先传参。
你说的是rdi寄存器吧,里面是函数调用时的第1个参数
为什么远程可以通,但是本地不通呢?
我是弱鸡问一下,,,为什么远程可以通,但是本地不通呢?
canary 是不是要通过read下面的print泄露出来,然后进行exp?
大佬们,canary的偏移位置怎么算啊
就在 rbp - 8 处
flag{e270d0006de4411s6d5a73bcd}