关于栈溢出漏洞的一个小疑问??

刚刚做了Jarvis OJ上的两道题,一个是基础的level0,一个是tell me something .
这两个都是基本的栈溢出的题都只开了NX保护。
level0:
主函数返回到这个function
在这里插入图片描述
还有一个callsystem函数
在这里插入图片描述
这题思路就很明显了利用栈溢出执行/bin/sh语句

tell me something:
主函数中直接有一个栈溢出漏洞和上一个leve0的漏洞是一样的。
在这里插入图片描述但这个没有直接给出system函数,而是一个good_game 函数:
在这里插入图片描述很明显主函数中没有调用这个可以get flag 的函数 所以这一题思路就是利用栈溢出将主函数的返回地址改为good_game 函数的地址使得程序可以执行该函数从而get flag.
但是当我计算偏移量时对比了这两个题,发现
tell me something :
tell me something 的level0:
在这里插入图片描述
tell me something 的溢出需要将其覆盖到$ebp的地址就是‘a’*0x88+ p64(good_game_addr)
而level0的则需要将其的ret地址覆盖掉即’a’*0x80 + ‘b’*0x8 + p64(bin_addr)
这是为什么?
为什么在level0中不能将其ret改成/bin/sh的地址然后让其执行/bin/sh的命令。
后来想了想,首先如果改成/bin/sh的地址指针指向了/bin/sh然后呢?
不是你说它能执行就执行的需要它有执行的能力啊,其次/bin/sh的地址成了返回地址那它不就没用了吗?
这仅是小白的拙见,有不对的地方欢迎大佬们来指正。

发布了14 篇原创文章 · 获赞 6 · 访问量 2434

猜你喜欢

转载自blog.csdn.net/qq_43409582/article/details/100746754