buffer-overflow相关内容

为什么gets 函数如此危险以至于不应该使用它?

当我尝试使用 GCC 编译使用 gets() 函数的 C 代码时,我收到此警告: (.text+0x34): 警告:`gets' 函数是危险的,不应使用. 我记得这与堆栈保护和安全性有关,但我不确定确切原因. 我怎样才能删除这个警告,为什么会有这样一个关于使用 gets() 的警告? 如果 gets() 这么危险,那为什么我们不能删除它? 解决方案 为了安全地使用 ..
发布时间:2021-12-01 23:32:33 其他开发

64 位缓冲区溢出

为了好玩,我正在尝试做一些缓冲区溢出的实验.我正在这个论坛上阅读有关该主题的内容,并尝试编写自己的小代码. 所以我做的是一个小的“C"程序,它接受字符参数并运行直到分段错误. 所以我提供参数,直到我收到一条消息,我用“A"覆盖了返回地址,即 41.我的缓冲区字符长度,在其中复制我的输入字符串是 [5]. 这是我在 gdb 中所做的. run $(perl -e 'print " ..
发布时间:2021-11-25 06:26:57 服务器开发

数组溢出(为什么会这样?)

好的,所以我正在教我的女朋友一些 C++,她写了一个我认为行不通的程序,但它确实成功了.它再访问数组中的一个元素(例如,访问数组 [5] 以获得大小为 5 的数组).这是缓冲区溢出的一个实例吗?我的想法是它在数组之后直接写入/访问内存,这是正确的吗?基本上我的问题是..为什么会这样? #include 使用命名空间标准;int main(){整数大小;cout ..
发布时间:2021-11-18 03:32:43 C/C++开发

什么是堆栈随机化以及它如何防止缓冲区溢出攻击?

我从一本书中读到缓冲区溢出可能被用作注入攻击系统的漏洞利用代码的方法.而堆栈随机化是防止此类攻击的有效方法之一. 我不明白什么是堆栈随机化以及它如何防止这些攻击? 解决方案 代替 Stack Randomization 的技术被称为 地址空间布局随机化 (ASLR).这背后的理论是尝试随机化项目在内存中的位置,使注入恶意代码的任务更加困难.一些缓冲区溢出和堆栈溢出攻击依赖于了解项目在 ..
发布时间:2021-08-28 18:36:55 其他开发

缓冲区溢出中的Uname系统调用

我正在尝试学习缓冲区溢出的基础知识,因此我编写了以下代码以将其注入到缓冲区中: //uname(* buf)“地址$ -390,%esp;"//为缓冲区保留空间“%esp,%ebx;"//ebx指向缓冲区"xorl%eax,%eax;"//擦除寄存器中的数据"addb $ 0x7a,%al;"//系统调用号"int $ 0x80;"//引发中断//write(fd,* buf,size)“移动$ ..
发布时间:2021-04-16 19:28:00 其他开发

如何使用scanf避免缓冲区溢出

#include#includeint main(int argc,char ** argv){char first_name [20];char last_name [20];int student_num;炭债[1];printf(“输入名称:");scanf(“%s",first_name);printf(“输入姓氏:");scanf(“%s",l ..
发布时间:2021-04-16 19:27:57 其他开发

***检测到堆栈砸碎***:<未知>已终止中止(核心转储)仅在有时出现错误?

我正在完成一项作业(因此,我无法发布代码),而且我很少遇到此运行时错误: *检测到堆栈粉碎** :已终止已中止(核心已弃用) 当我之后再次运行可执行文件时,一切正常.为什么有时仅出现此错误,这是有原因的吗?作为参考,我要完成的任务是让我们将文件中的数据加载到两个向量中,并对数据进行二进制和线性搜索,以查看向量1中的数据是否出现在向量2中. 谢谢! 编辑:附加信息:当我收到此 ..
发布时间:2021-04-16 19:27:48 C/C++开发

C缓冲区溢出的说明

我尝试了解缓冲区溢出.这是我的代码: #includeint main(){char buf [5] = {0};char x ='u';printf(“请输入您的姓名:");得到(buf);printf("Hello%s!",buf);返回0;} buf 数组的大小为5,并以0es初始化.因此(使用零终止符)我有四个字符的空间.如果输入五个字符(例如,堆栈),我将覆盖 ..
发布时间:2021-04-16 19:27:45 其他开发

缓冲区溢出攻击(攻击实验室阶段2)

我必须为名为.我处于实验的第二阶段,必须将代码作为漏洞利用字符串的一部分注入,以使程序指向函数touch2()的地址.我已经说到输出表明它是第2阶段的有效解决方案,但随后它说我造成了段错误,然后说我使该阶段失败了. 这是我收到的错误消息 cookie:0x2d6fc2d5键入字符串:Touch2 !:您调用了touch2(0x2d6fc2d5)具有目标ctarget的2级有效解决方案哎哟 ..

Shellcode执行不正确

我正在尝试解决 Protostar stack5 .这是一个解决方案.它将 shellcode 放在返回地址之后,我尝试将其放在之前数组.我已经试过了shellcode,它可以正常工作. 似乎一切正常,执行跳转到shellcode,但是在shellcode结束后出现段错误,并且没有生成任何shell.我不知道为什么,在 gdb 中,并不是所有的shellcode指令都能正确显示.例如,在 0 ..
发布时间:2021-04-16 19:27:37 其他开发

写缓冲区溢出漏洞-如何找出shellcode的地址?

在编写缓冲区溢出漏洞利用程序时,我了解到我需要输入一个长度为数组的地址(address_of_return_address-address_of_buffer).并且该数组需要用shellcode的地址填充.这样,当我的输入数组溢出时,它将用shellcode的地址覆盖保存的返回地址. 我认为由于shellcode将存储在堆栈上保存的返回地址上方,因此其地址应为address_of_retu ..
发布时间:2021-04-16 19:27:33 其他开发

使调用堆栈向上增长会使缓冲区溢出更安全吗?

每个线程都有自己的堆栈来存储局部变量.但是,在调用函数时,堆栈还用于存储返回地址. 在x86程序集中, esp 指向堆栈中最近分配的末尾.如今,大多数CPU的堆栈增长都为负数.此行为通过溢出缓冲区并覆盖保存的返回地址来启用任意代码执行.如果堆栈要积极增长,那么这样的攻击将是不可行的. 使调用堆栈向上增长是否更安全?为什么英特尔在堆栈向下增长的情况下设计8086?他们是否可以在以后的任何 ..
发布时间:2021-04-16 19:27:30 其他开发

scanf中%(limit)[^ \ n]的行为是什么?从溢出安全吗?

用于 scanf 函数的%(limit)[^ \ n] 格式不安全吗?(其中(限制)是字符串的长度-1) 如果不安全,为什么? 有一种安全的方法来实现仅使用scanf()即可捕获字符串的函数? 在Linux程序员手册上(在终端上键入man scanf), s 格式表示: 匹配一系列非空格字符;下一个指针必须是指向字符数组的指针,该指针必须足够长以容纳输入序列和终止的空字节( ..
发布时间:2021-04-16 19:23:55 其他开发