本地缓冲区溢出分析

Posted LyShark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本地缓冲区溢出分析相关的知识,希望对你有一定的参考价值。

栈溢出是缓冲区溢出中最为常见的一种攻击手法,其原理是,程序在运行时栈地址是由操作系统来负责维护的,在我们调用函数时,程序会将当前函数的下一条指令的地址压入栈中,而函数执行完毕后,则会通过ret指令从栈地址中弹出压入的返回地址,并将返回地址重新装载到EIP指令指针寄存器中,从而继续运行,然而将这种控制程序执行流程的地址保存到栈中,必然会给栈溢出攻击带来可行性。

前面的笔记《缓冲区溢出与攻防博弈》中已经具体的介绍了缓冲区溢出的基本知识,也了解到了攻防双方技术的博弈过程,本次我们将来看几个简单的本地溢出案例,本次测试环境为Windows10系统+VS 2013编译器,该编译器默认开启GS保护,在下方的实验中需要手动将其关闭。

C语言中通常会提供给我们标准的函数库,这些标准函数如果使用不当则会造成意想不到的后果,如果被黑客利用轻者本地提权重则入侵整个系统,这也是为什么说C语言难学的原因啦,下方函数应该注意使用。

strcpy()                      vfscanf()
strcat()                     vsprintf()
sprintf()                    vscanf()
scanf()                    vsscanf()
sscanf()                  streadd()
fscanf()                   strecpy()

简单的缓冲区溢出

如下案例,就是利用了 strcpy() 函数对字符串边界检测不严格而造成的,如下代码编译。

#include <stdio.h>
#include <string.h>

void jumps(){
    __asm{
        jmp ebp;
    }
}
void geting(char *temp){

    char name[10];
    strcpy(name, temp);
    printf("%s \n", name);
}

int main(int argc,char *argv[])
{
    geting(argv[1]);
    return 0;
}

整数型缓冲区溢出

以上是关于本地缓冲区溢出分析的主要内容,如果未能解决你的问题,请参考以下文章

本地缓冲区溢出分析

20179223《Linux内核原理与分析》第十一周学习笔记

随笔之提取Shellcode简单利用本地缓冲区溢出

缓冲区溢出漏洞实验

什么是本地提权漏洞和远程代码执行漏洞?

20165315 缓冲区溢出漏洞实验