2 qq 31214517 qq_31214517 于 2016.03.26 16:59 提问

汇编语言 栈溢出攻击实验

对于实验的原理我并不太清楚,应该是吧foo函数的返回地址篡改到malice函数的入口,最后不断循环malice函数用栈帧把栈占满导致溢出呢?
附上程序原文:
void malice()
{
printf("you have been attacked.\n");
}
void foo()
{
int* ret;
ret=(int*)&ret+2; //get the addr of return addr
(*ret)=(int)malice; //set my return addr to malice
}
int main()
{
foo();
return 0;
}

1个回答

bealing
bealing   Rxr 2016.03.26 19:35

没有不断循环,foo的返回地址被破坏,无法返回到main函数中,所以程序会执行失败

bealing
bealing 回复qq_31214517: char a[4] = {}; scanf("%s",a); printf("%s",a);如果输入的字符串长度大于3,就会发生栈溢出
2 年多之前 回复
qq_31214517
qq_31214517 那栈溢出怎么实现呢?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Ubuntu下缓冲器溢出攻击实验(可以看看问题分析)
缓冲器溢出攻击实验题目: 下边的代码摘自《黑客攻防技术宝典——系统实战篇(第 2 版)》2.5 节,攻击该代码,获得root 权限,实现相应的效果。 1 int main(int argc, char *argv[]) 2 { 3 char little_array[512]; 4 if(argc>1) 5 strcpy(little_array,argv[1]); 6 }
Android 栈溢出攻击—[3]ROP 浅析
在缓冲区溢出攻击攻防发展过程中ROP技术作为对抗XN的利用技术,一直发挥着重要的作用,在很多漏洞中其都是关键的攻击手段。本文通过一个简单的例子来对Android的ARM平台下ROP技术做一个简单的分析。
栈溢出笔记1.10 基于SEH的栈溢出
上节中简单地讲述了SEH的原理及逻辑结构。本节,要继续讲述SEH的物理结构及如何利用它进行栈溢出。先来看SEH的物理结构。先回想上节中的图51,我们在程序停在gets函数输入的时候查看SEH链,看到了一大堆异常处理器,而当我们把断点设置在gets函数下一条语句的时候,其中很多没有了,这给我们一个直观的感觉:SEH链保存在栈上。下面,我们就来看看栈上的SEH链。我们使用的是example_10,即添加
[0Day]栈溢出原理—— 注入自己的代码
这个小部分实验还是花了一点时间的。开始想知道就可以了,先不玩了。后来还是静下心来,把这个玩出来了。跳出msgbox还是很兴奋的,尽管里面啥都木有。 上有漏洞的代码: /* note: //MessageBox(0,"test","helloworld!",MB_OK); */ #include #include #include #define PASSWORD "123456"
ubuntu下成功进行栈溢出实验的先决条件
偶尔想在ubuntu下做个栈溢出的实验,很遗憾每次在gbd下运行都会报错: Program received signal SIGSEGV, Segmentation fault.首先想到的就是gcc编译时可能对程序启用了不可执行栈机制,遂用参数关闭该机制,运行后错误依旧: gcc -fno-stack-protector -g -o execstack execstack.c多次调试运行排
栈溢出攻击的一次简单尝试
1.栈溢出的一个简单实例下面程序可能是那些接触C不久之后,可能会犯的一个数组越界导致缓冲区溢出的一个小例子#include <stdio.h> #include <unistd.h> #include <stdlib.h>void func(void) { int a = 23456; int b[2]; printf("b[2] = %d\n",b[2]); }in
Android 栈溢出攻击—[0]原理
栈栈,是一种数据结构,是一个先进后出的数据表,所以会为其抽象出栈底和栈顶两个属性。简单的理解,可以用生活中的装书的箱子类比,我们取书的顺序和放书的顺序相反,即第一本放入的书最后才能取出。对栈的操作也非常简单:压栈和弹栈。如图,通常,在谈论栈溢出时,所指的栈是操作系统虚拟地址空间中的栈区stack:系统栈由系统自动维护(我们可以在编译器编译时指定大小),用于实现函数调用,下面来看下协同栈是如何协助实现
栈溢出漏洞及栈溢出攻击
1. 栈溢出的原因 栈溢出(stack-based buffer overflows)算是安全界常见的漏洞。一方面因为程序员的疏忽,使用了 strcpy、sprintf 等不安全的函数,增加了栈溢出漏洞的可能。另一方面,因为栈上保存了函数的返回地址等信息,因此如果攻击者能任意覆盖栈上的数据,通常情况下就意味着他能修改程序的执行流程,从而造成更大的破坏。这种攻击方法就是栈溢出攻击(stack
栈溢出漏洞攻击原理及防护技术
文/H3C攻防研究团队 现阶段的安全漏洞种类很多,包括大家熟悉的SQL注入漏洞、缓存溢出漏洞、XSS跨站脚本漏洞等。而栈溢出漏洞作为缓冲区溢出漏洞的一种特定的表现形式,在现实网络环境中比较普遍。本文将从栈溢出漏洞的原理、攻击形式及防护方法等方面进行介绍 一、 栈溢出漏洞的原理 栈溢出(Stack Overflow)是在网络与分布式系统中被广泛利用的一种漏洞类型。在汇编中,以线程为线索的指令执
汇编语言函数调用小结及缓冲区溢出的利用
本文以C语言中的write函数为例,以汇编代码的形式,探讨该函数运行时内存中的情况。并讲解了一种缓存区溢出的利用方式。