虚拟机环境:Ubuntu 14.04(x86)
本文是基于sploitfun系列教程的详细解析,sploitfun对于纯新手而言,其中有些东西还是不够详细,新手不能很好的接触到其中原理,故作此文进行补充


![]()
编译代码第一行,表示关闭ASLR(地址空间布局随机化)。kernel.randomize_va_space堆栈地址随机初始化,很好理解,就是在每次将程序加载到内存时,进程地址空间的堆栈起始地址都不一样,动态变化,导致猜测或找出地址来执行shellcode 变得非常困难。
编译代码第二行表示,gcc编译时,关闭DEP和栈保护。
当-f-stack-protector启用时(CANNARY栈保护),当其检测到缓冲区溢出时(例如,缓冲区溢出攻击)时会立即终止正在执行的程序,并提示其检测到缓冲区存在的溢出的问题。这是gcc编译器专门为防止缓冲区溢出而采取的保护措施,具体方法是gcc首先在缓冲区被写入之前在buf的结束地址之后返回地址之前放入随机的gs验证码,并在缓冲区写入操作结束时检验该值。通常缓冲区溢出会从低地址到高地址覆写内存,所以如果要覆写返回地址,则需要覆写该gs验证码。这样就可以通过比较写入前和写入后gs验证码的数据,判断是否产生溢

本文详细解析了sploitfun中的一个典型的基于堆栈的缓冲区溢出漏洞,介绍了如何关闭ASLR、DEP和栈保护,以及缓冲区溢出的工作原理。通过反汇编和分析代码,展示了如何覆盖返回地址以实现任意代码执行,并确定了返回地址的偏移量。文章还提到了shellcode的概念和构造,为初学者提供了深入了解缓冲区溢出漏洞的基础知识。
最低0.47元/天 解锁文章
3万+

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



