实验步骤:
-
首先拿到文件先看看有没有什么栈保护

因为在生成文件的时候我们就已经关掉了地址随机化,所以这里并没有什么栈保护 -
将文件拖入IDA中进行反编译,然后静态分析

这里有先写入hello world ,然后又进入了vulnerable_function函数,我们进入函数看看

我们发现用到了read函数,这里用到的是rbp定位,而它读了200个,实际rbp到ret只有(80+8)h的空间,很显然存在栈溢出漏洞,那我们下面要做的和以往一样,泄露system和bin_sh地址,然后通过ROP链getshell
- x64与x86的区别 因为64位程序的传参规则变了,所以我们的rop也要进行相应变动。
在原来的32位程序中我们会直接将目标函数的入口地址和相应的参数放在payload中,最后进行rop时,参数是根据与ebp的相对位置来进行确定的。
而在64位程序中,我们不仅要将目标函数的入口地址和相应参数放在payload中,同时还要插入一些gadget,将参数放入相应的寄存器中,从而达到传参的目的。
X64架构下的栈溢出与ROP技术解析

本文详细介绍了X64架构下利用栈溢出漏洞构造ROP链以获取shell的过程。通过分析程序,找到栈溢出点,然后利用gadget(如pop rdi ; ret)设置参数,通过相对偏移计算获取system和/bin/sh的地址,最终实现getshell。文章强调了X64与X86在传参规则上的区别,并展示了构造payload的脚本步骤。
最低0.47元/天 解锁文章
681

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



