码迷,mamicode.com
首页 > 其他好文 > 详细

本地缓冲区溢出分析

时间:2019-08-30 14:01:22      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:class   字符   本地   bash   利用   地址   sprint   实验   print   

栈溢出是缓冲区溢出中最为常见的一种攻击手法,其原理是,程序在运行时栈地址是由操作系统来负责维护的,在我们调用函数时,程序会将当前函数的下一条指令的地址压入栈中,而函数执行完毕后,则会通过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;
}

整数型缓冲区溢出

本地缓冲区溢出分析

标签:class   字符   本地   bash   利用   地址   sprint   实验   print   

原文地址:https://www.cnblogs.com/LyShark/p/11434201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!